본문 바로가기
Unreal Engine

언리얼 C++ TTuple 초보자 가이드 (복수 반환값, 안전 사용법, 실전 예제)

by 브랑제리 2025. 5. 8.
반응형

TTuple은 언리얼 엔진에서 여러 개의 데이터를 묶어서 한 번에 다루고 싶을 때 사용하는 템플릿 컨테이너입니다.
C++ 표준의 std::tuple과 유사하지만, 언리얼의 타입 시스템과 잘 통합되어 있으며 함수 반환값이나 간단한 데이터 묶음에 매우 유용합니다.

1. 기본 사용법

TTuple<int32, FString> UserData = MakeTuple(42, TEXT("PlayerOne"));

int32 ID = UserData.Get<0>();
FString Name = UserData.Get<1>();

UE_LOG(LogTemp, Log, TEXT("ID: %d, Name: %s"), ID, *Name);
  • MakeTuple() 함수로 초기화
  • Get<Index>() 방식으로 각 요소에 접근

2. 사용하기 좋은 상황

  • 여러 개의 값을 하나의 함수에서 반환하고 싶을 때
  • 결과와 상태 정보를 함께 리턴하고 싶을 때
  • 구조체를 만들기엔 과한 간단한 데이터 묶음이 있을 때
TTuple<bool, int32> CheckScore()
{
    bool bIsValid = true;
    int32 Score = 150;
    return MakeTuple(bIsValid, Score);
}

3. 예외 처리 및 주의사항

  • Get<Index>()를 잘못 쓰면 컴파일 오류 발생
  • 인덱스 기반이므로 가독성이 떨어질 수 있음
  • C++17의 구조 분해 할당(Structured Binding)은 UE에서 완전히 지원되지 않음

4. 함수 반환 타입으로 TTuple 사용해도 괜찮을까?

함수에서 여러 개의 값을 반환해야 할 때 TTuple은 매우 유용합니다.
다만 호출자는 반환되는 값의 개수와 타입을 정확히 알고 있어야 하므로 문서화 또는 명시적 변수명 사용이 중요합니다.

TTuple<bool, FString> TryGetName()
{
    return MakeTuple(true, TEXT("PlayerA"));
}

auto Result = TryGetName();
if (Result.Get<0>())
{
    UE_LOG(LogTemp, Log, TEXT("이름: %s"), *Result.Get<1>());
}

값의 개수가 유동적이라면 TArray, TMap, USTRUCT가 더 적합합니다.

결론

TTuple은 단순한 다중 값 반환 또는 전달이 필요할 때 매우 효과적인 도구입니다. 다만 인덱스 접근 방식은 실수하기 쉽고, 복잡한 데이터에는 구조체 사용이 더 안전할 수 있습니다.
함수 반환값이나 상태 결과 전달 등에서 TTuple을 적극 활용해 보세요.

🔗 공식 문서

TTuple 공식 문서 (Epic Games)

반응형