[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#에서의 직렬화 기능에 대한 간단한 소개였습니다.
참고 자료
- Microsoft Docs. “SerializableAttribute Class”. Microsoft. https://docs.microsoft.com/en-us/dotnet/api/system.serializableattribute?view=netframework-4.8