C샵 직렬화 기초

객체 상태를 저장하거나 전송하기 위해 데이터 형식으로 변환하는 직렬화(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 등)을 선택해야 하는 것 같다.

Author avatar

웨이호프

WordPress creator and blogger.

View all posts