이펙티브 자바
[이펙티브 자바] 아이템 8. finalizer와 cleaner 사용을 피하라
stdio.han
2024. 3. 11. 19:08
자바는 두 가지 객체 소멸자를 제공한다.
finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요하다.
cleaner는 finalizer보다는 덜 위험하지만, 여전히 예측할 수 없고, 느리고, 일반적으로 불필요하다.
사용 예시 :
public class ProblematicResourceHolder {
private SomeResource resource;
public ProblematicResourceHolder(String resourceName) {
this.resource = new SomeResource(resourceName);
}
// Finalizer를 사용한 자원 해제 시도 - 사용을 피해야 함!
@Override
protected void finalize() throws Throwable {
try {
if (resource != null) {
resource.release(); // 자원 해제 시도
}
} finally {
super.finalize();
}
}
}
finalizer를 사용하는 간단한 예시 이다.
안전망 역할이나 중요하지 않은 네이티브 자원 회수용으로만 finalizer 혹은 cleaner를 사용하는게 좋다.
하지만 그냥 둘다 사용 자체를 하지않는게 좋은것 같다.
결론 : finalizer, cleaner 둘다 사용하지말자