FName과 FText
FString은 FName과 FText로 변환해서 사용이 가능하다
FName
사람은 문자열로 애셋을 관리하는 게 직관적이다
그러나 문자열을 그대로 사용하면 연산량이 늘어나는 문제가 있다
따라서,
문자열로 관리를 하되, 내부적으로는 해시값으로 변환해서
에셋 관리를 위한 문자열 클래스가 FName 클래스이다
주의점은
대소문자 구분이 없고
한번 선언되면 int32와 같은 정수로 변환되는 단점이 있다
즉, 다시 원본 문자열로의 변경이 불가능하다
FText
다국어 지원을 위한 문자열 클래스로 UI에서 자주 사용한다
key와 value 쌍과 같이
FText는 key처럼 동작한다
"Hello - 안녕"과 같은 별도의 문자열 테이블 정보가 요구된다
게임 빌드 시에 자동으로 다양한 국가별 언어로 변환되고
로컬라이제이션에 활용된다
FName 구조와 활용
언리얼은 FName과 관련된 전역 Pool 자료구조를 가진다
문자열이 들어오면 해시 값을 만들고,
해당 해시 값이 키 역할을 해서 FName에 저장한다
FName 값에 저장된 키를 사용해서 전역 Pool에서 원하는 자료를 검색해 보관된다
FName 생성과정
생성자에 문자열 정보를 넣으면,
전역 Pool을 조사해서 적당한 키로 변환하는 작업이 이루어진다
즉, FindOrAdd 작업이 진행된다
따라서, FName은 key와 value 쌍이고, 전역 Pool에는 기존의 FName들이 들어 있다
FName 주의점
FName을 지역 변수로 선언하게 되면 매번 전역 Pool에서
해당 문자열을 탐색하기에
const static으로 선언을 하는 것이 좋다
FName SearchInNamePool = FName(TEXT("pelvis"));
// 지역 변수로 선언되면,
// 함수 호출시 혹은 반복문 순회마다 전역 Pool에서 해당 문자열이 있는지 확인
const static FName StaticOnlyOnce(TEXT("pelvis"));
// 따라서 const static으로 FName을 만드는 것이
// 효율적이다
'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글
언리얼 기본 요소 - Component (0) | 2024.05.10 |
---|---|
언리얼 자료구조 - TArray, TSet, TMap (0) | 2024.05.10 |
언리얼 문자열 - TCHAR, FString (0) | 2024.05.10 |
언리얼 오브젝트 기능 - 델리게이트 (0) | 2024.05.10 |
언리얼 오브젝트 기능 - Serialization (0) | 2024.05.10 |