어떤 클래스나 객체에서 특정 조건이나 상황이 발생했을 때 다른 클래스나 객체에게 알리기 위한 매커니즘이다. 이벤트는 기본적으로 델리게이트를 기반으로 하며, 이벤트를 발생시키는 클래스는 이벤트를 "발행(publish)"하고, 이벤트를 받는 클래스는 이벤트를 "구독(subscribe)"한다고 표현한다.
이벤트는 어떠한 문제가 발생했다는 사실을 개체가 시스템의 모든 관련 구성 요소에 브로드캐스트하는 방법이다. 다른 모든 구성 요소는 이벤트를 구독하고 이벤트가 발생할 때 알림을 받을 수 있다. 동적 바인딩으로 작동한다.
// Button 클래스 정의
public class Button
{
// 1. 이벤트 선언
public event EventHandler Clicked;
public void OnClick()
{
// 3. 이벤트 발행
Clicked?.Invoke(this, EventArgs.Empty);
}
}
// 메인 프로그램
class Program
{
static void Main(string[] args)
{
Button button = new Button();
button.Clicked += ButtonClicked; // 2. 이벤트 구독
button.OnClick(); // 버튼 클릭
}
// 이벤트 핸들러
private static void ButtonClicked(object sender, EventArgs e)
{
Console.WriteLine("버튼 눌림");
}
}