try-finalizer의 문제점
첫번째 예외가 덮어써지는 문제
static String sfirstLineOfFile(String path) IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
}
try 문 안의 readLine이 예외를 던지고 br.close가 예외를 던지면 readLine의 의 예외가 br.close의 예외에 덮어씌워짐
첫 번쨰 예외에 관한 정보가 남지 않게 되어 디버깅을 어렵게 만듬
둘 이상의 try-finally가 사용 시 코드의 가독성 문제
void method() {
try {
try{
...
} finally {
..
}
} finally {
...
}
}
위의 코드형태는 굉장히 지저분함
try-with-resources를 사용하자!
static String firstLineOfFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
return br.readLine();
}
}
- 자원이 AutoCloseable이 구현되어있다면 해당 방식을 사용할 수 있으며 try가 끝날 때 close 메서드가 실행된다
- 복수의 자원을 처리하기에도 편하다
- 예외가 덮어써지지 않는다
- 스택 추적 내역에 (suppressed)라는 꼬리표를 달고 함께 출력된다