[c#] C#에서의 직렬화 데이터 유형 선택 가이드

C#에서 데이터를 파일에 저장하거나 네트워크를 통해 전송하려는 경우, 데이터를 직렬화하여 전송 및 저장할 수 있습니다. 직렬화는 데이터를 바이트 스트림 형식으로 변환하는 프로세스로, 이를 통해 데이터를 보다 효율적으로 저장하거나 전송할 수 있습니다. C#에서는 다양한 방법으로 데이터를 직렬화할 수 있으며, 이를 선택하는 것은 프로젝트의 요구에 따라 결정됩니다. 이번 가이드에서는 C#에서의 주요 직렬화 유형과 각 유형의 특징에 대해 알아보겠습니다.

1. 이진 직렬화(Binary Serialization)

이진 직렬화는 객체를 이진 형식으로 변환하여 직렬화하는 기술입니다. .NET에서 기본 제공되며, System.Runtime.Serialization 네임스페이스의 BinaryFormatter 클래스를 사용하여 구현할 수 있습니다. 이를 통해 객체의 상태를 보다 간단하게 저장하고 복원할 수 있습니다.

예시 코드:

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

public class Program
{
    public static void Main()
    {
        // 객체 직렬화
        var obj = new MyClass();
        var formatter = new BinaryFormatter();
        using (var stream = new FileStream("data.bin", FileMode.Create, FileAccess.Write))
        {
            formatter.Serialize(stream, obj);
        }

        // 객체 역직렬화
        using (var stream = new FileStream("data.bin", FileMode.Open, FileAccess.Read))
        {
            var newObj = (MyClass)formatter.Deserialize(stream);
        }
    }
}

[Serializable]
public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

2. XML 직렬화(XML Serialization)

XML 직렬화는 객체의 데이터를 XML 형식으로 직렬화하는 기술입니다. 이를 통해 데이터를 사람이 읽을 수 있는 형식으로 저장하거나 전송할 수 있으며, 다른 플랫폼 간에 데이터를 교환하는 데에도 유용합니다.

예시 코드:

using System;
using System.IO;
using System.Xml.Serialization;

public class Program
{
    public static void Main()
    {
        // 객체 직렬화
        var obj = new MyClass { Id = 1, Name = "John Doe" };
        var serializer = new XmlSerializer(typeof(MyClass));
        using (var stream = new FileStream("data.xml", FileMode.Create, FileAccess.Write))
        {
            serializer.Serialize(stream, obj);
        }

        // 객체 역직렬화
        using (var stream = new FileStream("data.xml", FileMode.Open, FileAccess.Read))
        {
            var newObj = (MyClass)serializer.Deserialize(stream);
        }
    }
}

[Serializable]
public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

3. JSON 직렬화(JSON Serialization)

JSON 직렬화는 데이터를 JSON 형식으로 직렬화하는 기술로, 객체를 텍스트 형식으로 표현하여 저장하거나 전송할 수 있습니다. System.Text.Json이나 Newtonsoft.Json 등의 라이브러리를 사용하여 JSON 직렬화를 수행할 수 있습니다.

예시 코드:

using System;
using System.IO;
using System.Text.Json;

public class Program
{
    public static void Main()
    {
        // 객체 직렬화
        var obj = new MyClass { Id = 1, Name = "John Doe" };
        var options = new JsonSerializerOptions { WriteIndented = true };
        var json = JsonSerializer.Serialize(obj, options);
        File.WriteAllText("data.json", json);

        // 객체 역직렬화
        json = File.ReadAllText("data.json");
        var newObj = JsonSerializer.Deserialize<MyClass>(json);
    }
}

public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

요약

직렬화는 C#에서 데이터를 효율적으로 저장하거나 전송하기 위한 중요한 기술입니다. 이진 직렬화, XML 직렬화, 그리고 JSON 직렬화는 각각 다양한 용도와 특징을 가지고 있으며, 프로젝트의 요구에 따라 적절한 직렬화 유형을 선택하여 사용해야 합니다.

위의 예시 코드를 참고하여, 각 직렬화 유형을 사용하여 데이터를 직렬화하고 역직렬화하는 방법에 대해 배웠습니다. 선택된 직렬화 유형에 맞게 적절한 기술을 사용하여 데이터를 효과적으로 관리하고 전송하는 데에 도움이 되기를 바랍니다.

참고 자료

  1. Microsoft Docs, “Serialization (C#)” - https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

  2. GeeksforGeeks, “Serialization in C#” - https://www.geeksforgeeks.org/serialization-in-c-sharp/