자바는 두 가지 객체 소멸자를 제공한다.
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 둘다 사용하지말자
'이펙티브 자바' 카테고리의 다른 글
[이펙티브 자바] 아이템 10. equals는 일반 규약을 지켜 재정의하라 (0) | 2024.03.12 |
---|---|
[이펙티브 자바] 아이템 9. try-finally보다는 try-with-resources를 사용하라 (0) | 2024.03.11 |
[이펙티브 자바] 아이템 7. 다 쓴 객체 참조를 해제하라 (0) | 2024.03.11 |
[이펙티브 자바] 아이템 6. 불필요한 객체 생성을 피하라 (0) | 2024.03.11 |
[이펙티브 자바] 아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2024.03.11 |