[UE5/C++] 언리얼에서의 문자열 (TCHAR과 FString)
- 목차
언리얼에서는 Integer과 마찬가지로 String또한 별도의 타입으로 지정해서 사용한다.
그 타입이 바로 TCHAR이다.
[언리얼에서 별도의 문자열 타입을 사용하는 이유]
:영어에서 점점 다른 언어들까지 추가로 표현하기 위해 문자체계가 추가되어왔다.
그러다보니 싱글바이트, 멀티바이트, 유니코드 세 종류를 처리해야하는데
세 종류 전부다 아직도 사용되고 있으며, 또 C++ STL은 ASCII, UTF-8, UTF16만 지원한다.
이런 복잡한 상황을 해결하기 위해 그냥 별도의 문자열타입을 지정한 것이다.
언리얼은 내부적으로 모두 UTF-16 (한 문자당 2바이트) 체계를 사용한다.
소스코드 같은 경우는 많이 사용되는 UTF-8이나 디폴트 Windows 인코딩을 추천한다고 하는데, 동아시아 문자같은 경우는 오류를 발생시킬 수도 있다고한다. 그러므로 한글을 쓴다면 사전에 감안하고 에러가 떴을 때 문자 때문은 아닌지 생각해볼 필요도 있다.
TEXT() 매크로는 기본적으로 TCHAR 배열로 저장된다.
TCHAR은 언리얼의 표준 캐릭터 타입이다.
TCHAR CharArray[] = TEXT("Hello, Unreal!");
UE_LOG(LogTemp, Log, CharArray);
위와 같이 선언하고, log를 찍어줄 수 있다.
이 문자열을 다양하게 조작하고 싶다면,
TCHAR를 사용하는 것이 아니라, FString 클래스를 사용해야한다.
FString은 TCHAR의 동적배열을 소유하고 있는 헬퍼 클래스이다.
FString CharString = CharArray;
선언은 위와 같이 TCHAR 문자열을 대입해주면 FString 안쪽에 문자열 데이터가 포함이 된다.
UE_LOG(LogTemp, Log, TEXT("%s"), *CharString);
UE_LOG 매크로의 세번째 파라미터에는 항상 배열이 들어가기 때문에 FString을 쓸 수 없다.
%s 에는 포인터어레이가 대응되어야 한다.
이때 FString을 그대로 쓰면 TCHAR 포인터가 반환이 되지 않는다.
그래서 포인터 연산자 *을 붙여주면 된다.
[FString 클래스 공식문서]
언리얼 엔진의 FString
언리얼 엔진에서 FString 제작, 변환 및 비교를 위한 참고 자료입니다.
dev.epicgames.com