September 02, 2021
Java 내부 시스템에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 Byte 형태로 변환하는 기술 + 바이트로 변환된 데이터를 다시 객체로 변환하는 기술(역직렬화)
JVM의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태
Primitive 타입과 java.io.Serializable
인터페이스를 상속받은 객체는 직렬화 할 수 있는 기본 조건을 가진다.
java.io.ObjectOutputStream
객체 이용
직렬화 대상이 된 객체의 클래스가 클래스 패스에 존재해야 하며 import 되어 있어야 한다.
serialVersionUID
를 가지고 있어야 한다.문자열 형태의 직렬화 방법
이진 직렬화 방법
자바 직렬화 형태의 데이터 교환은 자바 시스템 간의 데이터 교환을 위해서 존재한다.
자바에서도 CSV, JSON을 사용하면 되지 자바 직렬화를 써야 되는 이유? => 목적에 따라 적절하게 써야 한다.
자바 직렬화의 장점 : 자바 시스템에서 개발에 최적화되어 있다.
JVM의 메모리에서만 상주되어있는 객체 데이터를 그대로 영속화(Persistence)가 필요할 때 사용된다. 시스템이 종료되더라도 없어지지 않는 장점을 가지며 영속화된 데이터이기 때문에 네트워크로 전송도 가능하다. 필요할 때 직렬화된 객체 데이터를 가져와서 역직렬화하여 객체를 바로 사용할 수 있다.
서블릿 세션 (Servlet Session)
캐시 (Cache)
자바 RMI (Remote Method Invocation)
객체의 해시코드로 직렬화될 때 객체에 표시되는 식별자 역할 - 객체의 버전 관리에 사용된다.
직렬화/역직렬화를 할 때 이 값으로 해당 클래스의 특정 버전에 맞는지 아닌지를 판단한다.
객체의 해시코드로 직렬화될 때 객체에 표시되는 식별자 역할
serialVersionUID
)가 필수 값은 아니다.직접 serialVersionUID
값을 관리해주어야 클래스 변경 시 혼란을 줄일 수 있다.
하지만 serialVersionUID
값이 동일할 때에도 신경 써야 할 부분이 생긴다.
자바 직렬화는 타입에 상당히 엄격하다