[c#] 직렬화와 파일 입출력

파일 입출력(File I/O)은 어떠한 데이터를 파일에 쓰거나 읽어들이는 것을 말합니다. C#에서는 이러한 파일 입출력 기능을 통해 데이터를 파일에 저장하거나 파일에서 데이터를 읽어들일 수 있습니다.

직렬화(Serialization)는 객체의 상태를 저장하거나 전송하기 위해 데이터 형식으로 변환하는 과정을 말합니다. C#에서는 BinaryFormatter 클래스를 이용하여 객체를 바이너리 형식으로 직렬화할 수 있습니다. 이진 형식으로 직렬화하면 객체의 상태가 바이트 스트림으로 변환되어 파일에 쓸 수 있게 됩니다.

파일에 객체를 직렬화하기

아래는 파일에 객체를 직렬화하고 저장하는 예제 코드입니다.

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

[Serializable]
public class MyObject
{
    public int Number { get; set; }
    public string Name { get; set; }
}

public class Program
{
    public static void Main()
    {
        MyObject obj = new MyObject
        {
            Number = 123,
            Name = "example"
        };

        IFormatter formatter = new BinaryFormatter();
        Stream stream = new FileStream("data.bin", FileMode.Create, FileAccess.Write, FileShare.None);
        formatter.Serialize(stream, obj);
        stream.Close();
    }
}

위의 예제는 MyObject 클래스를 BinaryFormatter를 사용하여 직렬화한 후 “data.bin” 파일에 저장하는 것을 보여줍니다.

파일에서 객체로 역직렬화하기

이제 “data.bin” 파일에서 데이터를 읽어 객체로 역직렬화하는 예제 코드를 살펴보겠습니다.

public class Program
{
    public static void Main()
    {
        IFormatter formatter = new BinaryFormatter();
        Stream stream = new FileStream("data.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
        MyObject obj = (MyObject)formatter.Deserialize(stream);
        stream.Close();

        Console.WriteLine($"Number: {obj.Number}, Name: {obj.Name}");
    }
}

위의 예제는 “data.bin” 파일에 저장된 데이터를 BinaryFormatter를 사용하여 역직렬화한 후 객체로 변환하고, 해당 객체의 내용을 콘솔에 출력하는 것을 보여줍니다.

파일 입출력과 직렬화는 C#에서 데이터를 지속적으로 저장하고 읽어들이는 데 유용한 기능입니다. 이러한 기능을 효율적으로 활용하면 프로그램의 상태를 유지하거나 데이터를 영구적으로 보관할 수 있습니다.

위의 예제 코드를 통해 파일 입출력과 직렬화를 사용하여 객체를 파일에 저장하고 다시 읽어들일 수 있는 방법에 대해 설명했습니다.

다양한 파일 입출력 및 직렬화 기능에 대한 더 자세한 정보는 Microsoft 공식 문서를 참고하시기 바랍니다.