프로그래밍 세계에서 이벤트(Event)는 매우 중요한 역할을 합니다. 특히 C#에서는 이벤트를 사용하여 다양한 동작을 쉽게 연결하고 처리할 수 있습니다. 이번 글에서는 C#에서 이벤트 시스템을 어떻게 구축할 수 있는지, 그리고 실전에서 어떻게 활용할 수 있는지에 대해 알아보겠습니다.
이벤트 시스템 시작하기
이벤트는 기본적으로 특정 액션이 발생했을 때 이를 다루기 위한 메커니즘입니다. C#에서는 이벤트를 선언하고, 발생시키고, 구독하고, 처리하는 방법을 제공합니다. 이러한 구조는 관찰자 패턴(Observer Pattern)과 유사합니다.
기본적으로 이벤트를 선언하려면 EventHandler
또는 EventHandler<T>
를 사용할 수 있습니다. 간단한 예제를 통해 시작해보죠.
using System;
public class NewsPublisher
{
// 이벤트 선언
public event EventHandler<string> NewsPublished;
public void PublishNews(string news)
{
Console.WriteLine("Publishing news...");
OnNewsPublished(news);
}
// 이벤트 발생
protected virtual void OnNewsPublished(string news)
{
NewsPublished?.Invoke(this, news);
}
}
위 예제에서는 NewsPublisher
클래스가 있으며, NewsPublished
라는 이벤트를 선언하고 있습니다. PublishNews
메서드는 뉴스를 발행할 때마다 이벤트를 발생시킵니다.
이벤트 구독과 처리
이벤트를 구독하고 처리하는 것은 매우 간단합니다. 이제 NewsPublisher
의 이벤트를 구독하는 클래스를 만들어 봅시다.
public class NewsSubscriber
{
private readonly string _subscriberName;
public NewsSubscriber(string name)
{
_subscriberName = name;
}
public void Subscribe(NewsPublisher publisher)
{
publisher.NewsPublished += OnNewsReceived;
}
// 이벤트 처리 메서드
private void OnNewsReceived(object sender, string news)
{
Console.WriteLine($"{_subscriberName} received news: {news}");
}
}
NewsSubscriber
클래스는 NewsPublisher
의 이벤트를 구독하여 발생한 뉴스를 처리합니다. 이로써 이벤트 시스템이 완성되었습니다.
유용한 팁
-
이벤트 해제: 구독한 이벤트는 반드시 해제해야 메모리 누수를 방지할 수 있습니다.
+=
로 구독한 이벤트는-=
로 해제할 수 있습니다. -
자주 사용하는 델리게이트:
Action
과Func
델리게이트는 이벤트 핸들러를 정의할 때 유용합니다. 이들을 활용하면 코드를 더 간결하게 유지할 수 있습니다. -
비동기 이벤트:
async
와await
를 사용하여 비동기 방식으로 이벤트를 처리할 수 있습니다. 이는 긴 작업을 수행하는 이벤트 핸들러에서 유용합니다.
결론
C#에서 이벤트 시스템을 구축하는 것은 비교적 직관적이지만, 강력한 기능을 제공합니다. 위에서 소개한 간단한 예제와 팁을 활용하면 보다 효율적인 이벤트 기반 프로그램을 구축할 수 있을 것입니다. 이벤트를 잘 활용하여 코드의 재사용성을 높이고, 더욱 반응성 있는 애플리케이션을 만들어 보세요!