Zettelkasten

serialize, deserialize(직렬화, 역직렬화)

·수정 2026.04.23·수정 3

데이터 직렬화, 역직렬화

  • 메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환하는 것을 말한다. 직렬화가 된 데이터는 텍스트 또는 바이너리등의 형태가 됨
  • 역직렬화는 반대로 디스크에 저장한 데이터를 읽거나 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 다시 변환하는 것

직렬화가 필요한 이유

  • 데이터의 메모리 구조는 2개로 나뉨
    1. 값 형식 데이터(Value Type)
      • 스택에 데이터가 쌓이고 직접 접근이 가능함
    2. 참조 형식 데이터(Reference Type)
      • C#에서 Object 타입 혹은 C++에서 포인터 변수들이 여기에 해당됨. 해당 형식의 변수를 선언하면 힙에 메모리가 할당되고 스택에서는 힙 메모리를 참조하는 구조로 되어 있음
  • 디스크에 저장하거나 통신에는 값 형식 데이터만 사용가능함
  • 참조형식 데이터는 실제 데이터 값이 아닌 힙에 할당되어 있는 메모리 번지 주소를 가지고 있기 때문에 저장, 통신에 사용할 수 없음
    • 각 PC 마다 사용하고 있는 메모리 공간 주소는 전혀 다르기때문에 특정 값을 참조 하고 있는 메모리 주소를 보내도 의미가 없음
  • String이 포인터로 되어 있는 경우, int나 double과 다르게 메모리가 연속적으로 되어 있지 않음
    • 이 메모리 데이터들을 연속적으로 배치, 값 타입 변조 해야함
    • int는 4byte씩, double은 8byte씩 메모리가 연속적으로 배치되어 있음