C#에서는 직렬화(Serialization)와 멀티쓰레딩(Multithreading)이 매우 중요한 개념입니다. 직렬화는 객체를 데이터 스트림으로 변환하거나, 데이터 스트림을 다시 객체로 변환하는 과정을 말하며, 멀티쓰레딩은 여러 쓰레드가 동시에 실행되는 프로세스를 의미합니다.
이러한 개념들은 C# 애플리케이션의 성능, 안정성, 확장성에 영향을 미치므로, 중요한 개념으로 기억해야 합니다.
직렬화(Serialization)
직렬화는 객체의 상태를 저장하거나 전송하기 위해 사용됩니다. 주로 파일에 객체를 저장하거나 서버 간 통신에 사용됩니다. C#에서는 BinaryFormatter
, XmlSerializer
, DataContractSerializer
등의 클래스를 사용하여 직렬화를 구현할 수 있습니다. 또한, 객체가 직렬화되기 위해서는 [Serializable]
어트리뷰트가 지정되어야 합니다.
아래는 BinaryFormatter
를 사용하여 객체를 직렬화하고 다시 역직렬화하는 예제 코드입니다.
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
class Person
{
public string Name;
public int Age;
}
class Program
{
static void Main()
{
Person person = new Person { Name = "Alice", Age = 30 };
// 직렬화
BinaryFormatter formatter = new BinaryFormatter();
using (var stream = new FileStream("person.bin", FileMode.Create, FileAccess.Write))
{
formatter.Serialize(stream, person);
}
// 역직렬화
using (var stream = new FileStream("person.bin", FileMode.Open, FileAccess.Read))
{
Person deserializedPerson = (Person)formatter.Deserialize(stream);
Console.WriteLine(deserializedPerson.Name);
Console.WriteLine(deserializedPerson.Age);
}
}
}
멀티쓰레딩(Multithreading)
멀티쓰레딩은 여러 쓰레드가 동시에 실행되는 프로세스를 말합니다. C#에서는 Thread
, Task
, ThreadPool
등과 같은 클래스를 사용하여 멀티쓰레딩을 구현할 수 있습니다.
아래는 C#에서 Task
를 사용하여 멀티쓰레딩을 구현하는 예제 코드입니다.
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
Task task1 = Task.Run(() => DoWork(1));
Task task2 = Task.Run(() => DoWork(2));
Task.WaitAll(task1, task2);
Console.WriteLine("All tasks are completed");
}
static void DoWork(int id)
{
Console.WriteLine($"Task {id} is starting");
System.Threading.Thread.Sleep(2000);
Console.WriteLine($"Task {id} is done");
}
}
요약
C#에서는 직렬화와 멀티쓰레딩이 매우 중요한 개념으로, 각각 데이터의 변환 및 처리, 동시성 및 성능 향상을 위해 사용됩니다. 다양한 클래스와 방법을 사용하여 직렬화와 멀티쓰레딩을 구현할 수 있으며, 이러한 개념을 잘 숙지하고 활용함으로써 안정적이고 효율적인 C# 애플리케이션을 개발할 수 있습니다.
더 많은 정보는 Microsoft 공식 문서를 참고하시기 바랍니다.