언리얼 엔진에서는 다양한 템플릿 클래스와 컨테이너 라이브러리를 제공하여 성능 최적화와 안정성을 확보하면서도 유연한 데이터 관리를 가능하게 합니다.
언리얼 엔진은 C++의 기본 템플릿 기능을 활용하면서도 안정성과 최적화를 고려한 자체적인 템플릿 클래스를 제공합니다.
템플릿 클래스 | 설명 |
---|---|
TSubclassOf<T> | 특정 클래스 유형(T)의 서브클래스를 저장하는 안전한 방법 제공 |
TWeakObjectPtr<T> | 약한 참조(Weak Pointer)로 가비지 컬렉션(GC)과의 호환성 보장 |
TSharedPtr<T> | std::shared_ptr 와 유사한 스마트 포인터로, 참조 카운팅 기반 메모리 관리 |
TUniquePtr<T> | std::unique_ptr 와 유사하게, 단일 소유권을 갖는 스마트 포인터 |
TOptional<T> | 값이 있을 수도 있고 없을 수도 있는 옵션형 데이터 |
TFunction<T> | 람다 및 일반 함수 포인터를 저장하는 함수 래퍼 |
TArrayView<T> | 기존 배열 데이터를 복사 없이 참조할 수 있도록 하는 뷰(View) |
언리얼 엔진은 자체적으로 최적화된 컨테이너 클래스를 제공하여, 기본 C++ STL 컨테이너보다 엔진 환경에 더 적합한 데이터 구조를 사용할 수 있도록 합니다.
컨테이너 클래스 | 설명 |
---|---|
TArray<T> | 동적 배열 (Vector) |
TSet<T> | 중복을 허용하지 않는 해시 기반 집합 (Set) |
TMap<KeyType, ValueType> | Key-Value 구조의 해시 맵 (Map) |
TPair<T1, T2> | 두 개의 값을 한 쌍으로 저장하는 구조체 |
TQueue<T> | FIFO(선입선출) 큐 |
TDeque<T> | 양방향 큐 (덱, Deque) |
TCircularBuffer<T> | 고정 크기의 원형 버퍼 |
TArray<T>
예제TArray<int32> Numbers;
Numbers.Add(10);
Numbers.Add(20);
Numbers.Add(30);
// 배열의 모든 요소 출력
for (int32 Number : Numbers)
{
UE_LOG(LogTemp, Warning, TEXT("Number: %d"), Number);
}
비교 항목 | 언리얼 컨테이너 (TArray , TMap , etc.) | C++ STL 컨테이너 (std::vector , std::map , etc.) |
---|---|---|
가비지 컬렉션 | GC 친화적이며, UObject 와 함께 사용 가능 | 기본적으로 GC 미지원 |
성능 최적화 | 게임 엔진 환경에 맞게 최적화됨 | 범용적이지만, 게임 개발에 최적화되지는 않음 |
에디터 기능 지원 | UProperty 시스템과 호환 가능 | 언리얼 에디터에서 직접 노출 불가능 |
사용 편의성 | Blueprint 및 Reflection 시스템과 연계 가능 | 기본적인 C++ 템플릿 시스템만 지원 |
TSharedPtr
, TWeakObjectPtr
) 사용이 권장됨 💡 언리얼 엔진의 템플릿과 컨테이너를 잘 활용하면 더욱 안전하고 최적화된 게임 로직을 구성할 수 있습니다! 🚀