#77 인스턴스 제어에는 readResolve보다 enum타입을 사용하자
이 전에 싱글톤 클래스를 직렬화 하는 내용을 잠깐 다룬 적이 있었습니다.
https://brunch.co.kr/@oemilk/118
싱글톤 클래스의 직렬화에 대해 알아보겠습니다.
싱글톤 클래스의 직렬화에서는 readObject 메서드가 필요 없습니다.
readObject 메서드는 항상 새로 생성된 인스턴스를 반환하기 때문에, 싱글톤 클래스에서 최초에 생성된 인스턴스와는 상관이 없기 때문입니다.
readResolve 메서드는 readObject 메서드에서 생성된 인스턴스를 다른 인스턴스로 바꿔 줍니다.
따라서 최초에 생성된 인스턴스(INSTANCE)를 readResolve 메서드를 통해 전달하면, readObject 메서드에서 생성된 인스턴스를 GC에 의해 해제됩니다.
싱글톤 클래스에서는 readObject를 통해 새로 생성된 인스턴스가 필요 없으므로, 인스턴스 필드도 직렬 화할 필요가 없습니다.
따라서 모든 인스턴스 필드를 transient로 선언해야 합니다.
readResolve 메서드나 transient 인스턴스 필드 대신, enum 타입으로 작성한다면 좀 더 쉽게 구현할 수 있습니다.
enum은 항상 하나의 인스턴스만 생성하기 때문입니다.