event vs delegate vs UnityAction

김효중·2025년 4월 22일

Event

이벤트는 콜백을 구현하기 위해 사용한다.
가장 큰 특징으로는 외부에서는 구독만 가능하고 이벤트를 호출 할 수 있는건 해당 이벤트를 가진 클래스만 가능하다는 것이다.

public event Action OnEvent;

void Trigger()
{
    OnEvent?.Invoke();
}

외부에서는 += 을 사용해 구독을 하며 내부에서 Invoke를 사용해 실행한다.

delegate

델리게이트는 함수를 타입화한것이다. 이는 c++의 함수 포인터와 비슷하다.
델리게이트는 파라미터와 리턴 타입을 정의한다.
델리게이트를 메소드를 담아두는 역할을 하거나 함수의 인자로 넘겨 콜백을 구현한다.

public delegate void MyDelegate();

void CallDelegate(MyDelegate d)
{
    d?.Invoke();
}

위 코드는 인자로 받은 MyDelegate함수를 실행한다.

UnityAction

public UnityAction onClick;

void Trigger()
{
    onClick?.Invoke();
}

UnityAction은 Unity에서 delegate와 event를 확장해서 만든 편의 클래스이다.
UnityAction은 Unity 코드 안에서 delegate처럼 쓰고 싶을 때 사용한다.
특히 UnityAction은 UnityEvent와 호환 된다.

각 사용처

  • delegate: 단순 콜백이나 함수 전달이 필요할 때
  • event: 여러 객체가 관찰자(observer) 패턴으로 반응해야 할 때
  • UnityAction: Unity 코드 안에서 delegate처럼 쓰고 싶을 때
profile
도전하는 개발자

0개의 댓글