[아이템8] finalizer를 사용한 클래스는 finalizer 공격에 노출되어 심각한 보안 문제를 일으킬 수도 있다.
2024. 7. 1. 17:07ㆍBOOKS/이펙티브 자바
finalizer는 정적 필드에 자신의 참조를 할당하여 가비지 컬렉터가 수집하지 못하게 막을 수 있다.
public class Zombie {
static Zombie zombie;
public void finalize() {
zombie = this;
}
}
객체 생성을 막으려면 생성자에서 예외를 던지는 것만으로 충분하지만 finalizer 있다면 그렇지도 않다.
public class Zombie2 {
static Zombie2 zombie;
int value;
public Zombie2(int value) {
if(value < 0) {
throw new IllegalArgumentException("Negative Zombie2 value");
}
this.value = value;
}
public void finalize() {
zombie = this;
}
}
vlaue 값에 대한 유효성 검사가 있지만 finalizer로 인해 무효화