
public class Person implements Serializable {
public static final long serialVersionUID = 123L;
private long id;
private String name;
private transient int age;
public Person(long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
}
다른 특별한 기능 없이 Serializable 인터페이스를 구현한 객체는 직렬화 가능하다는 걸 알리는 역할을 한다.
자바 내부에서 사용되는 객체를 바이트 타입의 데이터로 변환해준다.
다른 객체를 멤버변수로 가지고 있는 경우에는 해당 객체 클래스도 Serializable 인터페이스를 구현했어야 직렬화할 수 있다.
버전 정보가 맞지 않은 경우 역직렬화 과정에서 오류가 발생할 수 있다.
serialVersionUID 값이 같아 버전이 동일한 경우에는 멤버 변수 및 메서드 추가가 있어도 오류 없이 역직렬화가 이루어질 수 있다.
직렬화 시에 따로 serialVersionUID 선언을 하지 않더라도 내부적으로 추가되므로 명시적으로 선언하는 편이 좋다.
transient 키워드를 변수 앞에 선언할 경우 해당 변수는 직렬화 대상에서 제외할 수 있다.
비밀번호와 같이 민감한 정보를 제외하고 싶을 경우 사용한다.
역직렬화 시 transient 선언된 변수는 해당 타입의 기본 값으로 초기화된다.
ObjectOutputStream과 ObejctInputStream는 객체를 직렬화/역직렬화할 수 있는 메소드를 제공하는 스트림이다.
ObjectStream 사용하기 위해서는 객체가 직렬화되어 있어야 한다.
reflection으로 가져올 수 있는 정보를 바이너리로 바꾸고 객체로 받아올 수 있다.