대리자(delegate)는 함수를 참조할 수 있는 타입이다. 즉, 대리자는 특정 시그니처(매개변수와 반환형)를 가진 함수를 변수처럼 저장하고, 나중에 실행할 수 있도록 한다.
기본적인 대리자는 아래와 같이 선언한다.
public delegate int CalcDelegate(int x, int y);
이 선언은 두 개의 int를 입력받아 int를 반환하는 함수를 저장할 수 있는 타입인 CalcDelegate를 정의한다.
일반적으로 함수는 직접 호출해야 하지만, 대리자를 사용하면 함수를 변수에 저장하거나, 다른 함수의 인자로 전달하여 실행 시점을 동적으로 조정할 수 있다.
이로 인해 코드의 유연성과 재사용성이 높아진다.
특히 이벤트 기반 프로그래밍이나 라이브러리 개발에서 자주 사용된다.
콜백(callback)은 특정 시점에 실행되도록 사전에 등록해두는 함수를 의미한다.
일반적으로 콜백은 작업이 완료되거나, 이벤트가 발생했을 때 호출된다.
C#에서 콜백은 주로 대리자를 통해 구현된다.
대리자(delegate): 함수를 저장할 수 있는 변수(타입)이다.
콜백(callback): 특정 시점에 호출되도록 전달된 함수이다.
콜백을 구현하려면, 함수를 전달해야 하므로 대리자가 필요하다.
public delegate void MessageDelegate(string message);
void PrintMessage(string message) {
Debug.Log(message);
}
MessageDelegate del = PrintMessage;
del("Hello, Delegate!");
void DoSomething(MessageDelegate callback)
{
// 작업 수행
callback("작업 완료");
}
void PrintMessage(string message) {
Debug.Log(message);
}
DoSomething(PrintMessage);
C#에서는 직접 대리자를 선언하지 않고, 일반적으로 내장된 Action 및 Func 대리자를 사용한다.
Action: 반환값이 없는 대리자
Func: 반환값이 있는 대리자
Action<string> action = (msg) => Debug.Log(msg);
Func<int, int, int> func = (a, b) => a + b;
Unity 엔진에서 버튼 클릭, 애니메이션 완료, 네트워크 응답 등 다양한 상황에서 콜백이 사용된다.
예를 들어, Button.onClick은 내부적으로 대리자를 사용하여 클릭 시 실행할 함수를 등록한다.
myButton.onClick.AddListener(() => Debug.Log("버튼 클릭됨"));
대리자(delegate): 함수를 저장하고 전달할 수 있는 타입
콜백(callback): 특정 시점에 실행되도록 전달된 함수(주로 대리자를 통해 구현)
Action/Func: C#에서 제공하는 대표적인 대리자 타입