윤개발
[ITEM9] try-finally보다는 try-with-resources를 사용하라. 본문
책 내용 요약/Effective Java 3판
[ITEM9] try-finally보다는 try-with-resources를 사용하라.
DEV_SJ 2020. 4. 14. 13:32자바 라이브러리에는 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많다.
상당수가 안전망으로 finalizer를 이용하지만 믿을만 하지 못하다.(item8)
전통적으로 자원을 닫힘을 보장하는 수단으로서 아래와 같이 try-finally가 쓰였다.
try {
OutputStream out = new FileOutputStream("filePath");
// do something
} finally {
out.close();
}
하지만 2개의 자원을 닫아야 하는 구간에서는 예외가 무시될 수 있으며 코드의 가독성도 떨어진다.
public void copy(String src, String dst) throws IOException {
InputStream in = new FileInputStream(src);
try {
OutputStream out = new FileOutputStream(dst);
try {
// do something
} finally {
out.close();
}
} finally {
in.close();
}
}
이러한 문제는 자바 7에서 등장한 try-with-resources구문을 사용하면 해결할 수 있다.
물론, AutoCloseable 인터페이스를 구현한 클래스에 대해서만 사용이 가능하며 여러 개의 자원도 한 번에 처리할 수 있다.
public void copy() throws IOException {
try (InputStream in = new FileInputStream("filePath");
OutputStream out = new FileOutputStream("filePath")) {
// do something
}
}
정리
꼭 회수해야 하는 자원은 try-with-resources 문장을 사용하자. 코드는 더 짧고 분명해진다.
'책 내용 요약 > Effective Java 3판' 카테고리의 다른 글
[ITEM16] public 클래스에서는 public 필드가 아닌 접근자 메서드(getter)를 사용하라. (0) | 2020.04.14 |
---|---|
[ITEM10] equals는 일반 규약을 지켜 재정의하라. (0) | 2020.04.14 |
[ITEM8] finalizer와 cleaner 사용을 피하라 (0) | 2020.04.14 |
[ITEM7] 다쓴 객체 참조를 해제하라. (0) | 2020.04.14 |
[ITEM2] 생성자에 매개변수가 많다면 빌더를 고려하라. (0) | 2020.02.25 |
Comments