C# Delegate
Delegate(델리게이트, 대리자)는 C#에서 매우 중요한 개념이다. Delegate는 CLI (Common Language Infrastructure)에서 사용하는 Type-safe function pointer의 한 형태1라고 설명할 수 있다.
Method를 참조하여 호출하기에 콜백 및 이벤트 리스너2를 구현하는 데 사용한다. C++의 함수 포인터3와 같은 개념이라고 보면 된다. 단순하게 설명하면 int, string 타입처럼 함수를 변수처럼 선언하거나 함수의 파라미터로 활용4할 수 있게 해주는 것이다.
아래의 코드(소스)는 델리게이트, 함수포인터의 개념을 이해하고 이를 활용하는 예제이다. Delegate의 형태에는 Action, Func, Predicate5가 있다.
LINQ, Lambda
1
2
3
// Lambda와 함께 LINQ를 사용할 수 있는 이유 : Delegate (Action, Func, Predicate)
List<int> list = new() { 2, 3, 4, 5, 6, 7 };
list.Where(x => x > 5).ToList().ForEach(Console.WriteLine);
C++ 함수포인터
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
bool compare(int a, int b) { return a == b; }
int square(int x) { return x * x; }
int myFunc(int x) { return x * (x - 15) / 2; }
int arrayMin(const int arr[], int n, int (*f)(int))
{
int min = f(arr[0]);
for (int i = 1; i < n; i++) {
if (f(arr[i]) < min) {
min = f(arr[i]);
}
}
return min;
}