반응형
TArray는 언리얼 엔진에서 제공하는 가장 대표적인 배열 컨테이너입니다. std::vector
와 유사하며, 추가/삭제/검색이 매우 간편해 다양한 게임 시스템에 활용됩니다. 이 글에서는 TArray
의 기본 사용법부터 주의사항까지 초보자 기준으로 정리합니다.
1. TArray 기본 사용법 (추가, 삭제)
TArray<int32> Scores;
Scores.Add(100);
Scores.Add(200);
Scores.Insert(150, 1);
Scores.Remove(100);
Scores.RemoveAt(0);
Scores.Empty();
int32 Count = Scores.Num();
주의: RemoveAt() 사용 시 반드시 IsValidIndex
로 유효성 체크를 먼저 해야 합니다.
2. TArray 검색 방법 다양하게
TArray<FString> Names = { TEXT("Alice"), TEXT("Bob"), TEXT("Charlie") };
bool bHasBob = Names.Contains(TEXT("Bob"));
int32 Index = Names.IndexOfByKey(TEXT("Charlie"));
FString* Found = Names.Find(TEXT("Bob"));
if (Found)
{
UE_LOG(LogTemp, Log, TEXT("찾음: %s"), **Found);
}
FString* LongName = Names.FindByPredicate([](const FString& Name) {
return Name.Len() > 5;
});
if (LongName)
{
UE_LOG(LogTemp, Log, TEXT("긴 이름: %s"), **LongName);
}
3. TArray 사용 시 주의사항
- 잘못된 인덱스 접근:
IsValidIndex
로 항상 확인 - NULL 포인터 역참조:
Find()
후에는 항상 null 체크 - Remove() 반복문 사용 금지:
RemoveAll
또는--Index
로 인덱스 조정 필요
// 안전한 인덱스 접근 예시
if (Scores.IsValidIndex(5))
{
int32 SafeValue = Scores[5];
}
4. UObject 포인터를 TArray에 담을 때 주의점
TArray<UObject*>
같은 배열을 사용할 경우, 가비지 컬렉션(GC) 추적을 위해 반드시 UPROPERTY()
와 함께 선언해야 합니다.
// 예: UObject 포인터 배열
UPROPERTY()
TArray<UActorComponent*> ComponentArray;
void AddToArray(UActorComponent* Comp)
{
if (Comp)
{
ComponentArray.Add(Comp);
}
}
또한 사용 시에는 항상 IsValid()
로 유효성 확인이 필요합니다.
5. FindByPredicate 사용 시 더블 포인터 반환 처리
TArray<UObject*>
에서 FindByPredicate
를 사용할 경우, 반환 타입은 더블 포인터(예: UObject**
)가 됩니다. 이를 올바르게 사용하는 예시는 다음과 같습니다:
// MyActorComponent.h
UPROPERTY()
TArray<UActorComponent*> ComponentArray;
UActorComponent** FoundComp = ComponentArray.FindByPredicate([](UActorComponent* Comp)
{
return Comp && Comp->GetName().Contains(TEXT("Health"));
});
if (FoundComp && *FoundComp)
{
UE_LOG(LogTemp, Log, TEXT("찾은 컴포넌트: %s"), *(*FoundComp)->GetName());
}
설명:
FindByPredicate()
의 반환값은UActorComponent**
- 이중 역참조 시에는
*FoundComp
가 유효한지 먼저 체크하고,**FoundComp
또는(*FoundComp)->
로 접근해야 함
결론
TArray
는 언리얼에서 가장 활용도가 높은 컨테이너입니다. 특히 UObject*
를 담는 배열에서는 UPROPERTY()
선언과 유효성 체크, 더블 포인터 처리 등 고유한 주의사항이 따릅니다. FindByPredicate()
사용 시에는 T**
반환 타입을 정확히 이해하고 다루는 것이 중요합니다.
🔗 공식 문서
반응형
'Unreal Engine' 카테고리의 다른 글
언리얼 엔진 UMG C++ 연동 가이드 (BindWidget, Optional, Anim 완전정복) (0) | 2025.05.07 |
---|---|
언리얼 TMap 완전정복 (기본, 검색, 삭제, Struct 키 예제까지) (0) | 2025.05.07 |
언리얼 블루프린트 vs C++ 뭐가 더 좋을까? (초보 개발자 필독 비교 가이드) (1) | 2025.05.06 |
Paused 상태에서도 Tick이 가능? (FTickableGameObject 활용법, Tick 우회, 게임정지 대응) (2) | 2025.05.06 |
Unreal Engine iOS에서 LaunchURL 동작 오류 대응 가이드 (iOS 18 대응) (0) | 2025.05.05 |