공부블로그

[공부 블로그] Delegate에 대하여

bimtaeur30 2025. 12. 3. 11:02

안녕하세요.

오늘은 학교 정규수업인 프로그래밍 심화반에서 배운 델리게이트에 대해서 한번 복습하고 정리해 보고자 블로그를 쓰게 되었습니다.

 

우선, 델리게이트의 기초 개념부터 확실하게 짚고 넘어가보겠습니다.

여기엔 사람이 3명 있습니다. 김게임과, 비서와, 넥슨 회장입니다. 김게임은 넥슨 회장에게 어떠한 제안을 하려고 합니다. 하지만 김게임은 김 회장에게 바로 연락이 닿을 만큼 높은 사람이 아니기 때문에 먼저 비서에게 연락을 했습니다. 비서는 그 연락을 받고 넥슨 회장님에게 다시 연락을 드렸습니다. 넥슨 회장님은 비서의 연락을 받고 김게임에게 다시 연락을 줍니다.

이것이 델리게이트(대리자)입니다.

 

그렇다면 프로그래밍에서의 델리게이트의 정의는 무엇일까요?

C#에서의 델리게이트는 메서드(함수)에 대한 참조를 저장하는 타입입니다. 이는 메서드를 변수처럼 저장할 수 있게 해 주고, 매개변수로 저장하거나 다른 메서드로부터 반환을 받을 수 있도록 해줍니다.

 

델리게이트는 다음과 같이 선언합니다.

델리게이트는 메서드에 대한 참조이기 때문에 자신이 참조할 메서드의 반환 형식과 매개변수를 명시해줘야 합니다.

delegate int ExDelegate(int a, int b);

 

이제 대리자가 참조할 메서드를 간단하게 선언해 보겠습니다.

이 메서드들의 반환 형식과 매개변수는 대리자의 반환 형식과 매개변수를 따라야 합니다.

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

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

 

이제 이 메서드를 ExDelegate가 참조하도록 해보겠습니다.

ExDelegate CallBack;

CallBack = new ExDelegate(Plus);
Console.WriteLine(CallBack(3,4)); //7 출력

CallBack = new ExDelegate(Minus);
Console.WriteLine(CallBack(7,5)); //2 출력

 

여기까지 예제만 봐선 도대체 왜 이런 번잡한 과정을 거쳐가며 메서드를 호출해야 할까 의문이 들기도 합니다.

 

예를 들어, 정렬하는 기능을 탑재하고 있는 메서드 한 개가 있다고 해봅시다. 해당 메서드는 오름차순으로 정렬을 수행할 수도 있고, 내림차순으로 정렬을 수행할 수도 있습니다. 이때 정렬을 수행하는 메서드에 델리게이트를 이용해서 직접 정렬을 수행하는 메서드를 수정하지 않고 오름차순, 내림차순 메서드로 기능을 손쉽게 변경할 수 있습니다. 필요에 따라서 델리게이트에 오름차순 기능 메서드, 내림차순 기능 메서드를 구독시키는 방법으로 말입니다.

여기까지 Delegate에 대해 알아보았습니다.

감사합니다.