공부/C++
언리얼 C++ 기본 타입과 문자열 처리 정리
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