상세 컨텐츠

본문 제목

언리얼 C++ 기본 타입과 문자열 처리 정리

공부/C++

by micalcomanie 2025. 2. 21. 16:14

본문

728x90
반응형
SMALL

 

언리얼 엔진에서는 기본적인 C++ 데이터 타입을 직접 사용하는 대신, 보다 최적화된 자체 타입을 제공하여 성능과 호환성을 유지하고 있습니다. 특히, 문자열 처리는 게임 개발에서 중요한 요소 중 하나이며, 언리얼은 다양한 문자열 타입을 지원합니다. 이번 글에서는 언리얼 C++에서 사용되는 기본 타입과 문자열 처리 방식을 정리해 보겠습니다.


1. 언리얼의 기본 타입

C++의 기본 타입을 그대로 사용하는 대신, 언리얼 엔진은 다음과 같은 타입을 제공합니다.

1.1 정수형 (Integer)

  • int : 최소 32비트를 보장.
  • uint8, int16, int32, int64 : 명확한 크기를 지정하여 성능 최적화 가능.

Tip: 불명확한 크기의 데이터 타입 사용은 성능 저하를 초래할 수 있음.

1.2 논리형 (Boolean)

  • bool : C++의 bool과 같지만, 크기가 명확하지 않음.
  • uint8 : bit field 연산자를 사용하여 명확한 크기를 지정할 수 있음.
  • 헤더 파일에서는 bool 대신 uint8을 사용하는 것이 권장됨.

2. 언리얼의 문자열 처리

언리얼 엔진에서는 다양한 문자열 처리 방식을 제공합니다. 주로 사용되는 타입은 다음과 같습니다.

2.1 문자열 인코딩

  • UTF-8 : 가변 길이 인코딩 방식. 영문은 1바이트, 아시아 언어는 2바이트 이상.
  • UTF-16 : 모든 문자를 2바이트로 저장. 메모리 사용량이 더 많지만 빠른 접근이 가능.
  • 언리얼 엔진은 내부적으로 UTF-16을 사용하여 유니코드를 지원.
  • 소스 코드에서 한글을 저장해야 한다면 UTF-8 방식으로 저장하는 것이 좋음.

2.2 TCHAR와 FString

  • TCHAR : 언리얼 엔진에서 사용하는 기본 문자 타입.
  • FString : 문자열을 조작할 수 있도록 언리얼에서 제공하는 클래스.
  • FString을 사용할 때는 앞에 * (포인터)를 붙여야 함.

FString 예제 코드

#include "MyGameInstance.h"

void UMyGameInstance::Init()
{
    Super::Init();

    TCHAR LogCharArray[] = TEXT("Hello Unreal");
    UE_LOG(LogTemp, Log, TEXT("%s"), LogCharArray);

    FString LogCharString = LogCharArray;
    UE_LOG(LogTemp, Log, TEXT("%s"), *LogCharString);

    // 특정 문자열 포함 여부 확인
    if (LogCharString.Contains(TEXT("Unreal"), ESearchCase::IgnoreCase))
    {
        int32 Index = LogCharString.Find(TEXT("Unreal"), ESearchCase::IgnoreCase);
        if (Index != INDEX_NONE)
        {
            FString EndString = LogCharString.Mid(Index);
            UE_LOG(LogTemp, Log, TEXT("%s"), *EndString);
        }
    }
}

2.3 FString 변환 함수

  • FString::Printf : 문자열을 특정 형식으로 변환.
  • FString::SanitizeFloat : float 값을 안전한 문자열로 변환.
  • FString::FromInt : 정수를 문자열로 변환.

FString 변환 예제 코드

int32 IntValue = 42;
float FloatValue = 3.141592;

FString FormattedString = FString::Printf(TEXT("Int: %d, Float: %.6f"), IntValue, FloatValue);
FString FloatString = FString::SanitizeFloat(FloatValue);
FString IntString = FString::FromInt(IntValue);

UE_LOG(LogTemp, Log, TEXT("%s"), *FormattedString);

2.4 FString에서 다른 타입으로 변환

  • FString::Atoi : 문자열을 정수로 변환 (안전하지 않음, 주의 필요).
  • FCString::Atof : 문자열을 실수로 변환 (안전하지 않음, 주의 필요).

예제 코드

FString IntString = TEXT("100");
FString FloatString = TEXT("3.14");

int32 IntValue = FCString::Atoi(*IntString);
float FloatValue = FCString::Atof(*FloatString);

UE_LOG(LogTemp, Log, TEXT("Converted Int: %d, Converted Float: %.2f"), IntValue, FloatValue);

3. FName과 FText

3.1 FName

  • 초경량 문자열 타입으로 빠른 비교 및 검색이 가능.
  • 내부적으로 해시값을 이용하여 문자열을 관리.
  • 대소문자를 구분하지 않음.
  • 주로 에셋 관리 및 ID 식별 등에 사용됨.
FName ObjectName = TEXT("MyObject");
UE_LOG(LogTemp, Log, TEXT("FName: %s"), *ObjectName.ToString());

3.2 FText

  • UI 및 다국어 지원을 위한 문자열 타입.
  • 로컬라이제이션(Localization) 시스템과 통합되어 번역 지원이 가능.
FText LocalizedText = NSLOCTEXT("MyNamespace", "MyKey", "Localized String");
UE_LOG(LogTemp, Log, TEXT("Localized Text: %s"), *LocalizedText.ToString());

4. 정리

언리얼이 C++ 기본 타입을 사용하지 않는 이유

  • 성능 최적화와 호환성을 위해 언리얼 엔진 자체 타입을 사용.
  • C++ 기본 타입보다 메모리 크기와 정밀도가 명확한 데이터 타입 제공.

문자열 처리에서 중요한 점

  • UTF-16을 기본으로 사용하며, 소스코드 저장은 UTF-8을 권장.
  • TCHAR보다는 FString을 적극 활용하여 문자열을 다룰 것.
  • FName은 빠른 검색, FText는 다국어 지원이 필요할 때 사용.

 

 

728x90
반응형
LIST

관련글 더보기