직렬화란

자바 시스템 내부에서 사용되는 Object(Data)를 전송/저장 등이 가능하도록 byte 형태로 변환하는 기술을 의미한다.

byte를 다시 Object(Data) 변환하는 기술을 역직렬화라고 한다.

왜 사용하는가?

직렬화/역직렬화를 왜 사용하는지를 이해하려면 자바의 메모리 구조에 대한 기본적인 내용을 먼저 알아야 한다.

자바는 JVM이 메모리를 관리해주며 타입은 크게 2가지로 나뉜다.
1. 값 형식 데이터(스택)
2. 참조 형식 데이터(힙)

이 때 중요한 것은 디스크에 데이터를 저장하거나 통신시에는 값 형식 데이터만 사용 가능하다는 것이다. 참조 형식 데이터는 주소값을 가지게 되는데 메모리 주소값은 전송이나 저장에서는 무의미한 값이 된다.

어떻게 사용하는가?

java.io.Serializable 인터페이스를 구현하면 해당 객체는 직렬화할 수 있는 조건이된다.

public interface Serializable {
}

직렬화를 구현할 때, serialVersionUID라는 값을 지정해줘야 한다. (만약 별도로 지정하지 않으면 자바 소스가 컴파일될 때 자동으로 생긴다.)

public class TestSerializable implements Serializable {

    private static final long serialVersionUID = 362498820763181265L;
}

serialVersionUID는 객체의 식별자로 버전을 명시한다.

profile
Java 백엔드 개발자입니다. 제가 생각하는 개발자로서 가져야하는 업무적인 기본 소양과 현업에서 가지는 고민들을 같이 공유하고 소통하려고 합니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN