데이터 직렬화, 역직렬화
- 메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환하는 것을 말한다. 직렬화가 된 데이터는 텍스트 또는 바이너리등의 형태가 됨
- 역직렬화는 반대로 디스크에 저장한 데이터를 읽거나 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 다시 변환하는 것
직렬화가 필요한 이유
- 데이터의 메모리 구조는 2개로 나뉨
- 값 형식 데이터(Value Type)
- 스택에 데이터가 쌓이고 직접 접근이 가능함
- 참조 형식 데이터(Reference Type)
- C#에서 Object 타입 혹은 C++에서 포인터 변수들이 여기에 해당됨. 해당 형식의 변수를 선언하면 힙에 메모리가 할당되고 스택에서는 힙 메모리를 참조하는 구조로 되어 있음
- 값 형식 데이터(Value Type)
- 디스크에 저장하거나 통신에는 값 형식 데이터만 사용가능함
- 참조형식 데이터는 실제 데이터 값이 아닌 힙에 할당되어 있는 메모리 번지 주소를 가지고 있기 때문에 저장, 통신에 사용할 수 없음
- 각 PC 마다 사용하고 있는 메모리 공간 주소는 전혀 다르기때문에 특정 값을 참조 하고 있는 메모리 주소를 보내도 의미가 없음
- String이 포인터로 되어 있는 경우, int나 double과 다르게 메모리가 연속적으로 되어 있지 않음
- 이 메모리 데이터들을 연속적으로 배치, 값 타입 변조 해야함
- int는 4byte씩, double은 8byte씩 메모리가 연속적으로 배치되어 있음