UE - TBaseStaticDelegateInstance

2024. 8. 4. 03:04Unreal Engine

TBaseStaticDelegateInstance는 언리얼 엔진에서 델리게이트(Delegate)를 구현하는 데 사용되는 템플릿 클래스 중 하나입니다. 델리게이트는 함수 포인터와 비슷하게, 함수 호출을 다른 객체로 위임할 수 있는 기능을 제공합니다. 언리얼 엔진에서는 다양한 종류의 델리게이트를 제공하며, TBaseStaticDelegateInstance는 그 중 하나로, 정적 함수나 전역 함수에 대한 델리게이트 인스턴스를 나타냅니다.

주요 특징

  • 정적 함수 전용: TBaseStaticDelegateInstance는 정적 함수나 전역 함수에만 사용할 수 있습니다. 멤버 함수에 대해서는 다른 종류의 델리게이트가 사용됩니다.
  • 메모리 효율성: 정적 함수의 주소만 저장하므로 메모리 사용이 매우 효율적입니다.
  • 구현의 기초: 언리얼 엔진의 다양한 델리게이트 시스템 구현에서 기초가 되는 구성 요소입니다.

델리게이트의 구조

언리얼 엔진의 델리게이트 시스템은 여러 종류의 델리게이트를 제공하며, 각각의 델리게이트는 TBaseDelegate를 기반으로 구현됩니다. TBaseStaticDelegateInstance는 그 중에서도 정적 함수 전용 델리게이트를 구현하는 클래스입니다.

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "CoreMinimal.h"
#include "MyStaticDelegateExample.generated.h"
 
// 델리게이트 선언
DECLARE_DELEGATE(FMyStaticDelegate)
 
// 정적 함수
static void MyStaticFunction()
{
    UE_LOG(LogTemp, Log, TEXT("MyStaticFunction called."));
}
 
UCLASS()
class MYGAME_API AMyStaticDelegateExample : public AActor
{
    GENERATED_BODY()
 
public:
    AMyStaticDelegateExample();
 
    virtual void BeginPlay() override;
 
private:
    FMyStaticDelegate StaticDelegate;
};
 
AMyStaticDelegateExample::AMyStaticDelegateExample()
{
}
 
void AMyStaticDelegateExample::BeginPlay()
{
    Super::BeginPlay();
 
    // 델리게이트에 정적 함수 바인딩
    StaticDelegate.BindStatic(&MyStaticFunction);
 
    // 델리게이트 호출
    StaticDelegate.ExecuteIfBound();
}
cs

델리게이트 시스템의 작동 원리

  1. 델리게이트 선언: DECLARE_DELEGATE 매크로를 사용하여 델리게이트를 선언합니다. 이 예제에서는 인자가 없는 정적 델리게이트를 선언했습니다.
  2. 델리게이트 바인딩: BindStatic 메서드를 사용하여 델리게이트에 정적 함수를 바인딩합니다.
  3. 델리게이트 호출: ExecuteIfBound 메서드를 통해 델리게이트에 바인딩된 함수를 호출합니다.

유사한 델리게이트

언리얼 엔진은 다양한 델리게이트 타입을 제공하여 다양한 상황에 맞는 함수 호출을 지원합니다:

  • TBaseRawDelegateInstance: 멤버 함수에 대한 델리게이트를 구현하며, 직접적인 함수 포인터로 멤버 함수를 호출합니다.
  • TBaseSPMethodDelegateInstance: 스마트 포인터 기반 객체의 멤버 함수에 대한 델리게이트를 구현합니다.
  • TBaseUObjectDelegateInstance: UObject 기반 객체의 멤버 함수에 대한 델리게이트를 구현합니다.

 

TBaseStaticDelegateInstance는 정적 함수나 전역 함수에 대한 델리게이트를 구현하는 언리얼 엔진의 기본 구성 요소입니다. 메모리 사용이 효율적이며, 주로 전역 함수나 정적 함수에 대한 콜백을 설정하는 데 사용됩니다. 언리얼 엔진의 다양한 델리게이트 시스템 중 하나로, 델리게이트의 종류에 따라 다양한 바인딩 및 호출 방법을 지원합니다.

 

