KoreanFoodie's Study
언리얼 문자열 (FName, FString, FText) 클래스 본문
언리얼 문자열 클래스
언리얼 문자열 클래스는 3 가지가 있다. (FName, FString, FText) 이 중, 조작이 가능한 클래스는 FString 이다.
참고 - 문자열의 변환 : 출처
FName 은 FName(*FString) 꼴을, FString 은 .ToString( ) 꼴을, FText 는 FText::FromName( ) 꼴을 활용하는 것을 알 수 있다.
기타 세부 구현은 소제목 링크의 문서를 참고하자.
FName
FName 은 콘텐츠 브라우저에서 애셋 이름을 지을 때, 스켈레탈 메시에서 본에 접근할 때 등등에 사용된다. FName 은 문자열을 하나하나 비교하지 않고, 주어진 문자열을 해싱한 테이블에 저장한 후, index 로 값을 비교한다. 이 때문에 키로 FName 에 접근하는 속도가 빠르며, 스트링에서 FName 으로의 변환도 해시 테이블을 사용하므로 상대적으로 빠르다. FName 은 대소문자를 구분하지 않고, 변경도 불가능하다.
// FName 생성
FName TestFName = FName(TEXT("Test FName"));
FString
FString 은 조작이 가능한 유일한 스트링 클래스이다.
// FString 생성
FString TestFString = FString(TEXT("TestFString"));
// 뷰포트에 출력
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, TestFString);
// 출력 로그에 출력
UE_LOG(MyClass, Log, TEXT("This is %s"), *TestFString);
// Printf 함수도 있다
FString::Printf(TEXT("I am %s and I am at %.2f", *GetName(), GetActorLocation().X);
Printf 함수나 UE_LOG 에 인자로 전달할 경우, FString 을 넘길 때 %s 로 받게되면 * 를 붙여 주소를 넘겨 주어야 한다.
이는 %s 가 TCHAR* 포인터 타입을 받기 때문이다. 즉, TCHAR 타입 배열의 첫번째 원소의 주소를 받는 것인데, 이는 C 에서도 문자열을 넘길 때 char * 을 받으면서 첫번째 원소의 주소를 읽는 것과 동일하다고 생각하면 된다.
FString 은 실제로 TArray<TCHAR> 을 문자열 데이터로 저장하는 Wrapper 클래스라고 생각해도 무방하다. 실제 내부 구현을 보면 다음과 같다 :
class CORE_API FString
{
private:
friend struct TContainerTraits<FString>;
/** Array holding the character data */
typedef TArray<TCHAR> DataType;
DataType Data;
/* ... */
/**
* Get pointer to the string
*
* @Return Pointer to Array of TCHAR if Num, otherwise the empty string
*/
UE_NODISCARD FORCEINLINE const TCHAR* operator*() const
{
return Data.Num() ? Data.GetData() : TEXT("");
}
}
즉, FString 은 TArray<TCHAR> 을 데이터로 갖고 있으면서, * 를 사용했을 경우 TArray<TCHAR> (실제로는 TCHAR* 배열의 주소) 를 리턴하도록 구현되어 있음을 확인할 수 있다.
그리고 TCHAR 은 다음과 같이 정의되어 있다.
/// Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requirements of the licensee.
typedef FPlatformTypes::TCHAR TCHAR;
ANSICHAR 또는 WIDECHAR 이라고 되어 있는데, 각각은 다음과 같다 :
문자형 | 표현 범위 |
AnsiChar | 1바이트 크기 또는 ASCII 코드 값에 해당하는 문자 |
WideChar | 2바이트 크기 또는 유니코드(Unicode) 값에 해당하는 문자 |
Char | AnsiChar 형과 같음 |
FText
FText 는 언리얼 엔진에서 text localization 기능을 제공하는 주 컴포넌트이다. FText 는 현지와, 포맷팅 등을 제공하므로, 문자열을 생성할 때 사용한다.
모든 플랫폼에서 2바이트 문자열로 사용할 수 있다.
'Game Dev > Unreal C++ : Study' 카테고리의 다른 글
언리얼 비동기 애셋 로딩 (Asynchronous Loading) (0) | 2022.04.04 |
---|---|
언리얼 어설트 정리 (assert, verify, ensure) (0) | 2022.04.04 |
언리얼 가비지 컬렉션 (Unreal Garbage Collection) (0) | 2022.04.01 |
언리얼 스마트 포인터(Unreal Smart Pointer) 정리 1 : 종류, 이점과 예제 (0) | 2022.04.01 |
언리얼 시리얼라이제이션 (Unreal Serialization) (0) | 2022.04.01 |