Blog

ENGINEERING NOTE

[Unreal Engine] 템플릿 메소드 패턴

해당 포스팅은 Stuart Butler , Tom Oliver의 Game Development Patterns with Unreal Engine 5를 바탕으로 작성한 내용입니다.템플릿 메소드(Template Method) 패턴은 알고리즘의 전체 흐름(뼈대)은 상위 추상

Unreal Engine
해당 포스팅은 Stuart Butler , Tom Oliver의 Game Development Patterns with Unreal Engine 5를 바탕으로 작성한 내용입니다.

템플릿 메소드(Template Method) 패턴이란?

템플릿 메소드(Template Method) 패턴은 알고리즘의 전체 흐름(뼈대)은 상위 추상 부모 클래스에서 정의하고, 그중 일부 단계의 구현만을 하위 자식 클래스에서 재정의하도록 하는 행동 패턴이다.

즉,

전체 흐름은 고정하고, 세부 동작만 변경한다

라고 할 수 있다.

템플릿 메소드 패턴 예시

cpp
// 상위 부모 클래스
class ABaseCharacter : public AActor
{
protected:
    virtual void BeginPlay() override
    {
        Super::BeginPlay();

        SetupCharacter();
        SetupAbilities();
        SetupUI();
    }

    // 템플릿 메소드의 "확장 지점(Hook)"
    virtual void SetupCharacter() {}
    virtual void SetupAbilities() {}
    virtual void SetupUI() {}
};
BeginPlay()

→ 알고리즘의 뼈대(Template Method) → 실행 순서는 절대 변경되지 않음

cpp
// 자식 클래스 (구현부)
class APlayerCharacter : public ABaseCharacter
{
protected:
    virtual void SetupCharacter() override
    {
        UE_LOG(LogTemp, Log, TEXT("Player Character Setup"));
    }

    virtual void SetupAbilities() override
    {
        UE_LOG(LogTemp, Log, TEXT("Player Abilities Setup"));
    }

    virtual void SetupUI() override
    {
        UE_LOG(LogTemp, Log, TEXT("Player UI Setup"));
    }
};

BlueprintNativeEvent / BlueprintImplementableEvent

템플릿 메소드 패턴을 Unreal Engine에서는 두가지 이벤트 함수를 통해 쉽게 적용이 가능하다.

BlueprintNativeEvent

BlueprintNativeEvent는 C++에서 기본 구현을 제공하면서, 필요하다면 Blueprint에서 동작을 확장하거나 덮어쓸 수 있는 이벤트이다.

cpp
UFUNCTION(BlueprintNativeEvent)
void OnDead();

_Implementation() 함수로 기본 동작 정의한다.

cpp
void AMyCharacter::OnDead_Implementation()
{
    UE_LOG(LogTemp, Log, TEXT("Default C++ OnDead Logic"));
}
  • Blueprint에서는 선택적으로 오버라이드 가능

BlueprintImplementableEvent

BlueprintImplementableEvent는 구현을 전적으로 Blueprint에 위임하는 이벤트이다.

cpp
UFUNCTION(BlueprintImplementableEvent)
void OnDead();
  • C++에서는 구현 불가
  • Blueprint에서만 구현 가능