C# 이벤트 기반 프로그래밍
C# 이벤트 기반 프로그래밍은 어떤 일이 발생할 때 개체가 다른 개체에 알릴 수 있는 프로그래밍 패러다임입니다. 이벤트 기반 프로그래밍에서 이벤트를 발생시키는 객체를 "이벤트 소스"라고 하고 이벤트에 응답하는 객체를 "이벤트 핸들러"라고 합니다.
C#에서 이벤트는 대리자 형식을 사용하여 구현됩니다. 대리자는 특정 서명이 있는 메서드를 참조할 수 있는 형식이 안전한 함수 포인터입니다. 이벤트가 발생하면 이벤트 소스는 대리자를 호출하고 대리자가 이벤트 핸들러를 호출합니다.
C#에서 이벤트를 정의하려면 먼저 이벤트 처리기로 사용할 수 있는 메서드의 서명을 정의하는 대리자 형식을 선언합니다. 그런 다음 event 키워드를 사용하여 이벤트를 선언하고 이벤트 유형으로 사용할 대리자 유형을 지정합니다.
예를 들어 다음 코드를 고려하십시오.
public delegate void MyEventHandler(object sender, EventArgs e);
public class MyEventSource {
public event MyEventHandler MyEvent;
protected virtual void OnMyEvent(EventArgs e) {
MyEvent?.Invoke(this, e);
}
}
public class MyEventHandlerClass {
public void HandleMyEvent(object sender, EventArgs e) {
Console.WriteLine("MyEvent was raised!");
}
}
public class Program {
static void Main(string[] args) {
MyEventSource eventSource = new MyEventSource();
MyEventHandlerClass eventHandler = new MyEventHandlerClass();
eventSource.MyEvent += eventHandler.HandleMyEvent;
eventSource.OnMyEvent(EventArgs.Empty);
}
}
이 코드에서는 object 및 EventArgs 매개변수를 사용하고 void를 반환하는 대리자 유형 MyEventHandler를 정의합니다. 그런 다음 MyEvent라는 MyEventHandler 유형의 이벤트를 선언하는 MyEventSource 클래스를 정의합니다. OnMyEvent 메소드는 이벤트 발생을 담당하고 MyEventHandlerClass 클래스는 이벤트 핸들러로 사용될 HandleMyEvent 메소드를 정의합니다.
Main 메서드에서 MyEventSource 인스턴스와 MyEventHandlerClass 인스턴스를 만듭니다. 그런 다음 += 연산자를 사용하여 HandleMyEvent 메소드를 MyEvent 이벤트에 등록합니다. 마지막으로 OnMyEvent 메서드를 호출하여 이벤트를 발생시킵니다.
OnMyEvent 메서드가 호출되면 MyEvent 대리자를 호출하고, 이는 다시 HandleMyEvent 메서드를 호출합니다. 이로 인해 "MyEvent was raised!"라는 메시지가 나타납니다. 콘솔에 인쇄되고 있습니다.
이벤트 기반 프로그래밍은 이벤트에 응답하는 코드에서 이벤트를 발생시키는 코드를 분리하려는 상황에서 매우 유용할 수 있습니다. 이렇게 하면 이벤트를 발생시키는 코드를 수정하지 않고도 이벤트 핸들러의 동작을 변경할 수 있으므로 더 모듈화되고 재사용 가능한 코드를 작성할 수 있습니다.
또한 이벤트 기반 프로그래밍을 사용하여 개체가 종속 항목 목록을 유지 관리하고 상태 변경을 자동으로 알리는 디자인 패턴인 관찰자 패턴을 구현할 수 있습니다. 관찰자 패턴은 사용자가 인터페이스와 상호 작용할 때 객체가 자동으로 업데이트되어야 하는 그래픽 사용자 인터페이스(GUI) 프로그래밍에서 널리 사용됩니다.