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

심규환·2022년 1월 15일
0

Effective Java

목록 보기
9/29
post-thumbnail

자바 라이브러리에는 close 메서드를 직접 호출해서 닫아줘야 하는 자원이 많다. 하지만 사람이 하는지라 깜빡하고 못하는 경우가 대다수 일 것이다.
안전망으로 finalizer를 활용하고 있지만 Item 8에서처럼 믿을만 하지 못하다.
전통적으로 try-finally를 사용하고 있었지만 최선의 방책은 아니다.

static String firstLineOfFile(String path) throws IOException {
    BufferdReader br = new BufferedReader(new FileReader(path));
    try{
    	return br.readLine();
    } finally {
    	br.close();
    }
}

위의 코드는 약간의 결점이 있다. 바로 try문과 finally문 안에 에러가 동시에 난다면 어느 한쪽의 에러만 기록될 것이고 나머지 에러는 알 수가 없게 된다.
또 자원이 여러 개일 경우, try문을 중첩해서 사용할 것이고 코드는 지저분해지게 된다.

그 대안이 try-with-resource이다. try 안에 자원을 같이 두는 것인데. 사용하려면 AutoCloseable 인터페이스를 구현해야 한다. 그러면 try 문안에서 장애가 날 시, AutoCloseable 안에 close()를 호출하여 자원을 닫아주게 된다.

static String firstLineOfFile(String path) throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(path)) {
    	return br.readLine();
    }
}

한 개의 자원뿐 아니라 다수의 자원을 사용하더라도 try-with-resource를 활용해 더 짧고 보기 쉽게 코드를 짤 수 있다. 물론 이 뒤에 catch 절도 사용할 수 있으니 활용하자.

profile
장생농씬가?

0개의 댓글