[c#] C#에서의 객체 그래프 직렬화

C#에서는 객체 그래프를 직렬화하여 데이터를 파일에 저장하거나 네트워크를 통해 전송할 수 있습니다. 객체 그래프란 서로 연결된 객체의 집합을 말하며, 이를 직렬화하고 역직렬화하여 원래 상태로 복원할 수 있습니다.

객체 그래프 직렬화란?

객체 그래프 직렬화(Object graph serialization)는 하나 이상의 객체와 그 객체들 간의 연결을 직렬화하는 과정을 말합니다. C#에서는 BinaryFormatterDataContractSerializer와 같은 클래스를 사용하여 객체 그래프를 직렬화할 수 있습니다.

BinaryFormatter를 사용한 객체 그래프 직렬화 예제

다음은 BinaryFormatter를 사용하여 C#에서 객체 그래프를 직렬화하는 간단한 예제입니다.

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

[Serializable]
class Person
{
    public string Name;
    public Person Friend;
}

class Program
{
    static void Main()
    {
        Person person1 = new Person { Name = "Alice" };
        Person person2 = new Person { Name = "Bob" };

        person1.Friend = person2;
        person2.Friend = person1;

        BinaryFormatter formatter = new BinaryFormatter();
        using (FileStream stream = new FileStream("person.dat", FileMode.Create))
        {
            formatter.Serialize(stream, person1);
        }
    }
}

위 예제에서 Person 클래스는 직렬화 가능하도록 [Serializable] 속성을 지정하고, BinaryFormatter를 사용하여 객체 그래프를 person.dat 파일에 직렬화하는 방법을 보여줍니다.

역직렬화

이렇게 직렬화된 객체 그래프는 나중에 BinaryFormatter를 사용하여 다시 역직렬화할 수 있습니다.

using (FileStream stream = new FileStream("person.dat", FileMode.Open))
{
    Person deserializedPerson = (Person)formatter.Deserialize(stream);
    Console.WriteLine(deserializedPerson.Name); // 출력: Alice
    Console.WriteLine(deserializedPerson.Friend.Name); // 출력: Bob
}

결론

C#에서 객체 그래프를 직렬화하고 역직렬화하는 것은 데이터를 파일에 저장하거나 네트워크를 통해 전송할 때 유용합니다. 객체 그래프 직렬화를 사용하면 복잡한 구조의 데이터를 쉽게 저장하고 복원할 수 있습니다.

참고: