* 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개인 이벤트를 만든다. |
- 바인딩
멀티캐스트 바인딩 방식과 동일하다.
- 실행
멀티캐스트 바인딩 방식과 동일하다.
'게임 엔진 > Unreal Engine' 카테고리의 다른 글
| [UnrealEngine] 개발에 필요한 내용 간단 정리 (2) | 2022.10.04 |
|---|---|
| [UnrealEngine] Delegate (0) | 2022.03.30 |
| [UnrealEngine] UObject 시스템(UObject System) (0) | 2022.03.30 |
| [UnrealEngine] UObject (0) | 2022.03.30 |
| [UnrealEngine] 속성 지정자(Property Specifiers) (0) | 2022.03.29 |