[Effective Java/아이템9] try-finally 보다는 try-with-resources를 사용하라.
2021. 9. 27. 20:11
반응형
# try-finally 보다는 try-with-resources를 사용하라
## 1. 자원이 닫힘을 보장하는 수단, try-finally의 단점
- 코드 가독성에 있어 지저분하다.
- 두번째 예외가 첫번째 예외를 집어삼켜버러 실제 시스템에서 디버깅을 어렵게한다.
static void copy(String src, String dst) throws IOException {
InputStream in = new FileInputStream(src);
try {
OutStream out = new FileOutStream(dst);
try {
byte[] buf = new byte[BUFFER_SIZE];
int n;
while((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
}finally {
out.close();
}
}finally {
in.close();
}
}
## 2. 자원 회수의 최선책 try-with-resources
- AutoCloseable 인터페이스 구현: close() 메서드 하나만 정의
public interface AutoCloseable {
void close() throws Exception;
}
static void copy(String src, String dst) throws IOException {
try (InputStream in = new FileInputStream(src);
OutStream out = new FileOutStream(dst)) {
byte[] buf = new byte[BUFFER_SIZE];
int n;
while((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
} catch (IOException e) {
return defaultValue;
}
}
- 읽기 쉽고 문제 진단에 유리하다.
- catch를 이용해 try문을 중첩하지 않고도 다수의 예외 처리가 가능하다.
- 숨겨진 예외도 버려지지 않고, suppressed 꼬리표를 달고 출력된다.
readLine()과 close() 호출 양쪽에서 예외가 발생하면, close() 예외는 숨겨지고 readLine()에서 발생한 예외가 기록된다.
728x90
반응형
'dev book > Effective Java' 카테고리의 다른 글
[Effective Java/아이템11] equals를 재정의하려거든 hashCode도 재정의하라. (0) | 2021.10.13 |
---|---|
[Effective Java/아이템10] equals는 일반 규약을 지켜 재정의하라. (0) | 2021.10.12 |
[Effective Java/아이템8] finalizer와 cleaner 사용을 피해라 (0) | 2021.09.26 |
[Effective Java/아이템7] 다 쓴 객체 참조를 해제하라 (0) | 2021.09.15 |
[Effective Java/아이템6] 불필요한 객체 생성을 피하라 (0) | 2021.09.13 |
Written by ner.o
개발자 네로의 개발 일기,
자바를 좋아합니다 !
댓글 개