FDefaultDelegateUserPolicy는 언리얼 엔진에서 델리게이트(delegate) 시스템의 정책을 정의하는 데 사용되는 기본 클래스 중 하나입니다. 델리게이트는 언리얼 엔진에서 함수 호출을 객체에 위임할 수 있는 기능으로, 이벤트 기반 프로그래밍이나 콜백 메커니즘을 구현하는 데 사용됩니다. FDefaultDelegateUserPolicy는 이러한 델리게이트의 동작을 제어하는 기본적인 정책을 제공합니다.

 

TBaseStaticDelegateInstance<RetValType(ParamTypes...), UserPolicy, VarTypes...>는 언리얼 엔진의 델리게이트 시스템에서 정적 함수에 대한 델리게이트를 구현하는 데 사용되는 템플릿 클래스입니다. 이 클래스는 델리게이트의 다양한 특성과 정책을 정의할 수 있도록 여러 개의 템플릿 매개변수를 사용하여 유연한 델리게이트 인스턴스를 제공합니다.

템플릿 매개변수 설명

  • RetValType(ParamTypes...): 델리게이트가 가리키는 함수의 시그니처를 정의합니다.
    • RetValType: 함수의 반환 타입입니다.
    • ParamTypes...: 함수가 받을 인자들의 타입입니다. 여러 개의 인자를 사용할 수 있습니다.
  • UserPolicy: 델리게이트의 바인딩 및 호출 정책을 결정하는 정책 클래스입니다. 보통 FDefaultDelegateUserPolicy가 사용됩니다.
  • VarTypes...: 가변 인자 목록을 정의합니다. 함수가 가변 인자를 받을 수 있는 경우에 사용됩니다.

역할 및 기능

  • 정적 함수 바인딩: 이 클래스는 정적 함수에 대한 바인딩을 제공합니다. 이는 객체 인스턴스 없이 함수 포인터를 통해 함수를 호출할 수 있게 합니다.
  • 정책 적용: UserPolicy를 통해 델리게이트의 다양한 정책을 정의하여 델리게이트의 동작을 제어할 수 있습니다.
  • 가변 인자 처리: VarTypes...를 통해 가변 인자를 처리할 수 있습니다. 이는 printf와 같은 가변 인자를 사용하는 함수에 유용합니다.
  •  

UserPolicy - FDefaultDelegateUserPolicy

FDefaultDelegateUserPolicy는 주로 메모리 관리 및 델리게이트 바인딩 해제 시점을 정의하는 데 사용됩니다. 이 클래스는 델리게이트 시스템의 기본 동작을 규정하는데, 주로 다음과 같은 역할을 수행합니다:

  1. 기본 바인딩 정책: 델리게이트의 기본 바인딩 및 해제 정책을 정의합니다.
  2. 안전한 호출 보장: 바인딩된 객체가 유효하지 않을 때 델리게이트 호출을 막아 안전성을 보장합니다.
  3. 참조 카운팅 및 라이프사이클 관리: 델리게이트와 관련된 객체의 생명 주기를 관리합니다.

델리게이트 정책의 종류

언리얼 엔진의 델리게이트 시스템은 다양한 정책을 통해 델리게이트의 동작을 제어할 수 있습니다. FDefaultDelegateUserPolicy는 이러한 정책들 중 하나로, 기본적인 동작을 정의하지만 다른 사용자 정책을 정의할 수도 있습니다.

  • FGameThreadDelegatePolicy: 게임 스레드에서만 델리게이트가 호출되도록 보장합니다.
  • FMulticastDelegateUserPolicy: 멀티캐스트 델리게이트에 대한 사용자 정책을 정의합니다.
  • FWeakObjectPtrDelegatePolicy: TWeakObjectPtr을 통해 객체의 유효성을 검사하여 델리게이트 호출 여부를 결정합니다.