직렬화 & 역직렬화 (Serialization & Deserialization)

최정훈·2024년 9월 21일

  • 직렬화 (Serialization)

    직렬화는 클래스나 오브젝트 등을 연속된 문장형 데이터나, 바이트 데이터로 변환하는 과정을 말한다.(전송 가능한 형태로 변환하는 작업.)

    오브젝트는 메모리에 존재하고 추상적인데 비해서, 스트링과 비이트 데이터는 드라이브에 저장할 수도 있고, 네트워크 통신으로 전송도 가능하기 때문이다.

    이를 사용하기 위해서 클래스 선언부에 [Serializable]키워드를 추가하고, private변수의 경우[SerializeField]키워드를 사용하면 직렬화가 가능하다.

  • 역직렬화(Deserialization)

    연속된 문장형 데이터나 연속된 바이트 데이터를 오브젝트 데이터로 바꾸는 과정이다. 포맷은 다음과 같은 형식들이 대표적으로 사용된다.

    • Json
    • XML
    • CSV
    • Byte
  • 게임 오브젝트는 게임엔진을 통해서 메모리에 일시적으로 할당되어 생성되는 것으로, 프로그램을 종료하면 자연스럽게 파괴된다. 하지만, 다시 실행시키면 오브젝트가 다시 생성되는데, 그 이유는 해당 오브젝트의 내용을 텍스트 파일로 직렬화하여 저장한 후, 엔진을 키면 해당 텍스트 파일로부터 역직렬화를 통해 데이터를 받아서 오브젝트를 생성하는 원리이다.

  • public 변수와의 차이점

    private로 선언한 후, [SerializeField]키워드를 사용한다면, public으로 선언된 변수와 마찬가지로 인스펙터 상에서 고칠수는 있지만, 사실상 private변수이기 때문에, 다른 스크립트에서 접근할 수 없다.

    추가적으로 이와 비슷하게 public으로 선언된 변수라도, 인스펙터에서 수정할 수 없게 하고 싶다면, [HideInInspector]라는 키워드를 사용한다.

profile
게임개발자(희망)의 공부일지

0개의 댓글