ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Unity | 델리게이트(Delegate)
    다시한번 개발자도전! 2026. 2. 24. 17:00

    1. 델리게이트란? 

    델리게이트는 말 그대로 '대리인'/

    • 보통 함수를 호출할 때는 함수이름()을 직접 부르지만,
    • 델리게이트를 사용시 "나 대신 이 함수들을 실행해줘"라고 대리인에게 명단을 넘겨주는 것과 같음.
    • 델리게이트는 메서드의주소(참조)를 저장하는 변수임. 즉, 함수를 변수처럼 주고받을 수 있게 해줌.

    2. 델리게이트의 특징 

    • 느슨한 결합 (Loose Coupling): 클래스 A가 클래스 B의 함수를 직접 알 필요 없이, 델리게이트만 호출하면 됨.
    • 개방-폐쇄 원칙 (OCP): 기존 코드를 수정하지 않고도 새로운 기능을 델리게이트 명단에 추가하는 것만으로 기능을 확장할 수 있음.
    • 이벤트 기반 프로그래밍: 스킬 쿨타임 종료, 아이템 획득 등 "사건"이 터졌을 때 알림을 보내는 용도로 최적임.

    3. 델리게이트 사용법 3단계

     1: 선언

    어떤 형태의 함수(리턴 타입, 파라미터)를 담을지 정함.

    // "리턴이 없고 string 인자를 하나 받는 함수"들을 담는 대리인 선언
    public delegate void MyDelegate(string message);
    
    //실제로 사용할 변수를 만듦.
    MyDelegate talker;

     

    2: 등록 및 호출

    함수를 연결하고 실행함.

    void Start() {
        talker = SayHello; // 함수 등록
        talker += SayBye;   // 함수 추가 등록 (멀티캐스트)
        
        talker("반가워!"); // 대리인 호출 (등록된 모든 함수 실행)
    }
    
    void SayHello(string msg) => Debug.Log("안녕: " + msg);
    void SayBye(string msg) => Debug.Log("잘가: " + msg);

     


    4. 액션(Action)과 펑션(Func)

    1 : 액션 

    리턴값이 없는 델리게이트.

    // 1. 델리게이트(Action) 선언
        public Action<int> onGoldChanged;
    
        void Start()
        {
            onGoldChanged += UpdateGoldUI;
            
            // 3. 실행 (Invoke)
            onGoldChanged?.Invoke(100);
        }
    
        // Action<int>와 형식이 똑같은 메서드를 만듦
        void UpdateGoldUI(int goldAmount)
        {
            Debug.Log($"{goldAmount} 골드를 획득.");
        }

     

    2 : 펑션(Func)

     

    리턴값이 있는 델리게이트

     

    // <입력, 리턴> 타입의 Func 선언
        public Func<int, int> onDouble;
    
        void Start()
        {
            onDouble += GetDouble;
    
            // 실행 후 결과 받기
            int result = onDouble(10);
            Debug.Log($"결과값: {result}"); // 20 출력
        }
    
        // Func<int, int>와 형식이 똑같은 메서드
        int GetDouble(int number)
        {
            return number * 2;
        }

     

Designed by Tistory.