[c#] C# 직렬화와 스트림 처리

C#에서 객체를 파일에 저장하거나 네트워크를 통해 전송하기 위해 직렬화와 스트림 처리가 중요합니다. 직렬화는 객체를 데이터 스트림으로 변환하는 과정을 말하며, 스트림 처리는 데이터를 송수신하거나 파일에 쓰거나 읽는 작업을 다룹니다. C#에서 제공하는 직렬화 및 스트림 처리 기능을 효과적으로 사용하는 방법을 알아보겠습니다.

직렬화 (Serialization)

C#에서 직렬화는 System.Runtime.Serialization 네임스페이스를 사용하여 수행됩니다. 가장 일반적인 방법은 BinaryFormatter 클래스를 사용하여 이진 직렬화를 수행하는 것입니다.

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

[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class SerializationExample
{
    public void SerializeObject(string filename, object obj)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        using (FileStream stream = new FileStream(filename, FileMode.Create))
        {
            formatter.Serialize(stream, obj);
        }
    }

    public object DeserializeObject(string filename)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        using (FileStream stream = new FileStream(filename, FileMode.Open))
        {
            return formatter.Deserialize(stream);
        }
    }
}

위 예제에서 Person 클래스는 [Serializable] 특성을 사용하여 직렬화 가능한 클래스임을 표시합니다. BinaryFormatter를 사용하여 객체를 파일에 저장하고 이를 다시 역직렬화할 수 있습니다.

스트림 처리 (Stream Processing)

스트림 처리는 파일 또는 네트워크 스트림에서 데이터를 읽고 쓰는 작업을 다루는 것을 의미합니다. C#에서는 System.IO 네임스페이스를 사용하여 파일 및 관련 스트림을 처리합니다.

using System;
using System.IO;

public class StreamExample
{
    public void WriteToFile(string filename, string data)
    {
        using (StreamWriter writer = new StreamWriter(filename))
        {
            writer.Write(data);
        }
    }

    public string ReadFromFile(string filename)
    {
        using (StreamReader reader = new StreamReader(filename))
        {
            return reader.ReadToEnd();
        }
    }
}

위 예제에서는 StreamWriter를 사용하여 파일에 데이터를 쓰고, StreamReader를 사용하여 파일에서 데이터를 읽습니다.

요약

C#에서는 BinaryFormatter를 사용하여 객체를 직렬화하고 역직렬화하는 방법을 제공하며, StreamWriterStreamReader를 사용하여 파일에 데이터를 쓰고 읽는 방법을 제공합니다. 이러한 기능들을 잘 활용하여 데이터를 효과적으로 처리할 수 있습니다.

위의 예제는 C# 7.0 이상에서 실행됩니다.

참고 문헌: