본문 바로가기

programming/java

Item 8. finalizer와 cleaner의 사용을 피하라

[Why]

  • 위험하기 때문이다. (예측 불가능, 느림)
  • 즉시 수행되지 않는다.
  • 수행 시점 뿐만 아니라 수행 여부도 보장하지 않는다.
  • finalizer는 보안 문제를 일으킬 가능성이 있다.

[When]

  • 되도록 사용하지 않는 것을 권장
  • 제 때 실행되어야 하는 작업은 반드시 피하라
  • 상태를 영구적으로 수정하는 작업은 반드시 피하라

[How]

  • AutoCloseable을 구현하고 close 메서드를 호출하는 방법을 사용하라.
  • 프로그래머의 실수를 방지하는 용도로 사용하라
    close 메서드 호출을 하지 않는 경우에는 객체를 방치하는 것보다 finalizer, cleaner를 통해서 객체를 닫는 안전망을 추가하는 것이 낫다.
  • 가비지 컬렉터가 접근하지 못하는 네이티브 피어와 연결된 객체를 회수할 때 사용하라. 단 이 경우도 close 메서드를 통해서 회수하는 것이 좋다.