객체 상태를 저장하거나 전송하기 위해 데이터 형식으로 변환하는 직렬화(Serialization)와 이를 다시 객체로 복원하는 역직렬화(Deserialization) 과정을 분석한다.
JSON 직렬화 (System.Text.Json)
현대적인 데이터 교환 표준인 JSON 형식을 활용한 예제다.
using System;
using System.Text.Json;
public class Player
{
public string Nickname { get; set; }
public int Level { get; set; }
public int Gold { get; set; }
}
public class SerializationEx
{
public static void Main()
{
Player player = new Player { Nickname = "Hero", Level = 15, Gold = 1000 };
// 1. 직렬화: 객체를 JSON 문자열로 변환
string jsonString = JsonSerializer.Serialize(player);
Console.WriteLine($"Serialized: {jsonString}");
// 2. 역직렬화: JSON 문자열을 객체로 복원
Player restoredPlayer = JsonSerializer.Deserialize<Player>(jsonString);
Console.WriteLine($"Restored: {restoredPlayer.Nickname} (Lv.{restoredPlayer.Level})");
}
}
바이너리 직렬화와 보안
과거에는 BinaryFormatter를 자주 사용했으나, 보안 취약점 문제로 현재는 사용을 지양하고 JSON이나 Protobuf 같은 형식을 권장한다.
직렬화의 주요 용도
- 데이터 저장: 게임의 세이브 데이터나 설정 정보를 파일로 저장할 때 사용한다.
- 네트워크 통신: 클라이언트와 서버 간에 객체 정보를 주고받을 때 필수적이다.
- 상태 보존: 프로그램 종료 후에도 객체의 상태를 유지하고 싶을 때 활용한다.
P.S
직렬화는 메모리 내의 일시적인 객체에 영속성과 이동성을 부여하는 핵심 기술이다.
데이터의 크기와 처리 속도, 가독성을 고려하여 적절한 포맷(JSON, XML, Binary 등)을 선택해야 하는 것 같다.