해당 포스팅은 Stuart Butler , Tom Oliver의 Game Development Patterns with Unreal Engine 5를 바탕으로 작성한 내용입니다.
서브클래스 샌드박스(Subclass Sandbox) 패턴이란?
서브클래스 샌드박스(Subclass Sandbox) 패턴은 상위 부모 클래스가 전체 흐름과 핵심 상태 변경을 통제하고, 하위 자식 클래스는 제한된 인터페이스(샌드박스) 안에서 필요한 동작 요청만을 정의하도록 하는 설계 패턴이다.
즉,
세부적인 동작은 상위 클래스에서 제공하며, 전체적은 흐름은 자식 클래스에서 정의한다.
서브클래스 샌드박스 패턴 예시
cpp
// 상위 부모 클래스 (Sandbox Provider)
class ABaseCharacter : public AActor
{
protected:
virtual void BeginPlay() override
{
Super::BeginPlay();
// 자식에게 모든 제어권을 위임
Play();
}
// Subclass Sandbox의 핵심 메소드
virtual void Play() = 0;
/* =========================
Sandbox API (제한된 도구)
========================= */
void InitCharacterMesh()
{
UE_LOG(LogTemp, Log, TEXT("Init Character Mesh"));
}
void InitDefaultAbilities()
{
UE_LOG(LogTemp, Log, TEXT("Init Default Abilities"));
}
void InitPlayerUI()
{
UE_LOG(LogTemp, Log, TEXT("Init Player UI"));
}
void InitEnemyUI()
{
UE_LOG(LogTemp, Log, TEXT("Init Enemy UI"));
}
};- 부모는 무엇을 할 수 있는지만 정의함.- 어떻게 조합할지는 절대 관여하지 않음.
cpp
// 자식 클래스 (Sandbox User)
class APlayerCharacter : public ABaseCharacter
{
protected:
virtual void Play() override
{
// 자식이 순서와 조합을 직접 결정
InitCharacterMesh();
InitDefaultAbilities();
InitPlayerUI();
UE_LOG(LogTemp, Log, TEXT("Player Character Ready"));
}
};cpp
class AEnemyCharacter : public ABaseCharacter
{
protected:
virtual void Play() override
{
InitCharacterMesh();
InitDefaultAbilities();
InitEnemyUI();
UE_LOG(LogTemp, Log, TEXT("Enemy Character Ready"));
}
};