https://www.youtube.com/watch?v=kEu_AQ_Es-8
직렬화는 객체를 저장하거나 메모리, DB 혹은 파일로 전송하기 위해 객체를 바이트 스트림으로 변환하는 프로세스다. 즉, 객체를 해제하고(Serialization) 다시 복구(Deserialization)할 수 있도록 개체의 상태를 저장한다.
즉, 메모리 상에 산발적으로 분포되어 있는 데이터들을, 연속적인 메모리 형태로 바꾼다.
이렇게 연속적인 데이터 형태로 바꿀 때, 컴퓨터가 읽을 수 있는 2진수로 표현하기도 하지만, XML/YAML/JSON과 같이 사람이 읽을 수 있는 형태로 제공하는게 일반적이다.
예를들어, 다음과 같이 게임 제작을 위해 캐릭터 설정을 하고, 이를 각각의 XML/YAML/JSON으로 표현하면 다음과 같이 표현한다면, 이렇게 표현할 수 있다.
// XML
<Character>
<Name>엘리안</Name>
<Class>마법사</Class>
<Level>45</Level>
<Stats>
<Strength>10</Strength>
<Agility>20</Agility>
<Intelligence>150</Intelligence>
<Health>100</Health>
</Stats>
<Equipment>
<Weapon>불꽃 지팡이</Weapon>
<Armor>마법사의 로브</Armor>
<Accessory>마력의 반지</Accessory>
</Equipment>
</Character>
// YAML
Character:
Name: 엘리안
Class: 마법사
Level: 45
Stats:
Strength: 10
Agility: 20
Intelligence: 150
Health: 100
Equipment:
Weapon: 불꽃 지팡이
Armor: 마법사의 로브
Accessory: 마력의 반지
// JSON
{
"Character": {
"Name": "엘리안",
"Class": "마법사",
"Level": 45,
"Stats": {
"Strength": 10,
"Agility": 20,
"Intelligence": 150,
"Health": 100
},
"Equipment": {
"Weapon": "불꽃 지팡이",
"Armor": "마법사의 로브",
"Accessory": "마력의 반지"
}
}
}
유니티에서 내부적으로 많이 사용되는 직렬화는 YAML이다. 태그관리나 내부적으로 많이 사용된다.
유니티에서의 직렬화는, 데이터 구조나 오브젝트의 상태를 Unity 에디터가 이를 저장하고 나중에 재구성할 수 있는 포맷으로 자동으로 변환하는 프로세스를 말한다.
유니티에서 신을 저장하면, Scenename.unity 파일과 Scenename.meta 파일이 생성된다.
이 파일들은 YAML 형식으로 열 수 있고, 각 파일들 안에는 다양한 정보가 있다.
대표적으로 SceneName.unity의 경우, 해당 신의 Setting부터 시작해서 내부의 게임 오브젝트, 컴포넌트들에 관한 정보도 모두 들어있다.
오른쪽 meta 파일의 GUID는 에셋의 고유 아이디이며, unity 파일의 fileID는 해당 파일 내부에서 사용되는 식별자이다. 그리고 이 정보를 통해 추적이 가능하다.
만일 이 정보들을 수정하면, 유니티에서는 Reload하라고 한다.
GUID가 사용되는 또 다른 곳은 바로 Script를 사용하였을 경우다. 컴포넌트를 하나 생성하고, 이를 오브젝트에 넣은 뒤, 신을 저장해보면 다음과 같이 해당 게임 오브젝트와 컴포넌트가 파일에 추가된 것을 볼 수 있다.
여기에서 GUID가 다시 사용되는 것을 볼 수 있다. 이는 스크립트는 외부 참조를 하기 때문에 이렇게 작성된 것이다.
단순 스크립트 뿐만 아니라, 에셋의 추적과 같은 상황에서도 GUID는 사용된다. 이처럼 에셋의 이름이 아닌 GUID를 사용하는 이유는, 만일 이름이나 폴더명으로 사용할 경우 추적이 꼬이기 때문이다.
다음은 알아두면 좋은 정보다.
프리팹은 게임 오브젝트를 별도의 파일로 Serialization 한 것이다.
스크립터블 오브젝트도 Serialization된 데이터다.
그래도 유니티 내장 JSON Utility가 가장 빠르고 좋다. 데이터 직렬화만 한다면 이걸 쓰자.
'Study > Unity Engine' 카테고리의 다른 글
[Unity] 유니티 이해하기 04 - 유니티 Object와 그 하위 클래스들 (0) | 2025.01.24 |
---|---|
[Unity] 유니티 이해하기 03 - Input System (0) | 2025.01.24 |
[Unity] 유니티 이해하기 02 - 이벤트 함수의 실행순서 그리고 스크립트 (0) | 2025.01.24 |
[Unity] 유니티 이해하기 01 - 게임오브젝트와 컴포넌트 (0) | 2025.01.24 |
[Unity] 유니티 프레임 워크, .NET과 GC (0) | 2025.01.24 |