아이템 78. 직렬화된 객체 대신 직렬화 프락시를 고려해 보라.
78. 직렬화된 객체 대신 직렬화 프락시를 고려해 보라.
직렬화 프락시 장점
- 일관성 검사 필요 없음
- 방어적 복사 필요 없음
class Period{
private Object writeReplace(){
return new SerializationProxy(this);
}
// 직렬화 프락시 패턴 구현을 위한 readObject 메서드
private void readObject(ObjectInputStream stream)
throws InvalidObjectException{
throw new InvalidObjectException("Proxy required");
}
// Period 클래스의 직렬화 프락시
private static class SerializationProxy implements Serializable {
private final Date start;
private final Date end;
SerializationProxy(Period p) {
this.start = p.start;
this.end = p.end;
}
private void readObject(ObjectInputStream stream){
return new Period(start, end);
}
private static final long serialVersionUID = 2344939929329329L; // 아무 수가 가능
}
}
결론
클라이언트가 확장 할 수 없는 클래스에 readObject
나 writeObject
를 구현해야 할 때는 직렬화 프락시 패턴 도입을 고려하자.