반응형
최근 읽고 있는 '자바 최적화'라는 책을 보다가 몰랐었던 내용이 있어 기록할겸 남겨본다.
자바7 이전 리소스 사용후 닫는 것은 온전히 개발자의 몫
public void readFirstLineOld(File file) throws IOException {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String FirstLine = reader.readLine();
} finally {
if (reader != null) {
reader.close();
}
}
}
자바7 부터 언어 자체에 추가된 try-with-resources 생성자를 이용하면 try키워드 다음의 괄호 안에 리소스(AutoCloseable 인터페이스를 구현한 객체만 가능)를 지정해서 생성할 수 있다. 이로써 try 블록이 끝나는 지점에 개발자가 close() 메서드 호출을 깜빡 잊고 빠뜨려도 자동으로 호출된다. close() 메서드는 방금 전 예제와 똑같이 호출되고 비지니스 로직의 예외 발생 여부와 상관없이 무조건 실행된다.
public void readFirstLineOld(File file) throws IOException {
try( BufferedReader reader = new BufferedReader(new FileReader(file))) {
String FirstLine = reader.readLine();
}
}
코드가 훨씬 심플해졌다. 하지만 try-with-resources 생성자 사용시 자동으로 close() 를 호출해주는 것을 몰랐다면 finally 코드를 생성해 그 안에서 또 close를 호출하려고 하였을거다...
위의 예에서는 catch(IOException exception) {} 과 같이 별도로 에러처리를 안해주고 그냥 상위로 exception을 그냥 던져버리는데 사실 좋지 않다. 항상 에러 발생시 catch 내부에서 잡고 로깅해주고 처리해주는 것이 좋다.
이번 포스팅을 하며 느낀점은 기본에 좀 더 충실한 공부가 필요할 것 같다.
반응형
'Programming > Java,Spring' 카테고리의 다른 글
springboot & spring cloud Error creating bean with name 'configurationPropertiesBeans' (0) | 2021.11.24 |
---|---|
[ Spring ] RestTemplate대신 WebClient (0) | 2021.04.02 |
[ Java ] Java stream skip 사용시 IllegalArgumentException: (0) | 2021.01.14 |
[ Java ] excel poi background color is not change and black (0) | 2020.12.17 |
Java process exec, waitFor(), hang/deadlock (0) | 2020.05.21 |