이펙티브 자바 #item9 try-finally 보다 try-with-resource를 사용하라

임현규·2023년 1월 6일
0

이펙티브 자바

목록 보기
9/47
post-thumbnail

try-with-resource 용도

일반 객체를 소멸하는데는 GC만으로 충분하다. 그러나 외부 시스템 자원과 연동을 위해 InputStream, OuputStream, sql.Connection 등을 활용한다면 사용후 자원을 닫아주는 것이 필요하다. 이럴 때 try-with-resource를 활용할 수 있다.

예제

try-with-resource는 try-finally보다 조금 더 업그레이드 버전이라 생각하면 된다. try-finally는 코드를 지저분하게 만드는데 비해 try-with-resource는 try 블럭 이전에 객체를 할당해서 명시해주기 때문에 훨씬 깔끔하다. 그리고 블럭 내부에서만 생존한다는 사실을 보다 직관적으로 알 수 있다.

class SolutionTest {

    @Test
    void test() throws Exception {
        try (InputStream in = new FileInputStream(src);
            OutputStream out = new FileOutputStream(dst)) {
            byte[] buf = new byte[BUFFER_SIZE];
            int n;
            while ((n = in.read(buf)) >= 0) {
                out.write(buf, 0, n);
            }
        }
    }
}

위 코드 같이 2가지 이상의 자원을 해제할 때도 코드를 짧고 간편하게 짤 수 있다.

profile
엘 프사이 콩그루

0개의 댓글