C#에서는 기본적으로 .NET Framework의 직렬화 기능을 사용하여 객체를 직렬화하고 역직렬화할 수 있습니다. 하지만 때때로 기본 직렬화 방식으로는 요구사항을 충족시키지 못할 때가 있습니다. 이럴 때에는 사용자 지정 직렬화 방식을 구현하여 객체를 직렬화하고 역직렬화할 수 있습니다.
커스텀 직렬화란?
커스텀 직렬화는 .NET Framework의 직렬화 기능을 직접 제어하고 사용자 지정 직렬화 로직을 구현하는 것을 말합니다. 이를 통해 객체의 직렬화 과정을 사용자가 원하는 대로 제어할 수 있습니다.
커스텀 직렬화 구현
커스텀 직렬화를 구현하기 위해서는 ISerializable
인터페이스를 구현해야 합니다. 이 인터페이스를 구현하면 CLR(Common Language Runtime)은 직렬화 프로세스를 사용자가 정의한 방식으로 제어할 수 있도록 합니다.
예를 들어, 다음은 ISerializable
인터페이스를 구현한 예제입니다.
using System;
using System.Runtime.Serialization;
[Serializable]
public class CustomObject : ISerializable
{
public string Name { get; set; }
public CustomObject(string name)
{
this.Name = name;
}
// 직렬화 메서드
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Name", this.Name);
}
// 역직렬화 생성자
protected CustomObject(SerializationInfo info, StreamingContext context)
{
this.Name = info.GetString("Name");
}
}
위 예제에서는 ISerializable
인터페이스를 구현하여 GetObjectData
메서드를 정의하고, 역직렬화를 위한 생성자를 추가했습니다.
사용자 정의 직렬화의 장단점
사용자 지정 직렬화는 직렬화 프로세스를 완전히 제어할 수 있는 장점이 있지만, 개발자가 일일히 직렬화 및 역직렬화 로직을 작성해야 한다는 단점도 있습니다. 또한, CLR의 기본 직렬화 방식과의 호환성 문제가 있을 수 있습니다.
커스텀 직렬화를 구현할 때에는 이러한 장단점을 고려하여 적합한 방식을 선택해야 합니다.
필요에 따라 사용자 지정 직렬화를 구현하여 CLR의 기본 직렬화 외에도 개발자가 원하는 직렬화 방식을 사용할 수 있습니다.
참고 자료
- Microsoft Docs. “ISerializable Interface”. https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.iserializable?view=netframework-4.8
- Microsoft Docs. “Custom serialization”. https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/custom-serialization
- Richter, Jeffrey. “CLR via C#”. Microsoft Press, 2012.