데이터들의 메모리 구조는 크게 2가지이다.
1. 값 형식의 데이터(Value): int, char, double 등 선언할 때 사용하는 데이터들이며 스택에 메모리가 쌓이고 직접 접근이 가능하다.
2. 참조 형식의 데이터(Reference): 포인터와 같이 주소값을 참조하는 변수를 말한다. 참조형식의 데이터를 선언하면 힙에 메모리가 할당되고 스택에서는 메모리를 참조(힙에서 스택주소값을 갖고 있다.)하는 구조로 되어있다.
디스크에 저장하거나 통신에 사용하는 경우에는 값 형식의 데이터만 가능한데, 참조형식은 실제 값이 아닌 주소값을 가지고 있기에 디스크나 통신에 사용할 수 없는 것이다.
참조형을 사용하게 된다면 통신은 pc마다 메모리 주소가 달라서 적용할 수가 없는 것이다. 직렬화를 하게 되면 주소 값이 가지는 데이터들을 값 형식으로 변환해준다. 그렇기 때문에 데이터를 저장하거나 통신하기 전에는 데이터직렬화 작업이 필수적이다.
직렬화를 쓰는 이유는 사용하고 있는 데이터들을 파일 저장 혹은 데이터 통신에서 파싱 할 수 있는 유의미한 데이터를 만들기 위함이다.