brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Oct 23. 2018

직렬화(Serialization)

#77 인스턴스 제어에는 readResolve보다 enum타입을 사용하자

Effective Java - 직렬화(Serialization)


#77 인스턴스 제어에는 readResolve 메서드보다 enum 타입을 사용하자


이 전에 싱글톤 클래스를 직렬화 하는 내용을 잠깐 다룬 적이 있었습니다.

https://brunch.co.kr/@oemilk/118


싱글톤 클래스의 직렬화에 대해 알아보겠습니다.




#01 readResolve 메서드 + 모든 인스턴스 필드는 transient로 선언


#01 Elvis class


싱글톤 클래스의 직렬화에서는 readObject 메서드가 필요 없습니다.

readObject 메서드는 항상 새로 생성된 인스턴스를 반환하기 때문에, 싱글톤 클래스에서 최초에 생성된 인스턴스와는 상관이 없기 때문입니다.


readResolve 메서드는 readObject 메서드에서 생성된 인스턴스를 다른 인스턴스로 바꿔 줍니다.

따라서 최초에 생성된 인스턴스(INSTANCE)를 readResolve 메서드를 통해 전달하면, readObject 메서드에서 생성된 인스턴스를 GC에 의해 해제됩니다. 


싱글톤 클래스에서는 readObject를 통해 새로 생성된 인스턴스가 필요 없으므로, 인스턴스 필드도 직렬 화할 필요가 없습니다.

따라서 모든 인스턴스 필드를 transient로 선언해야 합니다.

#02 transient field



#02 enum 타입


#03 EnumElvis class


readResolve 메서드나 transient 인스턴스 필드 대신, enum 타입으로 작성한다면 좀 더 쉽게 구현할 수 있습니다.

enum은 항상 하나의 인스턴스만 생성하기 때문입니다.


매거진의 이전글 직렬화(Serialization)
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari