C#에서
이벤트(Event),
이벤트 핸들러(EventHandler),
그리고 이벤트 기반 프로그래밍(Event-driven programming)은
밀접하게 연결되어 있으며, 이 세 가지 요소를 통해 C#에서 이벤트 기반 프로그래밍 모델을 구현한다.
이벤트(Event)
C#에서 이벤트는 어떤 일이 발생했다는 것을 알리는 메커니즘으로, 클래스나 객체가 특정 액션에 대해 구독자(subscribers)에게 알릴 때 사용된다.
이벤트는 대개 이벤트를 발생시키는 객체(이벤트 소스)와 이벤트에 반응하는 메서드(이벤트 핸들러) 사이의 통신 수단으로 사용된다.
이벤트 핸들러(EventHandler)
이벤트 핸들러는 이벤트가 발생했을 때 호출되는 메서드를 말한다. 이벤트에 대한 응답으로 실행되는 코드를 포함하며, 이벤트와 관련된 데이터를 처리하거나, 이벤트 발생 시 필요한 작업을 수행한다.
C#에서는 이벤트 핸들러를 delegate를 사용하여 정의하며, 이벤트에 대응하는 메서드의 시그니처를 명시한다.
이벤트 기반 프로그래밍(Event-driven programming)
이벤트 기반 프로그래밍은 프로그램의 흐름이 이벤트에 의해 결정되는 프로그래밍 패러다임이다.
이는 프로그램이 사용자의 액션, 메시지 수신, 타이머 만료 등의 이벤트를 기다리고, 이벤트가 발생하면 해당 이벤트를 처리하는 이벤트 핸들러를 실행하는 방식으로 동작한다.
C#에서의 이벤트, 이벤트 핸들러, 이벤트 기반 프로그래밍의 연결
C#에서는 delegate를 사용하여 이벤트 핸들러를 정의하고, event 키워드를 사용하여 이벤트를 선언한다.
클래스나 객체는 event 키워드로 선언된 이벤트를 통해 구독자에게 특정 상황이 발생했음을 알린다.
구독자(다른 클래스나 객체)는 이벤트에 대응하는 메서드(이벤트 핸들러)를 이벤트에 등록하여, 이벤트 발생 시 해당 메서드가 호출되도록 한다.
<예제 코드>
using System;
namespace EventExample
{
public class Publisher
{
// 이벤트 선언
public event EventHandler SomethingHappened;
// 이벤트를 발생시키는 메서드
public void DoSomething()
{
Console.WriteLine("Doing something...");
OnSomethingHappened(EventArgs.Empty);
}
// 이벤트 핸들러를 호출하는 보호된 가상 메서드
protected virtual void OnSomethingHappened(EventArgs e)
{
SomethingHappened?.Invoke(this, e);
}
}
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
publisher.SomethingHappened += HandleEvent;
}
// 이벤트 핸들러
private void HandleEvent(object sender, EventArgs e)
{
Console.WriteLine("Handled the event.");
}
}
class Program
{
static void Main(string[] args)
{
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();
subscriber.Subscribe(publisher);
publisher.DoSomething(); // 이벤트 발생
}
}
}
위 예제코드에서 Publisher 클래스는 SomethingHappened 이벤트를 선언하고, 이 이벤트는 DoSomething 메서드가 호출될 때 발생한다.
Subscriber 클래스는 Publisher의 SomethingHappened 이벤트에 대한 구독자로, Subscribe 메서드를 통해 이벤트 핸들러(HandleEvent 메서드)를 이벤트에 등록한다.
따라서 publisher.DoSomething()이 호출되면, subscriber의 HandleEvent 메서드가 실행된다.
이 방식을 통해, C#에서는 이벤트 소스와 이벤트 핸들러 간의 결합도를 낮추고, 유연하고 확장 가능한 어플리케이션 구조를 만들 수 있다.
(이벤트 기반 프로그래밍은 GUI 애플리케이션, 네트워크 프로그래밍, 게임 개발 등 다양한 분야에서 활용된다.)
'메모장' 카테고리의 다른 글
게임 알고리즘 문제 메모 (0) | 2024.03.22 |
---|---|
Unity에서 svg (vector) 형식 이미지 인식 하는 방법 (0) | 2024.03.10 |
System.Text.RegularExpressions.Regex.IsMatch - 문자열 매칭 메서드 (0) | 2024.02.23 |
[BigNumberConverter] 재화 단위 시스템으로 숫자 변환 (0) | 2024.02.20 |
Application.dataPath 및 파일 저장 경로 메모 (0) | 2024.02.13 |