graph RL;
Delegate(C# Delegate)
Event(C# Event)
Action(C# Action)
UnityAction(Unity Action)
UnityEvent(Unity Event)
Delegate--->Event
Delegate--->Action
C#
Delegates
Delegates (C# Programming Guide)
- 하나의 형식(type)으로, 메서드에 대한 참조입니다.
- 인스턴스 메서드, 정적 메서드 모두 참조 가능합니다.
- 값이 아닌 코드 자체를 넘기고 싶을 때 사용할 수 있습니다.
- 콜백용도로 사용됩니다.
Event
이벤트는 클래스내에 특정한 일(event)이 일어났음을 외부의 이벤트 가입자들에게 알려주는 기능을 합니다. C#에서 이벤트는 event라는 키워드를 사용하여 표시합니다.
- delegate키워드를 event 한정자로 수식해서 만듭니다.
- delegate와의 차이는, event는 인터페이스 내부에 선언할 수 있지만, 델리게이트는 선언할 수 없습니다.
- public으로 선언되어 있어도, 자신이 선언되어 있는 클래스 외부에서 호출할 수 없습니다. 이는 이벤트 기반 프로그래밍에서 안정성을 추구하는 것으로, 클래스 외부에서 이벤트에 변화를 줄 수 없게 하기 위함입니다.
- 객체의 상태 변화, 사건의 발생을 알리는 용도입니다.
Action
반환 값이 없는 델리게이트입니다. 값을 반환하지 않는 메서드를 캡슐화합니다.
- 반환값이 필요없는 Event를 사용하고자 할 때 이용할 수 있습니다.
인자가 하나인 Action의 정의를 보면 다음과 같이 되어있습니다.
namespace System
{
[__DynamicallyInvokable]
public delegate void Action<in T>(T obj);
}
Func
- 반환값이 필요한 Event는 Func를 이용할 수 있습니다.
UnityAction
인수가 없는 델리게이트들입니다. Unity Actions를 사용하면 여러 함수를 동적으로 호출할 수 있습니다. Unity Actions에는 인수가 없으므로 호출하는 함수에도 인수가 없어야 합니다.
- Action은 반환값이 없는 메서드를 등록할 수 있는 델리게이트입니다.
UnityEvent
Event는 일반 C#과 달리 Editor에서 사용할 수 있또록 직렬화될 가능성이 있는 이벤트를 처리하는 또 다른 방법입니다.
- C#의 이벤트와 델리게이트를 유니티가 사용하기 편하도록 랩핑해놓은 것입니다.