* Dynamic Delegate

 

- 정의

 

다이나믹 델리게이트는 직렬화될 수 있고 리플렉션을 지원하는 델리게이트이다. 함수들을 이름으로 찾기 때문에 일반적인 델리게이트보다 느리다.

 

 

- 선언

 

일반적인 델리게이트와 비슷하게 선언된다. 다만 매크로의 종류만 조금 다르다.

다이나믹 델리게이트 타입 선언 매크로
설명
DECLARE_DYNAMIC_DELEGATE[_RetVal, ...]( DelegateName ) 다이나믹 델리게이트 타입을 만든다.
DECLARE_DYNAMIC_MULTICAST_DELEGATE[_RetVal, ...]( DelegateName ) 다이나믹 멀티캐스트 델리게이트 타입을 만든다.

 

 

- 바인딩

 

매크로를 통해 바인딩할 수 있다.

매크로 설명
BindDynamic( UserObject, FuncName ) 다이나믹 델리게이트에서 BindDynamic을 호출하는 매크로로 자동으로 함수 이름 문자열을 생성한다.
AddDynamic( UserObject, FuncName ) 다이나믹 멀티캐스트 델리게이트에서 AddDynamic을 호출하는 매크로로 자동으로 함수 이름 문자열을 생성한다.
RemoveDynamic( UserObject, FuncName ) 다이나믹 멀티캐스트 델리게이트에서 RemoveDynamic을 호출하는 매크로로 자동으로 함수 이름 문자열을 생성한다.

 

 

- 실행

 

일반적인 싱글캐스트 델리게이트 실행 방법과 동일하다.

 

 

* Multicast Delegate

 

- 정의

 

멀티캐스트 델리게이트는 여러 함수들에 바인딩할 수 있으며 한번에 모두 실행시키는 것이 가능하다.

 

싱글캐스트 델리게이트와 대부분 비슷한 특징을 가지고 있다. 멀티캐스트 델리게이트는 객체에 대해 약 참조만을 가지고 있으며 구조체와 함께 사용될 수 있으며 쉽게 복사될 수 있다.

 

일반적인 델리게이트와 같이 멀티캐스트 델리게이트는 로드 세이브 할 수 있고 원격으로 트리거할 수 있다. 하지만 멀티캐스트 델리게이트 함수들은 반환값을 가질 수 없다.

 

이벤트는 Broadcast, IsBound, Clear함수를 사용할 수 없는 멀티캐스트 델리게이트이다.

 

 

- 선언

 

일반적인 델리게이트와 비슷하게 선언된다. 다만 매크로의 종류만 조금 다르다.

멀티캐스트 델리게이트 타입 선언 매크로 설명
DECLARE_MULTICAST_DELEGATE[_RetVal, ...]( DelegateName ) 멀티캐스트 델리게이트 타입을 만든다.
DECLARE_DYNAMIC_MULTICAST_DELEGATE[_RetVal, ...]( DelegateName ) 다이나믹 멀티캐스트 델리게이트 타입을 만든다.

 

 

- 바인딩

 

함수 설명
Add() 멀티캐스트 델리게이트 호출 목록에 함수를 추가한다.
AddStatic() 전역 생 함수 포인터를 추가한다.  Adds a raw C++ pointer global function delegate.
AddRaw()  포인터를 추가한다. 생 포인터는 어떤 참조도 사용하지 않기 때문에 삭제된 객체에 대해 Execute를 안전하게 사용할 수 없다.
AddSP() 공유 포인터 기반 멤버 함수를 추가한다. 스레드 세이프하지 않다. 공유 포인터 델리게이트는 바인딩한 객체를 약 참조로 관리한다.
AddUObject() UObject 멤버 함수를 추가한다. UObject 델리게이트는 해당 UObject를 약 참조로 관리한다.
Remove() 멀티캐스트 델리게이트 호출 목록에서 제거한다. 성능은 O(n)이며 순서는 보존되지 않는다.
RemoveAll() 멀티캐스트 델리게이트 호출 목록에서 모든 함수를 제거한다. 순서는 보존되지 않는다.
객체 포인터로 바인딩되지 않은 함수는 삭제되지 않는다.

 

 

- 실행

 

Broadcast를 통해 멀티캐스트 델리게이트에 등록된 만료된 것을 제외한 모든 함수를 호출할 수 있다. 바인딩되지 않아도 항상 안전하다. 순서가 보존되지 않기 때문에 어떤 함수가 먼저 호출될 지 모른다.

 

 

* Event

 

- 정의

 

이벤트는 멀티캐스트 델리게이트와 매우 비슷하며 어떤 클래스도 이벤트를 바인드할 수 있지만 이벤트를 선언한 클래스에서만 Broadcast, IsBound, Clear 함수를 사용할 수 있다.

 

외부에 노출되어도 위의 이벤트의 함수들을 호출할 수 없으며, 순수 추상 클래스에 콜백을 포함하고 있다.

 

 

- 선언

 

멀티캐스트 델리게이트와 비슷하게 선언된다. 다만 이벤트의 함수 호출을 제한하기 위해 소유자를 설정해야한다.

이벤트 타입 선언 매크로 설명
DECLARE_EVENT( OwningType, EventName ) 이벤트를 만든다.
DECLARE_EVENT_OneParam( OwningType, EventName, Param1Type ) 매개변수 1개인 이벤트를 만든다.
DECLARE_EVENT_TwoParams( OwningType, EventName, Param1Type, Param2Type ) 매개변수 2개인 이벤트를 만든다.
DECLARE_EVENT_<Num>Params( OwningType, EventName, Param1Type, Param2Type, ... ) 매개변수 N개인 이벤트를 만든다.

 

 

- 바인딩

 

멀티캐스트 바인딩 방식과 동일하다.

 

 

- 실행

 

멀티캐스트 바인딩 방식과 동일하다.

 

+ Recent posts