Serializable 인터페이스, transient

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;