이펙티브 자바:: 아이템 9 <try-finally보다는 try-with-resources를 사용해라>
🙉

이펙티브 자바:: 아이템 9 <try-finally보다는 try-with-resources를 사용해라>

Created
Aug 11, 2024 10:50 AM
Last edited time
Last updated August 22, 2024
Tags
Language
Language
Java
URL

Intro::

이펙티브 자바 정리본입니다.
 
자바 라이브러리에는 close 메서드를 호출해 직접 닫아줘야하는 자원이 많습니다. 이 경우 클라이언트가 놓치기 쉬워서 예츨할 수 없는 성능 문제로 이어지기도 합니다. 전통적으로 이를 방지하기 위해 try-finally를 사용하였지만 여러 자원을 가지고 있는경우 지저분해지는 문제가 있습니다.
static void copy(String src, String dst) throws IOException { InputStream in = new FileInputStream(src); try { OutputStream out = new FileOutputStream(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(); } }
해당 코드에서의 문제는 두번째 예외가 첫번째 예외를 완전히 집어삼킨다는 것입니다. 그러면 스택 추적 내역에 첫 번째 예외에 관한 정보는 남지 않게 되어, 실제 시스템에서의 디버깅을 어렵게 합니다.
이러한 문제들은 자바 7이 투척한 try-with-resources 덕에 모두 해결되었습니다. 이 구조를 사용하려면 해당 자원이 AutoCloseable 인터페이스를 구현해야 합니다. 단순히 void를 반환하는 close 메서드 하나만 덩그러니 정의한 인터페이스입니다.
// try-with-resources 와 catch 절 static String firstLineOfFile(String path, String defaultVal) { try (BufferedReader br = new BufferedReader( new FileReader(path))) { return br.readLine(); } catch (IOException e) { return defaultVal; } }

References::

이펙티브 자바 / 조슈아 블로크 지음 (프로그래밍 인사이트)

Loading Comments...