반응형
직렬화는 언제 사용할까?
유니티에서 Binary formatter를 사용하여 데이터를 로컬에 저장하거나 불러올 때 항상 직렬화를 거친다. 또한 멀티 게임 제작을 할 때에도 직렬화라는 용어를 보게 되는데 의미를 잘 알지 못해서 정리를 해보았다.
왜 직렬화를 사용하는가?
데이터를 저장하거나 통신을 할 때에는 스택 메모리를 사용한다. 힙 메모리의 참조 값들은 컴퓨터마다 주소 값이 다를 뿐만 아니라 사라지기 때문이다. 따라서 힙과 스택 중 힙에 해당하는 메모리 영역을 스택으로 변환시켜 주는 과정이 필요하다. 직렬화 과정은 이러한 데이터 파싱 역시 포함한다. 직렬화를 사용하여 데이터를 원하는 방향으로 가공하는 것이다.
다시 말해 직렬화는 데이터를 원하는 데이터 바이트 스트림 형태로 변환한다.
- 데이터 스트림이란? 전송된 정보를 수집하거나 정보를 전송할 때 사용되는 디지털 방식으로 암호화 된 일관된 신호의 흐름이다.
직렬화와 역직렬화는 어떠한 과정으로 진행되는가?
다음은 Binary Formatter를 사용하여 데이터를 저장(직렬화) 하는 과정이다.
public static void Save(Data _data, string filePath)
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(filePath, FileMode.Create);
formatter.Serialize(stream, _data);
stream.Close();
}
- BinaryFormatter 클래스를 생성해준다.
- 해당 파일의 경로에 Create모드로 stream을 열어준다.
- BinaryFormatter로 해당 경로에 데이터를 직렬화한다.
- 데이터를 모두 변환한 후 stream을 닫는다.
아래는 데이터를 불러오기(역직렬화) 하는 과정이다.
public static Data Load(string filePath)
{
if (File.Exists(filePath))
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(filePath, FileMode.Open);
Data data = formatter.Deserialize(stream) as Data;
stream.Close();
return data;
}
Debug.LogError("Save file not found in" + filePath);
return null;
}
- 마찬가지로 BinaryFormatter 클래스의 인스턴스를 생성한다.
- 파일 경로의 stream을 열어준다.
- Deserialize로 데이터를 역직렬 화한다.
- 해당 데이터를 처음에 불러왔던 데이터에 넣어준다.
- stream을 닫아준다.
반응형
'C# 프로그래밍 > 문법 개념' 카테고리의 다른 글
[C#] 인터페이스 (Interface) (0) | 2022.05.05 |
---|---|
[C#] 액션과 펑션 (Action & Func) (0) | 2022.05.05 |
[C#] 델리게이트 (Delegate) (0) | 2022.05.04 |
[C#] 구조체와 클래스 (Struct & Class) (0) | 2022.05.03 |
[C#] 상수 선언과 읽기 전용 키워드 (Const & Read only) (0) | 2021.08.19 |