C#

C# 이벤트 발생 (Event Raising) 이해

우준세 2023. 10. 31. 17:58
728x90
반응형

 

이번 포스팅은 C#에서 이벤트를 어떻게 정의하고 발생시키는지에 대해 알아보겠습니다. 


| 이벤트란?

- 이벤트(Event) : 객체 또는 클래스에서 발생하는 상황, 조건을 나타내며

다른 부분(이벤트 핸들러)에 이를 알리는 메커니즘

- 특정 조건이 충족될 때 호출되며, 예를 들어 GUI 요소에서 버튼 클릭, 마우스 이동 등 이벤트 발생

 

| 이벤트 정의

public event EventHandler MyEvent;

- 기본적으로 클래스 내에서 delegate 형식을 사용하여 정의되며 

위 코드에서 MyEvent는 EventHandler 형식의 이벤트를 정의하는 것입니다.


| 이벤트 발생 메서드 정의

- 이벤트를 발생시키기 위해서 메서드를 정의하여 이 메서드는 이벤트가 발생할 때 호출 됩니다.

 

public void RaiseEvent()
{
    Console.WriteLine("이벤트 발생!"); // 이벤트 발생 메시지 출력

    // 이벤트 핸들러가 등록되어 있는지 확인하고 호출합니다.
    MyEvent?.Invoke(this, EventArgs.Empty);
}

- 이 코드에서 RaiseEvnet 메서드는 이벤트를 호출하고 ?. 연산자를 사용하여 이벤트가 null 일 경우 Invoke 메서드를 호출하지 않도록 보장합니다. 


| 이벤트 핸들러 등록

myObject.MyEvent += MyEventHandler;

- 이벤트를 처리하기 위해 이벤트 핸들러를 등록해야 합니다.

- 이벤트가 발생했을 때 실행되는 메서드입니다. 


| 이벤트 처리

- 이벤트가 발생하면 등록된 이벤트 핸들러가 실행됩니다.

- 이벤트 핸들러는 이벤트가 처리되는 곳으로 이벤트가 발생하면 실행됩니다.

 

static void MyEventHandler(object sender, EventArgs e)
{
    Console.WriteLine("이벤트가 처리되었습니다."); // 이벤트 처리 메시지 출력
}

 

| 이벤트 발생 코드 종합 

class MyEventPublisher
{
    // 이벤트를 정의합니다.
    public event EventHandler MyEvent;

    // 이벤트를 발생시키는 메서드를 정의합니다.
    public void RaiseEvent()
    {
        Console.WriteLine("이벤트 발생!"); // 이벤트 발생 메시지 출력

        // 이벤트 핸들러가 등록되어 있는지 확인하고 호출합니다.
        MyEvent?.Invoke(this, EventArgs.Empty);
    }
}

class Program
{
    static void Main()
    {
        MyEventPublisher publisher = new MyEventPublisher();

        // 이벤트 핸들러를 등록합니다.
        publisher.MyEvent += MyEventHandler;

        // 이벤트를 발생시킵니다.
        publisher.RaiseEvent();
    }

    // 이벤트 핸들러 메서드
    static void MyEventHandler(object sender, EventArgs e)
    {
        Console.WriteLine("이벤트가 처리되었습니다."); // 이벤트 처리 메시지 출력
    }
}

 


| 마무리

- 이벤트 발생 시키는 방법에 대한 전체적인 내용을 정리하였습니다.

이벤트 기반 프로젝트를 개발하면서 자주 사용했던 방법이며

객체 간의 통신 및 비동기 이벤트 처리에 유용하게 사용하였습니다.

 

틀린 점이 있거나 질문이 있으시면 댓글로 남겨주세요!

 

다음 포스팅으로 찾아오겠습니다.

 

감사합니다 :)

 

 

 

728x90
반응형