4.1) OCJP/1Z0-851 / 2012-08-28

OCJP (1Z0-851 / 2012-08-28 / Exam A) - 22 번

kkikkodev 2015. 7. 14. 16:09



관련 이론 및 문법

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

http://kkikkodev.tistory.com/159


문제 의도

주어진 소스코드를 컴파일하여 실행한 결과를 고르는 문제입니다. (serializeBanana 메소드와 deserializeBanana 메소드는 올바르게 Java 직렬화 기법을 사용하여 객체를 직렬화하고 역직렬화하는 것으로 정의되어 있다고 가정합니다.)


답안

C


풀이 방법

14 라인을 보면, Serializable 인터페이스를 상속하는 Food 클래스를 정의하고 있습니다. 이 클래스는 직렬화 / 역직렬화가 가능하게 된 것입니다. 멤버 변수로는 int 형 변수인 good 을 가지고 있습니다. (값은 3) 15 라인을 보면, Fruit 클래스를 정의하는 데 Food 클래스를 상속하고 있습니다. (Serializable 인터페이스도 함께) 멤버변수로는 int 형 변수 juice 를 가지고 있습니다. (값은 5) 16 라인은, Banana 클래스를 정의하는데 Fruit 클래스를 상속하고 있습니다. (Serializable 인터페이스도 함께) 멤버변수로는 int 형 yellow 를 가지고 있습니다. (값은 4) 


프로그램이 시작되면, main 메소드가 호출되어 19 라인이 실행됩니다. 19 라인에서는, Banana 형 객체 b 와 b2 를 생성합니다. 20 라인에서는, b.serializeBanana(b); 를 호출하여 b 객체를 직렬화합니다. (내부적으로 ObjectOutputStream 클래스의 writeObject 메소드를 사용합니다.) 21 라인에서는 b2 = b.deserializeBanana(); 를 실행하여, b 객체를 역직렬화한 것을 b2 에 다시 저장합니다. (b 를 직렬화했다가 다시 역직렬화했으니, 다시 b 객체가 저장된다고 보면 됩니다.) 22 라인에서는, b2 의 yellow 와 juice, good 을 출력합니다. (b 와 동일하게 4, 5, 3 출력)


따라서, 답은 C 가 됩니다.