Serialization[직렬화] & Deserialization[역직렬화]
직렬화[Serialization]란
- Serial의 뜻은 연속적인, 연쇄적인 어떤 것이다.
- 유니티에서 Serialization는 “오브젝트를 연속된 문장형 데이터나 연속된 Byte 데이터로 바꾸는것을 말한다.
직렬화가 필요한 이유?
-
오브젝트는 메모리에 존재하며 추상적인것에 비해 String 및 Byte 데이터는 드라이브에 저장할수도있고, 통신선을 통해 전송할수도 있다.
-
우리가 게임 엔진을 종료하면 그 프로그램이 사용중이던 메모리의 모든 오브젝트들은 같이 파괴된다.
-
그러므로 우리는 이것을 저장하고 불러올 필요가 있는데, 이때 사용하는것이 직렬화와 역직렬화다.
-
역으로 이미 존재하는 String 및 Byte 데이터로부터 오브젝트를 생성하는 행위를 역직렬화[Deserialization]라고 한다.
-
우리가 에디터에서 편집한다고 생각했던 오브젝트는 직렬화 가능하다는 표시가 붙어있고, 사실 텍스트 파일의 형태로 컴퓨터 어딘가에 저장되어있다.
-
게임 엔진을 다시 실행했을 때, 이 파일들을 역직렬화를 통해서 오브젝트를 다시 생성하는것이다.
- 오브젝트는 다양한 텍스트 파일로 변환 가능하며, 유니티에서는 게임 오브젝트의 데이터를 저장하는데 많이 사용된다.
직렬화 사용방법
- 직렬화는 앞서 뱀서라이크 게임을 만들 때 사용한 적이 있다.
// ... 소환 데이터 담당 클래스
[System.Serializable] // ... 직렬화
public class SpawnData
{
public int spriteType;
public int health;
public float spawnTime;
public float speed;
}
-
몬스터를 소환하는 클래스인 Spawner에서 스폰 데이터를 관리하기 위하여 SpawnData라는 클래스에 직렬화 옵션을 달아 만든 클래스다.
-
이렇게 작성한 직렬화 클래스는 인스펙터창에서 바로 편집이 가능하며, 필요한 경우 배열의 형태로 선언하여 사용할수도 있다.
public class Spawner : MonoBehaviour
{
// ... 스폰데이터를 담을 변수
public SpawnData[] spawnData;
}
- 실제로 직렬화된 데이터를 파일로 저장하는 방법은 다음 글에서 정리해보겠다.
댓글남기기