[C#] 콜백(Callback)과 대리자(delegate) 정리

Lumos Velog·2025년 7월 18일
1

대리자(delegate)

대리자(delegate)는 함수를 참조할 수 있는 타입이다. 즉, 대리자는 특정 시그니처(매개변수와 반환형)를 가진 함수를 변수처럼 저장하고, 나중에 실행할 수 있도록 한다.
기본적인 대리자는 아래와 같이 선언한다.

public delegate int CalcDelegate(int x, int y);

이 선언은 두 개의 int를 입력받아 int를 반환하는 함수를 저장할 수 있는 타입인 CalcDelegate를 정의한다.




사용이유

일반적으로 함수는 직접 호출해야 하지만, 대리자를 사용하면 함수를 변수에 저장하거나, 다른 함수의 인자로 전달하여 실행 시점을 동적으로 조정할 수 있다.
이로 인해 코드의 유연성과 재사용성이 높아진다.
특히 이벤트 기반 프로그래밍이나 라이브러리 개발에서 자주 사용된다.




콜백(callback)

콜백(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);



내장 대리자: Action, Func

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#에서 제공하는 대표적인 대리자 타입



0개의 댓글