C# delegate, event

김현승·2024년 4월 27일
0

C#

목록 보기
7/13

C#에서 델리게이트(delegate)와 이벤트(event)는 함수를 간접적으로 참조하고, 특정 시점에 호출할 수 있게 하는 기능적인 요소입니다. 이들은 객체 지향 프로그래밍과 이벤트 기반 프로그래밍을 강화하는 중요한 도구로 활용됩니다.

델리게이트 (Delegate)

델리게이트는 C#에서 메소드 참조를 위한 타입 안전한 함수 포인터라고 할 수 있습니다. 클래스와 유사하게 정의되며, 델리게이트를 사용하면 메소드를 변수에 할당하고, 파라미터로 전달하며, 메소드를 호출할 수 있습니다.

기본 사용법:

  1. 델리게이트 선언: 메소드 시그니처(반환 타입과 파라미터 리스트)와 일치하는 델리게이트를 선언합니다.
public delegate void MyDelegate(string message);
  1. 델리게이트 인스턴스 생성: 선언한 델리게이트 타입의 인스턴스를 생성하고, 호출할 메소드를 지정합니다.
public void ShowMessage(string message) {
    Console.WriteLine(message);
}

MyDelegate del = new MyDelegate(ShowMessage);
  1. 델리게이트 호출: 델리게이트 인스턴스를 통해 메소드를 간접적으로 호출합니다.
del("Hello, World!");

Action, Func, Predicate

이 키워드들은 자주 사용하게 되는 델리게이트를 템플릿화 한 것들입니다.

  • Action
    - 함수 파라미터가 T 이고 반환값이 void 인 경우
  • Func<T, TResult>
    - 함수 파라미터가 T 이고 반환값이 TResult 인 경우
  • Predicate
    - 함수 파라미터가 T 이고 반환값이 bool 인 경우

이벤트 (Event)

이벤트는 델리게이트를 기반으로 하여, 클래스 또는 객체가 특정 행동을 외부에 알릴 때 사용합니다. 이벤트는 일반적으로 클래스의 특정 조건(상태 변경, 키 입력 등)이 충족될 때 발생합니다.

기본 사용법:

  1. 이벤트 선언: 클래스 내에서 이벤트를 선언합니다. 이벤트는 특정 델리게이트 타입을 사용합니다.
public event MyDelegate MyEvent;
  1. 이벤트 발생: 조건을 충족할 때 이벤트를 발생시키기 위해 이벤트를 호출합니다. 이벤트는 안전하게 호출하기 위해 null 체크가 필요합니다.
protected virtual void OnMyEvent(string message) {
    MyEvent?.Invoke(message);
}
  1. 이벤트 구독: 이벤트를 처리할 메소드를 이벤트에 등록합니다. 이 메소드는 이벤트가 발생할 때마다 호출됩니다.
MyClass obj = new MyClass();
obj.MyEvent += ShowMessage;  // 이벤트 구독
obj.OnMyEvent("Event triggered!");  // 이벤트 발생

델리게이트와 이벤트의 차이점

  • 접근 제어: 델리게이트는 직접 호출될 수 있지만, 이벤트는 외부 클래스에서 직접 발생시킬 수 없습니다. 이벤트는 발행 클래스 내에서만 발생시킬 수 있으며, 외부에서는 구독하거나 구독 취소만 가능합니다.
  • 용도: 델리게이트는 다양한 메소드를 참조할 수 있는 범용적인 메소드 포인터로 사용되며, 이벤트는 특정 상황에서 외부에 알릴 목적으로 사용됩니다.

0개의 댓글