[c#] C#에서의 직렬화 기능

C#에서 직렬화는 객체를 데이터 스트림으로 변환하는 프로세스입니다. 이는 객체를 파일에 저장하거나 네트워크를 통해 전송할 때 유용합니다. C#에서는 System.Runtime.Serialization 네임스페이스를 사용하여 직렬화 기능을 제공합니다.

1. 객체의 직렬화

C#에서 객체를 직렬화하려면 해당 클래스를 Serializable 특성을 포함하도록 만들어야 합니다. 이 특성은 해당 클래스의 모든 멤버 변수와 프로퍼티가 직렬화되어야 함을 나타냅니다.

아래는 예시입니다.

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; }
}

2. 객체의 직렬화와 역직렬화

객체 직렬화

이제 직렬화된 데이터를 만들어야 합니다. 아래 코드는 Person 클래스의 인스턴스를 직렬화하여 파일에 저장하는 예시입니다.

Person person = new Person { Name = "Alice", Age = 30 };

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

객체 역직렬화

이렇게 저장한 직렬화된 데이터를 다시 읽어들여 역직렬화할 수 있습니다. 아래 코드는 파일에서 직렬화된 데이터를 읽어들여 Person 객체로 변환하는 예시입니다.

stream = new FileStream("person.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
Person deserializedPerson = (Person)formatter.Deserialize(stream);
stream.Close();

Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");

3. 주의사항

직렬화된 데이터를 역직렬화할 때는 반드시 충분한 보안 조치를 취해야 합니다. 악의적인 직렬화 데이터가 악성 코드를 실행할 수 있기 때문입니다.

C#에서의 직렬화는 객체를 데이터로 변환할 때 매우 유용하지만, 보안 측면을 항상 유의해야 합니다.

이상으로 C#에서의 직렬화 기능에 대한 간단한 소개였습니다.

참고 자료