[c#] C# 직렬화와 데이터 압축

C#에서는 객체를 파일에 저장하거나 네트워크를 통해 전송하기 위해 직렬화(serialization)데이터 압축(compression)을 사용할 수 있습니다. 이러한 기술들을 통해 데이터를 효과적으로 관리하고 전송할 수 있습니다.

직렬화(Serialization)

객체의 상태를 저장하거나 네트워크를 통해 전송하기 위해 C#에서는 직렬화를 제공합니다. 이를 통해 객체의 모든 필드와 속성을 이진 형식 또는 XML 형식으로 변환하여 저장하거나 전송할 수 있습니다.

예를 들어, 다음은 Person 클래스를 직렬화하는 예제입니다.

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

[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class SerializationExample
{
    public void SerializePerson(Person person, string filename)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        using (FileStream stream = new FileStream(filename, FileMode.Create))
        {
            formatter.Serialize(stream, person);
        }
    }
}

위 예제에서는 BinaryFormatter를 사용하여 Person 객체를 이진 형식으로 직렬화하고, FileStream을 통해 파일에 저장하고 있습니다.

데이터 압축(Compression)

데이터를 효율적으로 저장하거나 전송하기 위해 C#에서는 데이터 압축 기술을 제공합니다. .NET Framework에는 GZipStream 및 DeflateStream과 같은 클래스를 제공하여 데이터를 압축할 수 있습니다.

다음은 파일을 압축하는 예제입니다.

using System;
using System.IO;
using System.IO.Compression;

public class CompressionExample
{
    public void CompressFile(string inputFile, string compressedFile)
    {
        using (FileStream originalFileStream = new FileStream(inputFile, FileMode.Open))
        {
            using (FileStream compressedFileStream = File.Create(compressedFile))
            {
                using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
                {
                    originalFileStream.CopyTo(compressionStream);
                }
            }
        }
    }
}

위 예제에서는 GZipStream을 사용하여 파일을 압축하고 있습니다.

결론

C#에서는 직렬화와 데이터 압축을 통해 객체의 상태를 저장하고, 데이터를 효율적으로 관리하고 전송할 수 있습니다. 이를 통해 소프트웨어의 성능과 효율성을 향상시킬 수 있습니다.

참고문헌: