CODEDRAGON ㆍDevelopment/Java
Serializable 인터페이스
· 직렬화는 자바에서 java.io.Serializable 이라는 인터페이스로 구현되어 있습니다.
· 파일의 입출력 대상이 되는 인스턴스는 이 인터페이스를 구현하거나, 이를 구현하는 클래스를 상속해야 합니다.
· Serializable 인터페이스를 구현한 클래스를 생성하면 해당 클래스의 모든 멤버변수는 직렬화 대상이 됩니다. 즉, 자바에서는 Serializable 인터페이스를 구현한 클래스만 직렬화할 수 있도록 제한하고 있습니다.
· 객체가 스트림을 통해 직렬화 될 때는 객체에 있는 멤버변수가 직렬화 됩니다.
· 객체의 멤버변수 중에 직렬화 대상에서 제외하고 싶은 것은 transient 키워드를 사용하면 됩니다.
구분 |
설명 |
기본 자료형 |
기본 자료형(boolean, char, byte, short, int ,long, float, double)은 정해진 바이트의 변수이기 때문에 바이트 단위로 분해하여 전송한 후 다시 조립하면 되기 때문에 문제가 없습니다. |
참조 자료형 |
객체를 구성하는 자료형들의 종류와 수에 따라 객체의 크기는 가변적이며, 다양하게 바뀔 수 있습니다. 이런 객체를 직렬화 하기 위해서 Serializable 인터페이스를 구현해야 합니다. |
//Serializable인터페이스가 구현된 클래스는 객체 직렬화 대상이 됩니다.
public class Customer implements Serializable{} |
transient
객체의 데이터 중 특정 데이터는(패스워드) 여러가지 이유(보안)로 전송을 하고 싶지 않을 수 있습니다. 이러한 변수는 직렬화에서 제외해야 되며, 이를 위해서 변수에 transient를 선언해야 합니다.
또 객체의 클래스에 직렬화가 안되는 객체에 대한 참조를 포함하고 있는 경우 해당 변수를 직렬화에서 제외할 수 있습니다.
transient키워드가 붙은 인스턴스 변수는 그 타입의 기본값으로 직렬화가 됩니다. 그리고 역직렬화하면 참조변수에는 null이 저장됩니다.
public transient int age;
|