[Effective C#] 델리게이트를 이용하여 콜백을 표현하라

WH_NAM·2024년 2월 14일

Effective C#

목록 보기
7/23
post-thumbnail

Effective C# Itme7

델리게이트(대리자)
대리자는 메서드에 대한 참조이다. 대리자에 메서드의 주소를 할당한 후 대리자를 호출하면 이 대리자가 메서드를 호출한다.
대리자는 인스턴스가 아닌 타입이다.

delegate int MyDelegate(int a, int b)

int Plus(int a, int b)
{
	return a + b;
}
int Minus(int a, int b)
{
	return a - b;
}

MyDelegate Callback;

Callback = new MyDelegate(Plus);
Console.WriteLine(Callback(3, 4));

Callback = new MyDelegate(Minus);
Console.WriteLine(Callback(3, 4));
7
-1

콜백
콜백은 주로 서버가 클라이언트에게 비동기적으로 피드백을 주기 위해서 사용하는 방법이다. 콜백은 C#에서 델리게이트를 이용하여 표현된다.

이벤트

Predicate<T> : Func<T, bool>
하나의 입력 매개변수를 가지고 'bool'값을 반환하는 델리게이트

List<int> numbers = new List<int> {1, 2, 3, 4, 5};
Predicate<int> isEven = n => n % 2 == 0;

int evenNumber = numbers.Find(isEven);
Console.WriteLine(evenNumber);
2

Func<T1, TResult>
입력 매개변수를 가지고 반환값을 생성하는 델리게이트

Func<int, int, string> myFunc = (a, b) => (a + b).ToString();

string result = myFunc(3, 5);
Console.WriteLine(result);
8

Action
매개변수를 받지않고 아무것도 반환하지 않는 델리게이트

Action myAction = () => { Console.WriteLine{"Hello World"};

myAction();
Hello World

결론
델리게이트는 런타임에 콜백을 구성하는 최고의 방법이다.
델리게이트를 사용하면 콜백을 사용해야 하는 클라이언트를 더욱 단순하게 구성할 수 있을 뿐 아니라 런타임에 콜백 함수를 구성할수 있다.
하나의 델리게이트에 여러 개의 콜백함수를 추가할 수도 있다.
.NeT 환경에서 콜백이 필요한 경우에는 반드시 델리게이트를 사용하자

profile
안녕하세요

0개의 댓글