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
를 사용하여 객체를 직렬화하고 역직렬화하는 방법을 제공하며, StreamWriter
및 StreamReader
를 사용하여 파일에 데이터를 쓰고 읽는 방법을 제공합니다. 이러한 기능들을 잘 활용하여 데이터를 효과적으로 처리할 수 있습니다.
위의 예제는 C# 7.0 이상에서 실행됩니다.
참고 문헌:
- Microsoft 문서: BinaryFormatter Class
- Microsoft 문서: StreamWriter Class
- Microsoft 문서: StreamReader Class