[Why]
- 코드를 더 짧고 분명하게 만들 수 있기 때문 -> 가독성 향상
- 예외 정보를 추적하기 유용하다.
[When]
- close() 메서드를 이용해서 자원을 회수해야하는 객체를 제거할 때
[How]
try(BufferedReader br = new BufferedReader(new FileReader(path)){
return br.readLine();
} catch(Exception e){
e.printStackTrace();
} finally{
br.close();
}
[GC가 있는데 왜 close()]
자바의 메모리 관리는 가비지 컬렉터에서 자동으로 처리해주기 때문에 왜 close()를 호출을 해서 자원을 명시적으로 회수를 해야하는지 궁금했다.
가비지 컬렉터는 JVM 에서 관리하는 메모리 영역을 정리해주는 역할을 한다. 하지만 네이티브 메소드나 파일 시스템의 파일, 쓰레드와 같이 JVM 단독으로 처리하지 못하는 소위 다른 시스템의 도움이 필요한 것들은 가비지 컬렉터가 정리하지 못한다. 이러한 자원을 회수하기 위해서 프로그래머가 명시적으로 close()를 통해서 자원을 회수하는 것이다.
가비지 컬렉터가 이런 자원을 회수하지 못하는 이유는 고수준 자원을 임의로 처리하면 설계의 의도를 훼손하기 때문이지 않을까?
'programming > java' 카테고리의 다른 글
Item 11. equals 재정의할 때 hashCode도 정의하라 (0) | 2023.03.29 |
---|---|
Item 10. equals 일반 규약을 지켜 재정의하라 (0) | 2023.03.28 |
Item 8. finalizer와 cleaner의 사용을 피하라 (0) | 2023.03.24 |
Item7. 다 쓴 객체 참조를 해제하라 (0) | 2023.03.24 |
Item 6. 불필요한 객체 생성을 피하라 (0) | 2023.03.23 |