요약 정리

https://inpa.tistory.com/entry/JAVA-☕-직렬화Serializable-완벽-마스터하기

개념의 본질 파악하기: 직렬화, 왜 필요한가?


'레고 자동차'를 친구에게 택배로 보내려면?

1. 분해하고 설명서 만들기 (직렬화, Serialization)

레고 자동차를 조심스럽게 블록 단위로 분해합니다. 어떤 블록(데이터)을 어떤 순서(구조)로 조립해야 원래 자동차가 되는지, **'조립 설명서'**를 작성합니다.

이제 분해된 블록들과 설명서를 상자에 담아 택배로 보냅니다. 이 '분해된 블록 + 설명서' 묶음이 바로 **전송 가능한 데이터 형태(예: Byte Stream, JSON)**입니다. 이 과정이 바로 직렬화입니다.

2. 설명서를 보고 재조립하기 (역직렬화, Deserialization)

친구가 택배를 받습니다. 상자 안에는 블록들과 설명서가 들어있겠죠. 친구는 설명서를 보고, 순서대로 블록을 다시 조립하여 완벽하게 똑같은 레고 자동차를 자신의 책상 위(친구 컴퓨터의 메모리)에 만들어냅니다.

흩어진 데이터로부터 원래의 객체를 되살려내는 이 과정이 바로 역직렬화입니다.

기술 원리와 용어 연결

레고 자동차 (메모리 위의 객체)

Java 코드에서 new 키워드로 생성된, 메모리 위에서 살아 숨 쉬는 **객체 인스턴스(Object Instance)**입니다. 이 객체는 자기만의 상태(state), 즉 멤버 변수(field)에 담긴 데이터들을 가지고 있습니다.

택배로 보낼 수 없는 상태

객체는 특정 프로그래밍 언어(Java)와 운영체제(OS)의 메모리 구조에 종속적입니다. 그래서 메모리 주소값 등을 포함한 '날것'의 상태 그대로는 파일에 저장하거나 네트워크 너머의 다른 컴퓨터로 전송할 수 없습니다.

분해된 블록 + 설명서 (전송 가능한 데이터)

직렬화를 거친 결과물입니다. 대표적으로 두 가지 형태가 있습니다: