티스토리 뷰

자바 라이브러리에는 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많다. 대표적으로 inputStream, OutputStream, java.sql.Connection 등이 좋은 예다. 자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어진다.

이런 자원 중 상당수가 안전망으로 finalizer를 활용하고는 있지만 finalizer는 그리 믿을만 하지 못하다.

또한 try 문을 중첩해서 사용할 경우 가독성은 급격히 내려간다.

try-with-resource 문을 사용하기 위해서는 해당 클래스가 AutoCloseable 인터페이스를 구현해야한다. 이 인터페이스는 단순히 void를 반환하는 close 메서드 하나만 덩그러니 정의한 인터페이스다.

아래는 AutoCloseable을 실제 구현한 InputStream의 일부 코드다.

public interface Closeable extends AutoCloseable {
    public void close() throws IOException;
}


public abstract class InputStream implements Closeable {
        public void close() throws IOException {}
}

try-with-resource를 사용하고 싶다면 클래스에 AutoCloseable(Closeable)을 구현하기 바란다.

try(InputStream in = new FileInputStream(src);
    OutputStream out = new FileOutputStream(dst)){
  ...
}catch(IOException e) {
  ...
}finally {
  ...
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함