저번 시간에 이어서 이벤트 발행 & 구독 패턴의 C# 실제 예제를 간단히 알아본다.
이전 포스팅
2024.10.13 - [프로그래밍&IT/기타] - (1) Event 발행 (Publisher), 구독(Subscriber) 패턴에 대해서
C#에서 이벤트(Event)를 발행하고 구독하는 방식은 event와 delegate를 사용하여 구현할 수 있습니다.
1. 이벤트 발행 및 구독 구조
- Publisher: 이벤트를 발행하는 클래스
- Subscriber: 이벤트를 구독하는 클래스
using System;
namespace EventExample
{
// 이벤트를 위한 Delegate 선언
public delegate void NotifyEventHandler(string message);
// 이벤트 발행 클래스 (Publisher)
public class Publisher
{
// 이벤트 선언
public event NotifyEventHandler Notify;
// 이벤트를 트리거하는 메서드
public void RaiseEvent(string message)
{
if (Notify != null) // 구독자가 있을 때만 이벤트 호출
{
Notify(message);
}
}
}
// 이벤트 구독 클래스 (Subscriber)
public class Subscriber
{
private string _name;
public Subscriber(string name)
{
_name = name;
}
// 이벤트 핸들러 메서드
public void OnNotify(string message)
{
Console.WriteLine($"{_name} received message: {message}");
}
}
class Program
{
static void Main(string[] args)
{
// Publisher 생성
Publisher publisher = new Publisher();
// Subscriber 생성 및 구독 설정
Subscriber subscriber1 = new Subscriber("Subscriber 1");
Subscriber subscriber2 = new Subscriber("Subscriber 2");
publisher.Notify += subscriber1.OnNotify; // subscriber1이 이벤트 구독
publisher.Notify += subscriber2.OnNotify; // subscriber2도 구독
// 이벤트 발행
publisher.RaiseEvent("Hello, Subscribers!");
// 구독 해제
publisher.Notify -= subscriber2.OnNotify;
// 이벤트 발행 (subscriber2는 메시지를 받지 않음)
publisher.RaiseEvent("Goodbye, Subscribers!");
}
}
}
2. 내용에 대해서
- Delegate 선언: NotifyEventHandler는 이벤트 핸들러 메서드를 정의하는 대리자입니다. 이 대리자는 string 매개변수를 받고, 반환 값이 없는 메서드를 참조합니다.
- Publisher 클래스: Publisher 클래스는 이벤트를 선언하고, RaiseEvent 메서드를 통해 이벤트를 트리거합니다. Notify 이벤트는 NotifyEventHandler 대리자를 통해 정의되었습니다.
- Subscriber 클래스: Subscriber 클래스는 이벤트를 구독하고, 이벤트가 발생하면 OnNotify 메서드가 호출됩니다. 각 구독자는 자신의 이름과 함께 메시지를 출력합니다.
- 이벤트 구독 및 발행: Main 메서드에서 두 명의 구독자를 생성하고, 각 구독자가 이벤트를 구독하도록 설정합니다. 이후 이벤트를 두 번 발행하며, 두 번째 발행에서는 한 구독자를 해제한 후 메시지를 받지 않게 됩니다.
'프로그래밍&IT > 기타' 카테고리의 다른 글
"파일은 인터넷 또는 제한 영역에 있거나 웹 표시가 있으므로 ~ " 이상시 처리 (2) | 2024.11.13 |
---|---|
보안 정책 : 화이트 리스트와 블랙 리스트 (2) | 2024.10.28 |
(1) Event 발행 (Publisher), 구독(Subscriber) 패턴에 대해서 (2) | 2024.10.13 |
MAUI 관심있어서 유료강의를 신청했다. (6) | 2024.09.22 |
키오스크 개발관련된 분야가 공고로 간혹 올라온다. (1) | 2024.09.16 |