백지부터 시작하는 이세계 코딩 생활

Delegate 와 Event (키워드) 본문

백지부터 시작하는 이세계 유니티 생활 since 2020

Delegate 와 Event (키워드)

조아덕 2020. 12. 31. 16:22
Delegate

매서드를 담을 수 있는 변수타입을 뜻한다.
i.e) 매서드를 담을 수 있는 타입을 의미

델리게이트(Delegate) 이름의 끝에는 관례적으로 Delegate를 붙인다.
ex.) delegate void myDelegate(){ ... }
ex.) delegate 반환타입 델리게이트명(매개변수) { ... }

반환타입과 매개변수는 매서드의 반환타입과 매개변수 타입과 맞춰준다.

여러개의 매서드를 담을 수 있는 멀티캐스트(Multicast) 기능을 지원한다.
델리게이트에 매서드의 추가와 삭제는 각각 += 연산자와 -= 연산자를 사용한다.

Callback 기능을 사용할 때 매우 유용하다.

// 멀티캐스트 w.Delegate
using UnityEngine;

public class myTEMP : MonoBehaviour
{
    delegate void HumanDelegate();

    // Start is called before the first frame update
    void Start()
    {
        HumanDelegate humanDel = Descartes;
        humanDel += Arthas;
        humanDel += Illidan;

        humanDel();
    }

    private void Descartes()
    {
        print("cogito ergo sum");
    }

    private void Arthas()
    {
        print("Succeeding You, father.");
    }

    private void Illidan()
    {
        print("You are not prepared!");
    }
}

 

Event

Event (이벤트)는 Delegate (델리게이트)를 이용한 Callback (콜백)을 좀 더 기능적으로 만들어주는 키워드이다.

델리게이트 콜백에서, 델리게이트 변수를 넘겨주었던 과정까지 생략 가능 하다.

using UnityEngine;

delegate void myEventHandler();

public class myTEST2 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Subscriber sub = new Subscriber();
        Publisher pub = new Publisher();

        pub.RunEvent();
    }
}

class Publisher
{
    public static event myEventHandler myEvent;
    public void RunEvent()
    {
        if (myEvent != null)
        {
            myEvent();
        }
    }
}

class Subscriber
{
    public Subscriber()
    {
        Publisher.myEvent += DoSomething;
    }

    public void DoSomething()
    {
        Debug.Log("this is Do-Something Methode");
    }
}

 

'백지부터 시작하는 이세계 유니티 생활 since 2020' 카테고리의 다른 글

CompareTag 비교  (0) 2021.01.11
Preserve Aspect  (0) 2021.01.05
Animation State (Any State)  (2) 2020.12.29
LivingEntity  (0) 2020.12.28
OnPointerDown  (0) 2020.12.28
Comments