티스토리 뷰

반응형
C# Delegate 완벽 정리: Action, Func, Predicate, EventHandler 사용법

C# Delegate 완벽 정리: Action, Func, Predicate, EventHandler

C#에서 Delegate(델리게이트)는 메서드를 참조할 수 있는 타입입니다. 쉽게 말해, 메서드를 변수처럼 다룰 수 있게 해주는 기능이죠. 델리게이트는 이벤트(event), 콜백(callback), 람다(lambda) 등 다양한 곳에서 활용되며 C#의 핵심 문법 중 하나입니다.

하지만 매번 델리게이트를 직접 정의하는 것은 번거롭기 때문에, .NET Framework에서는 자주 쓰이는 형태의 델리게이트를 미리 정의해 제공하고 있습니다. 대표적으로 Action, Func, Predicate, EventHandler 네 가지가 있습니다.

1. Action

Action반환값이 없는 델리게이트입니다. 매개변수는 0개부터 최대 16개까지 받을 수 있습니다.


// 반환값이 없는 Action
Action action = () => Console.WriteLine("Hello Action");
action(); // Hello Action

// 매개변수 2개를 받는 Action
Action<int, string> act2 = (n, s) => Console.WriteLine($"{n}, {s}");
act2(5, "World"); // 5, World
    

2. Func

Func반환값이 있는 델리게이트입니다. 마지막 타입 매개변수가 반환형을 의미합니다. 매개변수는 0~16개까지 가능합니다.


// 반환값이 int인 Func
Func<int> f1 = () => 100;
Console.WriteLine(f1()); // 100

// 매개변수 2개, 반환값 1개
Func<int, int, int> add = (a, b) => a + b;
Console.WriteLine(add(3, 4)); // 7
    

3. Predicate<T>

Predicate<T>매개변수가 하나이고, 반환값은 항상 bool인 델리게이트입니다. 사실상 Func<T, bool>과 동일합니다.


Predicate<int> isEven = (x) => x % 2 == 0;
Console.WriteLine(isEven(10)); // True
    

조건 검사, 필터링, 리스트 검색 등의 상황에서 자주 사용됩니다.

4. EventHandler

이벤트(event) 처리에서 자주 쓰라고 .NET이 기본 제공하는 델리게이트입니다. 표준적인 이벤트 패턴을 따를 때는 EventHandlerEventHandler<T>를 사용합니다.


// EventHandler 기본 형태
public delegate void EventHandler(object sender, EventArgs e);

// 제네릭 EventHandler
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
    

사용 예시는 다음과 같습니다:


public event EventHandler SomethingHappened;
public event EventHandler<MyEventArgs> CustomEvent;
    

이처럼 이벤트를 선언할 때 EventHandler를 사용하면 일관된 이벤트 패턴을 유지할 수 있습니다.

5. 정리

  • Actionvoid 반환, 매개변수 0~16개
  • Func → 값 반환, 매개변수 0~16개 (마지막 인자가 반환형)
  • Predicate<T> → bool 반환, 매개변수 1개
  • EventHandler / EventHandler<T> → 이벤트 전용 표준 델리게이트

👉 결론적으로, C#에서 델리게이트를 직접 선언할 필요는 거의 없습니다. 대부분의 경우 Action, Func, Predicate, EventHandler를 활용하면 충분하기 때문이죠. 이렇게 하면 코드의 가독성이 좋아지고, 불필요한 선언을 줄일 수 있습니다.