[아이템3] 직렬화된 인스턴스를 역직렬화할 때마다 새로운 인스턴스가 만들어진다.

2024. 7. 1. 17:05BOOKS/이펙티브 자바

  • 싱글턴 클래스는 생성자를 private으로 만들기 때문에 인스턴스를 하나로 유지할 수 있는 것인데 역직렬화는 생성자를 사용하는 것이 아니라 직렬화된 객체의 정보를 읽어 그대로 복원하는 것이기 때문에 별도의 조치를 취하지 않으면 새로운 인스턴스가 생기는 것을 막을 수 없음
  • readResolve 메서드는 직렬화된 데이터를 역직렬화할 때 호출되는 특별한 메서드로, 해당 메서드를 사용하여 역직렬화된 객체를 임의로 대체하거나 수정할 수 있는 기능을 제공
public class Elvis {
		private static final Elvis INSTANCE = new Elvis();
		private Elvis() {...}
		public static Elvis getInstance() {return INSTANCE;}

		public void leaveTheBuilding() {...}
}
private Object readResolve() {
		return INSTANCE;
}