윤개발

[ITEM8] finalizer와 cleaner 사용을 피하라 본문

책 내용 요약/Effective Java 3판

[ITEM8] finalizer와 cleaner 사용을 피하라

DEV_SJ 2020. 4. 14. 13:30

자바는 두 가지 객체 소멸자인 finalizer와 cleaner를 제공한다.
finalizer는 예측할 수 없고, 상황에 따라 위험하여 쓰지 말아야한다.
또한 cleaner도 여전히 예측할 수 없고 느리며 불필요하다.

사용을 피해야 하는 이유

  1. 언제 실행될 지 알 수 없다.
  2. 성능 저하가 발생한다.
  3. finalize에서 발생한 예외는 무시되어 알 수 없다.

finalizer와 cleaner 를 쓰는 곳

자원 반납에 쓸 close 메소드를 클라이언트가 호출하지 않았다면 사용할 만 하다.
finalizer나 Cleaner가 호출될지 안될지 언제 호출될지도 모른지만 안하는 것 보다는 나으니 사용할 만 하다.
자바에서 제공하는 FileInputStream, FileOutputStream, ThreadPoolExecutor 가 대표적이다.

정리

cleaner(자바 8 까지는 finalizer)는 안전망 역할이나 중요하지 않은 자원 회수용으로만 사용하자.
물론 이 경우라도 불확실성과 성능 저하에 조심하여야 한다.

Comments