대리자(delegate)

램해·2026년 1월 15일

델리게이트(Delegate)

델리게이트란 메서드를 하나의 값처럼 다루기 위해 사용하는 C#의 타입이다.
함수를 직접 호출하는 대신, 나중에 실행할 동작을 미리 등록해 두는 용도로 사용된다.

주로 이벤트 처리, 상태 변화 알림, UI, 시스템 간 연결과 같이 어떤 일이 발생했음을 전달하는 구조에서 활용된다.

델리게이트의 기본 개념

델리게이트는 “특정 형태의 메서드를 참조할 수 있는 타입” 이다.

즉, 어떤 매개변수를 받고 어떤 값을 반환하는지가 동일한 메서드만 연결할 수 있다.

델리게이트 선언

델리게이트는 delegate 키워드를 사용해 선언한다.

public delegate void SimpleDelegate();

위 델리게이트는 반환값이 없고 매개변수가 없는 메서드만 참조할 수 있다.

델리게이트 사용 방법

델리게이트에는 메서드의 실행이 아닌 참조를 할당한다.

void PrintLog()
{
    Debug.Log("Hello");
}

SimpleDelegate myDelegate = PrintLog;
myDelegate();

메서드 이름 뒤에 ()를 붙이지 않는 이유는 즉시 실행이 아니라, 나중에 실행하기 위한 연결이기 때문이다.

매개변수가 있는 델리게이트 델리게이트는 매개변수도 가질 수 있다.

public delegate void DamageDelegate(int damage);

void TakeDamage(int damage)
{
    Debug.Log(damage);
}

DamageDelegate onDamage = TakeDamage;
onDamage(10);

델리게이트에 연결된 메서드는 선언 시 정의한 시그니처와 반드시 동일해야 한다.

델리게이트를 사용하는 이유

델리게이트를 사용하면
호출하는 쪽과 실행되는 로직을 분리할 수 있다.

버튼은 눌렸다는 사실만 알리기에 실제 동작은 외부에서 결정

이 구조를 통해 결합도가 낮아지고, 확장성과 유지보수가 좋아진다.

Action과 Func

C#에서는 자주 사용하는 델리게이트를
미리 정의해 둔 타입을 제공한다.

Action

반환값이 없는 델리게이트이다.

Action onClick;
Action<int> onDamage;

Func

반환값이 있는 델리게이트이다.

Func<int, bool> isAlive;

마지막 타입이 반환값을 의미한다.

delegate와 event의 차이

델리게이트는 외부에서 직접 호출할 수 있다는 문제가 있다.
이를 보완하기 위해 event 키워드를 사용한다.

delegate는 외부에서 Invoke 가능 event는 외부에서 Invoke 불가능 등록과 해제만 허용

0개의 댓글