AskMePlz / EffectiveJava

이펙티브자바를 공부합니다.
4 stars 4 forks source link

아이템 08. finalizer 와 cleaner 사용을 피하라. #8

Closed dev-jaekkim closed 2 years ago

minjeekang commented 2 years ago

실무나 개인 작업 시, "finalizer" 또는 "cleaner" 사용하신 적 있으신가요? 있다면 어떤 상황에서 사용했는지 궁금해요~

이번주 리딩하시는 분 말고도 다른 분들도용!

leechGamer commented 2 years ago

finalizer가 java9에서 deprecated되고 나서 나온게 cleaner로 알고 있습니다. 어떤 점이 개선된 건지 궁금해요.

dev-jaekkim commented 2 years ago

실무나 개인 작업 시, "finalizer" 또는 "cleaner" 사용하신 적 있으신가요? 있다면 어떤 상황에서 사용했는지 궁금해요~

이번주 리딩하시는 분 말고도 다른 분들도용!

제가 실무에서 finalizer를 사용해본적은 없으나, FileInputStream이나, FileOuputStream 상태에서 resource에 대한 연결을 해제해야할 경우 사용하면 될듯합니다~! cleaner는 제가 아직 자바8만 경험을 해봐서 써본적이 없네요 ㅠ

dev-jaekkim commented 2 years ago

finalizer가 java9에서 deprecated되고 나서 나온게 cleaner로 알고 있습니다. 어떤 점이 개선된 건지 궁금해요.

우선 제가 찾아본 글에 따르면, cleaner가 보다 더 finalization에 비해 사용이 쉽다고 합니다. 이는 객체를 등록하고 취소함에 있어서 그렇다고 하는데요. Cleaner의 경우 이미 존재하고 있는 PhantomReference, WeakReference, SoftReference, reference Que를 활용하여 cleaning 작업을 수행하도록 한다고 합니다. (그에 비해 finalization은 개발자가 PhantomReference를 활용하여 클리닝을 해도 ReferenceQueue에 대해 필요한 기능을 직접 만들어야 했다고 합니다.)

참고하면 좋은 글 1) https://stackoverflow.com/questions/48533097/in-java9-finalizers-have-been-deprecated-instead-cleaners-have-been-introduced 2) https://bugs.openjdk.java.net/browse/JDK-8138696 3) https://bugs.openjdk.java.net/browse/JDK-8165641 4) https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html#finalize--