[Unreal] FName, FText, FString
스트링 처리
언리얼 엔진에서 String을 처리하는 클래스는 FName, FText, FString이 있습니다.
FName
FName은 문자열을 고유한 식별자로 사용할 때 주로 사용됩니다.
FName에 주어진 문자열이 재사용된다고 하더라도, 데이터 테이블에 한 번만 저장됩니다. 또한 FName 객체의 직접적인 할당 없이도, 매개변수로 FName( ) 객체를 전달함과 동시에 FName 테이블에 로드되어 전달됩니다. 이러한 특성으로 인해 FName은 초경량 시스템이라고 볼 수 있습니다.
내부적으로 문자열을 해시 테이블에 저장하기 때문에 FName은 빠른 비교 연산을 가능하게 합니다. 따라서 빈번한 비교 연산이 필요하거나, 문자열이 고유한 식별자로 사용되는 경우에 효율적입니다.
또한, FName은 대소문자를 구분하지 않고, 변경도 불가능하며 프로그래머가 임의로 조작할 수 없습니다. 소유한 스트링 테이블에 대한 인덱스와 인스턴스 번호의 조합으로 저장되는데, 이처럼 FName은 정적인 속성을 가져 key로 접근하는 속도가 빠릅니다.
그리고 == 를 사용하여 FName을 비교할 수 있는데, 이때 실제 문자열을 비교하는 것이 아니라 Index 안의 값을 비교하기 때문에 CPU가 크게 절약됩니다.
사용 예시
- 콘텐츠 브라우저에서 새 애셋 이름을 지을 때
- 다이나믹 머티리얼 인스턴스의 파라미터를 변경할 때
- 스켈레탈 메시에서 본에 접근할 때
변환
FName → FString
FName → FText
FString → FName
FText → FString → FName
FText
FText는 언리얼 엔진의 스트링 처리 중, 텍스트 현지화(text localization)를 지원하는 유일한 클래스입니다.
텍스트 현지화를 지원한다는 것은 내부적으로 문자열의 키와 네임스페이스를 기록하므로, 같은 문자열이 여러 곳에서 사용될 때 각각 다른 번역을 제공할 수 있다는 의미입니다. 또한 런타임에 언어를 변경하면 해당 언어의 번역을 자동으로 로드합니다.
FText의 다른 기능은, 문자열의 서식을 지원한다는 점입니다. FText::Format 함수를 사용하면 { }로 둘러싼 곳에 다른 FText 인스턴스를 삽입할 수 있습니다.
이처럼, FText는 다국어 지원이 필요한 프로젝트에서 사용을 권장합니다. 그러나, 비교 연산이 무겁기 때문에, 식별자로 사용하거나 빈번한 비교 연산이 필요한 경우에는 FName을 사용하는 것이 더 효율적일 수 있습니다.
따라서 FText는 사용자 인터페이스, 메시지, 알림 처럼 사용자에게 보여지는 문자열을 표현할 때 사용하는 것이 좋습니다.
텍스트 현지화
내부적으로 FText는 ITextData로의 TSharedRef로 구현됩니다. 때문에 매우 낮은 비용으로 FText를 복사할 수 있습니다. ITextData는 FText에 필요한 내부 데이터를 담은 인터페이스입니다.
FString
FString은 FName이나 FText와 달리 조작이 가능합니다. 즉, 동적으로 크기가 조절되는 가변 길이 문자열을 나타냅니다.
FString 클래스는 대소문자 변환이나, 부분 문자열을 발췌하거나, 문자열의 역순을 구하는 등의 다양한 메서드를 사용할 수 있습니다. 그리고 문자열 간의 덧셈 연산을 지원하기 때문에, 문자열의 연결을 쉽게 수행할 수 있습니다.
또한, FString은 검색, 변경에 다른 스트링과의 비교도 가능하다는 장점이 있지만, 그로인해 다른 String 클래스보다 비용이 많이 들게 됩니다. 따라서 비교 연산이 자주 사용되는 경우엔 FString보다 FName을 사용하는 것이 효율적일 수 있습니다.
TCHAR
FString, FName, FText 등의 문자열 클래스에선 TCHAR 형식의 문자열을 저장합니다.
TCHAR는 언리얼에서 사용하는 문자 형식으로, 유니코드를 지원하며 플랫폼에 따라 char 또는 wchar_t가 됩니다. TCHAR의 정확한 형식은 프로젝트의 유니코드 설정에 따라 달라집니다. 유니코드를 사용하도록 설정되어 있다면 wchar_t로 정의되고, 그렇지 않은 경우엔 char로 정의되어 ASCII 문자를 나타냅니다.
TEXT 매크로를 사용하면 TCHAR 형식의 문자열 리터럴을 만들 수 있습니다. 즉, 프로젝트의 유니코드 설정에 상관없이 항상 올바른 형식의 문자열 리터럴을 생성할 수 있습니다. 따라서 언리얼 엔진에서 문자열 리터럴을 사용할 때는 항상 TEXT 매크로를 사용하는 것이 좋습니다.
https://docs.unrealengine.com/5.3/ko/string-handling-in-unreal-engine/
스트링 처리
FName, FText, FString에 대한 레퍼런스 가이드와 언리얼에서 사용할 수 있는 문자열 클래스에 대한 개요입니다.
docs.unrealengine.com
https://docs.unrealengine.com/5.3/ko/fname-in-unreal-engine/
FName
언리얼 엔진에서 FName 제작, 변환 및 비교를 위한 참고 자료입니다.
docs.unrealengine.com
https://docs.unrealengine.com/5.3/ko/ftext-in-unreal-engine/
FText
언리얼 엔진의 FText를 통한 생성, 변환, 비교 등에 대한 레퍼런스입니다.
docs.unrealengine.com
https://docs.unrealengine.com/5.3/ko/text-localization-in-unreal-engine/
텍스트 현지화
텍스트 리터럴, 텍스트 포맷, 텍스트 생성, 스트링 테이블 등 텍스트 현지화 관련 필요한 모든 정보를 제공합니다.
docs.unrealengine.com
https://docs.unrealengine.com/5.3/ko/fstring-in-unreal-engine/
FString
언리얼 엔진에서 FString 제작, 변환 및 비교를 위한 참고 자료입니다.
docs.unrealengine.com