이벤트는 콜백을 구현하기 위해 사용한다.
가장 큰 특징으로는 외부에서는 구독만 가능하고 이벤트를 호출 할 수 있는건 해당 이벤트를 가진 클래스만 가능하다는 것이다.
public event Action OnEvent;
void Trigger()
{
OnEvent?.Invoke();
}
외부에서는 += 을 사용해 구독을 하며 내부에서 Invoke를 사용해 실행한다.
델리게이트는 함수를 타입화한것이다. 이는 c++의 함수 포인터와 비슷하다.
델리게이트는 파라미터와 리턴 타입을 정의한다.
델리게이트를 메소드를 담아두는 역할을 하거나 함수의 인자로 넘겨 콜백을 구현한다.
public delegate void MyDelegate();
void CallDelegate(MyDelegate d)
{
d?.Invoke();
}
위 코드는 인자로 받은 MyDelegate함수를 실행한다.
public UnityAction onClick;
void Trigger()
{
onClick?.Invoke();
}
UnityAction은 Unity에서 delegate와 event를 확장해서 만든 편의 클래스이다.
UnityAction은 Unity 코드 안에서 delegate처럼 쓰고 싶을 때 사용한다.
특히 UnityAction은 UnityEvent와 호환 된다.