[Unity] 델리게이트(Delegate)

Gee·2025년 2월 28일

Delegate?

델리게이트(Delegate)는 메서드를 변수처럼 저장하고 호출할 수 있는 참조 타입이다.
어떤 메서드를 대신 호출할 수 있는 포인터 역할을 한다.

int x = 10; 이건 변수를 선언하는 방법
public void PopUp() {} 이건 함수를 선언하는 방법
delegate void PopUp(); 이건 델리게이트를 선언하는 방법

델리게이트의 구성은 함수와 유사하다.
delegate 반환형 델리게이트이름(매개변수); 이런 구조를 가진다.

Delegate 사용법

예를 들어 팝업 창을 여러 개 만든다고 생각해 보자.

팝업 1: '게임을 시작하겠습니까?'/ 아니오
팝업 2: '전투를 시도하시겠습니까?'/ 아니오
팝업 3: '게임을 종료하시겠습니까?'/ 아니오

각 팝업 창에 예 / 아니오 버튼이 있는 건 동일하지만, 저마다 실행되는 기능은 다를 것이다.

// 팝업 1
void PopUpConfirm()
{
    StartGame();
}

// 팝업 2
void PopUpConfirm()
{
    Battle();
}

// 팝업 3
void PopUpConfirm()
{
    QuitGame();
}

같은 PopUpConfirm 함수지만 그 안에 실행될 기능이 다르다.
해당 팝업별로 클래스를 만들어 관리해 줄 수도 있지만, 팝업 창이 10개라면? 100개라면? 일일이 설정해 줘야 한다. 너무 번거롭다.
이럴 때 사용하는 게 델리게이트다.

class UIPopUp
{
    public delegate void PopupConfirmFunc();

    public void PopUpConfirm(PopupConfirmFunc confirmAction)
    {
        confirmAction();
    }
}

이렇게 해주면 함수의 매개변수로 변수를 넘기듯이 델리게이트를 넘겨줄 수 있다.
(PopupConfirmFunc confirmAction) 안에는 StartGame();, Battle();, QuitGame();이 들어갈 수 있는 것이다.
이러면 각 팝업별로 클래스를 만들 필요도, 함수를 따로 만들 필요도 없다.
UIPopUp을 모두 동일하게 사용할 수 있다. 인자값으로 필요한 델리게이트만 넘기면 되는 것.
이런 식으로 필요한 기능을 별도로 구현해두지 않고 전달 받은 기능만 실행하도록 여러 상황에 대응할 수 있는 걸 위임이라고 한다.

profile
...

0개의 댓글