728x90
자바에는 close() 메소드를 사용해 직접 닫아야 하는 자원이 많음.
ex)
- InputStream
- OutputStream
- java.sql.Connection
...
이를 방지하기 위해 try-finally가 많이 쓰였다.
static String firstLineOfFile(String path) throws IOExceiption {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
}
728x90
사용해야할 자원이 많아지면
static void copy(String src, String dst) throws IOException {
InputStream in = new FileInputStream(src);
try {
OutputStream out = new FileOutputStream(dst);
try {
...
} finally {
out.close();
}
in.close();
}
}
이러면 코드가 매우 지저분해짐.
이를 좀 더 깔끔하게 바꾸면
static void copy(String src, String dst) throws IOException {
try (
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst)) {
...
}
}
이렇게 된다.
아래 코드가 try-with-resource를 적용한 코드인데, 이 코드가 짧고 읽기 수월하고, 문제를 진단하기에도 훨씬 좋다.
- 핵심정리
꼭 회수해야 하는 자원을 다룰 때는 try-finally 말고, try-with-resources를 사용.
코드는 더 짧고 분명해지고, 만들어지는 예외 정보도 훨씬 유용.
- 참고
728x90
'개발 > Java&Kotlin' 카테고리의 다른 글
[Java] 클래스와 멤버는 접근 권한 최소화하기 (1) | 2023.01.16 |
---|---|
[Java] File 입출력 (0) | 2023.01.13 |
[Java] private 생성자로 인스턴스화 막기, 의존 객체 주입 사용하기 (2) | 2023.01.09 |
[Java] private 생성자나 열거 타입으로 싱글턴 보증하기 (0) | 2023.01.07 |
[Java] 생성자 대신 빌더 사용하기 (0) | 2023.01.05 |