아이템 77. 개체 통제가 필요하다면 readResolve 대신 enum 자료형을 이용하라.
77. 개체 통제가 필요하다면 readResolve 대신 enum 자료형을 이용하라.
- 싱글톤 패턴을 사용한 클래스에
implements Serializable
을 붙이는 순간 더이상 이 클래스는 싱글턴 클래스가 아니다. 이 객체는 클래스가 초기화 될 당시에 만들어진 객체와 같은 객체가 아니다. - 객체 통제를 위해
readResolve
를 활용할 때는 객체 참조 자료형으로 선언된 모든 객체 필드를 반드시transient
로 선언해야 한다.
결론
- 개체 수와 관련된 불변식을 강제하고 싶을 때는 가능하면 enum 을 이용하자.
- 위와 같은 상황이 아니고, 직렬화가 가능하며 개체 수 통제 가능한 클래스가 필요하다면, 반드시
readResolve
메서드를 구현하고 그 클래스의 모든 객체 필드는 깁노 자료형으로 하거나 아니면,transient
로 선언해야 한다.