엄범



어떤 언어를 사용하든 변수에 담기는 데이터는 크게 Value와 Address 두 가지로 구분할 수 있다.

포인터, 객체 변수 등등은 변수 자체에 담기는 데이터가 Address다.

문제는 객체를 저장/전송하려고 할 때 발생하는데, 객체 변수에 들어있는 Address를 저장/전송한다면 받는 측에서 그 Address를 참조해봐도 아무런 데이터가 없기 때문에 전혀 의미가 없다.


그래서 레퍼런스를 따라가서 실제로 의미있는 데이터인 Value를 저장하는 작업이 직렬화, Serialization이다.

직렬화 결과 데이터 형식은 선택에 따라 Binary일 수도, JSON, CSV일 수도 있다.


그래서 그냥 포인터로 따라가서 직접 저장하는 방식으로도 구현할 수 있겠지만 객체 내부에서 또 다른 객체 변수가 있다던지, 클래스 내부에 내부 클래스가 존재한다던지 하게되면 이런 정보를 함께 저장하기가 꽤나 귀찮기 때문에, 각 언어마다 제공해주는 API를 사용하는 것이 좋다.