언리얼 컴포지션이란?
언리얼 컴포지션은
객체 지향 설계의 핵심 개념 중 하나인
Composition (컴포지션)을 언리얼 엔진에서 구현하는 방법을 의미한다.
이는 단순한 상속(Inheritance, Is-A 관계)만으로는 해결하기 어려운 복잡한 객체 설계 문제를,
Has-A 관계를 통해 해결하는 기법이다.
주요 개념
- Has-A 관계:
상속이 “~이다”라는 관계라면, 컴포지션은 “~을 가진다”라는 관계이다.
예를 들어,
게임 캐릭터가 여러 개의 컴포넌트(무기, 방어구, 스킬 등)를 갖는 경우,
이를 각각의 독립 객체로 구성해 관리할 수 있다. - 언리얼 엔진에서의 컴포지션 구현:
언리얼 엔진에서는 UObject 기반의 오브젝트를 조합하여 복잡한 객체를 구성하는데,
이를 위해 두 가지 주요 방법을 사용한다.- 필수적 포함:
생성자에서 CreateDefaultSubobject() 함수를 이용해
클래스 기본 객체(CDO)에 미리 서브 오브젝트를 생성해 포함시키는 방식이다.
예를 들어, 캐릭터의 Mesh나 기본 컴포넌트는 항상 포함되어야 하므로 이 방법을 사용한다. - 선택적 포함:
CDO에는 빈 포인터만 두고, 필요할 때 런타임에 NewObject()를 호출해 오브젝트를 생성하는 방식이다.
- 필수적 포함:
- Subobject와 Outer:
언리얼에서 컴포지션 관계를 맺을 때,
자신이 소유한 오브젝트를 Subobject라 하고,
반대로 자신을 소유하는 오브젝트를 Outer라 부른다.
이 관계를 통해 오브젝트 간의 생명주기와 메모리 관리가 체계적으로 이루어진다. - 전방선언과 포인터 관리:
컴포지션 관계를 설정할 때
헤더 파일 간의 의존성을 줄이기 위해 전방 선언을 사용하며,
언리얼 엔진 5부터는 원시 포인터 대신 TObjectPtr을 사용하여 관리하는 것이 권장된다. - UENUM과 UMETA:
열거형 타입을 확장하여 메타 정보를 부여할 때,
UENUM()과 UMETA() 매크로를 사용한다.
이를 통해 디스플레이 이름 등 부가 정보를 코드 내에서 활용할 수 있다.
언리얼 컴포지션의 정의
- 객체 지향 설계에서 상속 대신 컴포지션(Has-A 관계)을 활용하여
복잡한 객체를 유연하고 유지보수하기 쉽게 설계하는 방법이다. - 언리얼 엔진에서는
CreateDefaultSubobject()나 NewObject()를 통해 오브젝트를 조합하며,
소유 관계(Outer/Subobject)와 전방 선언,
그리고 TObjectPtr 등을 활용해 효율적인 메모리 관리와 의존성 감소를 실현한다. - 또한, UENUM()과 UMETA()를 통해 열거형에 메타 데이터를 추가하여
개발자가 보다 직관적으로 디버깅 및 데이터 관리를 할 수 있게 돕는다.
이러한 기법은 게임의 복잡한 객체들을 체계적으로 구성하고,
확장성과 유지보수성을 높이는 데 큰 도움이 된다.
'UE5' 카테고리의 다른 글
언리얼 오브젝트 리플렉션 시스템 (0) | 2025.03.18 |
---|---|
언리얼 문자열 처리 FString과 FName, FText 사용 이유 (0) | 2025.03.08 |
Unreal Object Handling (3) | 2024.12.19 |
언리얼 내부 - 모듈 (Modules) 2 (0) | 2024.11.25 |
언리얼 내부 - 모듈 (Modules) (0) | 2024.11.25 |