2012년 10월 19일 금요일

OCJP 문제풀이 - Question 25


QUESTION 25
Assuming that the serializeBanana() and the deserializeBanana() methods will correctly use Java serialization and given:

import java.io.*;
class Food implements Serializable {int good = 3;}
class Fruit extends Food {int juice = 5;}
public class Banana extends Fruit {
  int yellow = 4;
  public static void main(String [] args) {
    Banana b = new Banana(); Banana b2 = new Banana();
    b.serializeBanana(b); // assume correct serialization
    b2 = b.deserializeBanana(); // assume correct
    System.out.println("restore "+b2.yellow+ b2.juice+b2.good);
  }
  // more Banana methods go here
}

What is the result?

A. restore 400
B. restore 403
C. restore 453
D. Compilation fails.
E. An exception is thrown at runtime.

Answer: C
Section: All

Explanation/Reference:

직렬화(serialize)란 네트워크를 통해 객체정보를 전달하기위해 사용하는 기능이다.

직렬화를 하면 생성된 객체 instance 자체를 바이트 단위로 변환하고,
바이트 형태의 데이터는 네트워크를 통해 전달할 수있게 된다.

받는 쪽에서는 역직렬화(deserialize) 를 통해 받은 바이트 정보를 객체로 원복시켜,
인스턴스 자체를 같은 것으로 사용할 수 있는것이다.


예제에서는 b의 인스턴스를 직렬화하고, 다시 역직렬화하여 b2에다가 담았다.
이 b2에 담은 인스턴스는 b의 인스턴스 그대로 이다.

그러므로 restore 453을 출력하게된다.

블로그 보관함