백지부터 시작하는 이세계 코딩 생활
Delegate 와 Event (키워드) 본문
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