관련 이론 및 문법

(객체 직렬화 (Serialization) 참고)

http://kkikkodev.tistory.com/159


문제 의도

java.io.Serializable 인터페이스의 사용에 대해 참인 보기를 3 개 고르는 문제입니다.


답안

B, D, E


풀이 방법

보기 A 에서는, aggregation 을 사용하는 class 객체는 직렬화될 수 없다고 하고 있는데 이는 잘못된 말입니다. aggregation 관계는 일종의 멤버 변수 관계라고 보시면 편할 것 같습니다. 멤버 변수가 객체이더라도 이를 직렬화 할 수 있으므로 답안 후보에서 제외합니다.


보기 B 에서는, 어떤 JVM 에서 직렬화된 객체는 다른 JVM 에서 역직렬화될 수 있다고 하고 있는데 이는 맞는 말입니다. JVM 은 기본적으로 동일한 문법과 환경을 지원하므로 가능합니다. 따라서 답안이 됩니다.


보기 C 에서는, volatile 지시자를 가지고 있는 필드의 값은 직렬화와 역직렬화의 과정에서 죽는다 (살아남지 않는다) 고 하고 있는데 이는 잘못된 말입니다. transient 지시자가 직렬화, 역직렬화의 과정에서 제외되므로 답안 후보에서 제외합니다.


보기 D 에서는, transient 지시자를 가지고 있는 필드의 값은 직렬화와 역직렬화의 과정에서 죽는다고 하고 있는데 이는 맞는 말입니다. 따라서 답안이 됩니다.


보기 E 에서는 java.io.Serializable 을 상속하지 않은 클래스를 부모 클래스로 상속하는 자식 클래스를 직렬화하는 것은 합법적이라고 하고 있는데, 이는 맞는 말입니다. 부모 클래스에 매개변수가 없는 기본 생성자가 정의되어 있다면 부모 클래스를 직렬화 하지 않더라도 자식 클래스만 직렬화해도 됩니다. 따라서 답안이 됩니다.


결과적으로 답안은 B, D, E 입니다.


by kkikkodev 2016. 11. 20. 17:06