## 목표
자바의 기본 직렬화 형태와 커스텀 직렬화 형태를 알아보자
## 핵심 요약
- 자바의 기본 직렬화 형태는 객체를 직렬화한 결과가 해당 객체의 논리적 표현에 부합할 때 사용하자.
- 부합하지 않을 때는 커스텀 직렬화 형태를 고려하자.
## Topics
defaultWriteObject(), defaultReadObject()
[1] defaultWriteObject()
ObjectOutputStream의 메서드
- 기본 직렬화 형태를 사용해 클래스에서 직렬화가 가능한 필드를 자동으로 저장한다.
transient로 선언된 필드는 직렬화되지 않는다.
private void writeObject(ObjectOutputStream s) throws IOException {
s.defaultWriteObject(); // 기본 직렬화 수행 (transient 필드는 제외)
s.writeInt(size); // 추가로 직렬화해야 할 데이터 직접 저장
}
[2] defaultReadObject()
ObjectInputStream의 메서드
- 기본 직렬화 형태를 사용해서 객체를 복원한다. (defaultWriteObject()로 직렬화된 데이터 기반)
transient 필드는 기본값으로 초기화되므로, 필요하면 별도로 추가 로직을 작성해야 한다.
private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
s.defaultReadObject(); // 기본 역직렬화 수행 (transient 필드는 제외)
int numElements = s.readInt(); // 추가로 저장된 데이터 읽기
// transient 필드 - 기본값 초기화 대신 원하는 로직 추가 가능
for (int i = 0; i < numElements; i++) {
add((String) s.readObject());
}
}
## 목표
자바의 기본 직렬화 형태와 커스텀 직렬화 형태를 알아보자
## 핵심 요약
## Topics
defaultWriteObject(), defaultReadObject()
[1] defaultWriteObject()
ObjectOutputStream의 메서드transient로 선언된 필드는 직렬화되지 않는다.[2] defaultReadObject()
ObjectInputStream의 메서드transient필드는 기본값으로 초기화되므로, 필요하면 별도로 추가 로직을 작성해야 한다.