게임에서 데이터를 저장하고 관리하기 위해서는 직렬화와 역직렬화에 대한 이해가 필요하다.
Serial?
USB (Universial Serial Bus) 에서 Serial 의 의미를 생각해보자.
- 직선상으로 연속적으로 들어오는 데이터를 받아들일 수 있는 인터페이스.
Serial(직렬) : 연쇄, 연속해서 이어지는 어떤 것.
Serialization(직렬화)
오브젝트를 String(문장형데이터) 이나 byte 데이터 형태로 바꾸는 것
[Object -> String or Byte]
왜 이 작업이 필요한가?
Object는 메모리에 존재하고 추상적인데 비해서, string 이나 bytes 데이터는 드라이브에 저장하거나 통신선을 통해 전송할 수 있기 때문
데이터를 주고받기 위해서는 추상적인 오브젝트를 구체적으로 만들어 저장가능하고, 전송가능하도록 텍스트 파일로 만들 필요가 있다.
Deserialization(역직렬화)
반대로 string 이나 bytes로 저장되어있거나, 전송된 데이터를 가지고 오브젝트를 생성하는 행위
[Object <- String or Byte]
왜 이렇게 써야할까?
게임오브젝트는 게임엔진을 통해 메모리에 일시적으로 할당되어 생성되는 것으로, 프로그램을 종료하면 자연스럽게 파괴된다.
하지만 엔진을 다시 켜면 오브젝트가 다시 생성되는데, 그 이유는 해당 오브젝트에 시리얼라이즈화 가능하다는 표시가 되어있기 때문.
오브젝트를 만들면 해당 오브젝트의 내용을 텍스트 파일로 시리얼라이즈화 하여 저장한 후, 엔진을 켜면 해당 텍스트파일로부터 데이터를 받아서 오브젝트를 생성하는 원리.
스타트렉에서 사람을 데이터로 분해하여 순간이동 시키는 것과 비슷한 원리로 보면 된다.
서버에 적용해보면
서버와 웹브라우저는 일반적으로 JSON 이라는 형식으로 오브젝트를 전송
서버는 웹브라우저에서 JSON 파일을 받고, 이를 역직렬화해서 오브젝트를 구현하게 된다.
오브젝트를 직렬화하는데 쓰는 포멧들
Bytes, XML, JSON, YAML 등