-
Notifications
You must be signed in to change notification settings - Fork 1
item 8 sungjaeyoon
sungjaeyoon edited this page Mar 6, 2020
·
2 revisions
자바는 두 가지 객체 소멸자인 finalizer와 cleaner를 제공한다.
finalizer는 예측할 수 없고, 상황에 따라 위험하여 쓰지 말아야한다.
또한 cleaner도 여전히 예측할 수 없고 느리며 불필요하다.
- 언제 실행될 지 알 수 없다.
- 성능 저하가 발생한다.
- finalize에서 발생한 예외는 무시되어 알 수 없다.
자원 반납에 쓸 close 메소드를 클라이언트가 호출하지 않았다면 사용할 만 하다.
finalizer나 Cleaner가 호출될지 안될지 언제 호출될지도 모른지만 안하는 것 보다는 나으니 사용할 만 하다.
자바에서 제공하는 FileInputStream
, FileOutputStream
, ThreadPoolExecutor
가 대표적이다.
cleaner(자바 8 까지는 finalizer)는 안전망 역할이나 중요하지 않은 자원 회수용으로만 사용하자.
물론 이 경우라도 불확실성과 성능 저하에 조심하여야 한다.