관련 이론 및 문법

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

http://kkikkodev.tistory.com/159


문제 의도

주어진 소스코드를 컴파일하여 실행한 결과를 고르는 문제입니다.


답안

B


풀이 방법

소스코드를 살펴보면, Forest 클래스가 있고, Serializable 인터페이스를 상속하고 있습니다. 그 안에 멤버 변수로 Tree 형 인스턴스 변수 tree 에 Tree 객체를 생성하여 가리키게 하고 있습니다. 그리고 main 메소드가 정의되어 있습니다. 외부에는 Tree 클래스가 정의되어 있습니다.


프로그램이 실행되어 main 메소드가 호출되면, Forest 객체를 만들어 f 변수로 가리키게 합니다. 그 다음, FileOutputStream 을 "Forest.ser" 이라는 이름으로 생성하여 fs 변수로 가리키게 합니다. 그 다음 객체를 직렬화 하기 위해 ObjectOutputStream 객체를 만들어 (fs 를 넘기면서) os 라는 변수로 가리키게 합니다. 그 다음에, os.writeObject(f); 문을 통해서, f 객체를 직렬화하여 write 합니다. 이 때, Forest 클래스 안의 Tree 객체가 있는데, Forest 객체만 Serializable 인터페이스를 상속하고 있고, Tree 클래스는 이를 상속하고 있지 않으므로, NotSerializableException 이 발생하게 됩니다. (참고로 주어진 문제의 정답에는 FileNotFoundException 이 발생한다고 나와있는데 이는 잘못된 것이라, 그 부분은 삭제했습니다.) 만약, Tree 클래스를 Serializable 인터페이스를 상속하게 하면 Exception 이 발생하지 않습니다.


따라서 답안은 B 가 됩니다.


by kkikkodev 2015. 9. 10. 01:05