본문 바로가기

카테고리 없음

[JAVA] 직렬화(Serialization) 란 ?

직렬화란 ?

  • 직렬화(Serialization)는 객체 인스턴스의 데이터를 I/O스트림에 적합한 일련의 데이터로 변환하는 과정이다.
  • 이 과정을 거쳐 파일, 메모리 버퍼, 네트워크 전송을 통해 동일하거나 다른 컴퓨터환경에서 객체 인스턴스를 재구성할 수 있다.
  • 객체 인스턴스는 메모리 주소 값을 저장하고 있기 때문에, 메모리 주소 값을 그대로 송신하면 수신 받는 쪽에서는 아무 쓸모 없는 데이터가 된다. 따라서 객체 인스턴스의 값의 형태로 변환이 필요하다.

 

JAVA 객체 직렬화 구현

 

1) Serializable 구현

  • 클래스 객체의 직렬화를 가능하게 하려면, Serializable이라는 인터페이스를 구현해야 한다.
  • Serializable 인터페이스에는 메서드나 필드가 없으며, 직렬화 가능한 의미 체계를 식별하는 역할만 사용된다.
  • Serializable 인터페이스를 구현하지 않은 클래스에서는 직렬화가 불가능하며, 인터페이스를 구현한 클래스를 상속받은 모든 하위 유형은 자체적으로 직렬화 할 수 있다.
  • 직렬화하려는 클래스에서 제외하고 싶은 필드가 있다면, transient를 붙여 직렬화 대상에서 제외할 수 있다. 제외된 대상의 값은 null로 처리된다.

 2) I/O Stream을 통해 직렬화 객체 입출력

  • Java에선 ObjecInputStream / ObjectOutputStream 을 통해 객체의 데이터를 입출력 할 수 있다.
  • 해당 스트림에는 java.io.Serializable 인터페이스를 지원하는 개체만 기록할 수 있다.
  • writeObject 메서드는 해당 readObject 메서드가 복원할 수 있도록 특정 클래스에 대한 개체의 상태를 작성한다.