Item 09
Item 09
try-finally 보다는 try-with-resources를 사용하라
- 자바 라이브러리 중에서는
close()
메서드를 이용해 명시적으로 닫아줘야 하는 자원 존재- InputStream, OutputStream, java.sql.Connection 등
- 자원을 회수하는 한 가지 방법은 try-finally를 이용하는 것
- finally에서 자원을 회수
- finally는 무조건 실행되므로, 예외가 발생하거나 메서드가 리턴되는 경우에도 무사히 자원 회수가 가능
- 그러나, 두 개 이상의 자원을 사용하는 경우 finally를 여러번 사용해야 한다는 단점 존재
- 또한 이렇게 중첩된 경우 두 번째 예외가 첫 번째 예외를 집어 삼키는 경우도 존재함
- 자바 7에서는 try-with-resource 구문이 등장해서 이런 문제를 해결
사용법
AutoCloseable
인터페이스를 구현하는 자원에 대해서 사용 가능void close()
메서드 하나만 구현해 둔 인터페이스
- 대부분의 클래스가 미리 구현해 둠
- 다음과 같이 사용을 윈하는 자원을 try(자원) 형식으로 사용
close
메소드를 사용할 필요도 없음catch
도 당연히 사용 가능- 예외가 다른 예외를 집어 삼키는 경우도 나타나지 않음
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
String s = br.readLine();
// Logic
return;
}
References
- 조슈아 블로크 - Effective Java 3/E