Effective Java - Item 9

Updated:

Effective Java

Item 9. try-finally보다는 try-with-resources를 사용하라

try-finally

전통적으로 꼭 해주어야 하는 작업(close 메서드 호출)을 수행할 때 사용.
자원이 많아져서, 꼭 해주어야 하는 작업들이 늘어나면 코드가 지저분해 진다. 또한 try 블록과 finally 블록 모두에서 오류가 발생하면, 둘 중 두번째 발생한 예외가 처음 발생한 예외를 집어 삼켜 디버깅을 어렵게 한다.

try-with-resource

자바 7에서 새롭게 도입되었으며, 쉽게 자원해제 처리를 할 수 있다.
try에 자원 객체를 전달하면, try 코드 블록이 끝나면 자동으로 자원을 종료해주는 기능!

try(Something1 s1 = new Something1();
    Something2 s2 = new Something2()) {
  use(resource);
} catch(...) {
    ...
}

즉, 따로 finally 블록이나 모든 catch 블록에 종료 처리를 하지 않아도 된다.
또한 예시와 같이 복수 자원 객체도 전달 할 수 있다.

정리

꼭 회수해야 하는 자원을 다룰 때는 try-finally 말고, try-with-resource를 사용하자.
반드시! 코드는 더 짧고 분명해지며, 만들어지는 예외 정보도 훨씬 유용하다.
try-with-resource는 정확하고 쉽게 자원을 회수할 수 있다.

출처

Joshua Bloch. Effective Java 3/E. n.p.: 인사이트, 2018년 11월 1일.

참고 페이지