FString: 일반 문자열 처리(조작, 파싱, 로그).
FName: 빠른 비교와 식별자 용도.
FText: 로컬라이즈된 사용자-facing 텍스트.
내부: TArray 기반의 가변 문자열, 유니코드 완전 지원.
장점: 문자열 붙이기, 자르기, 검색 등 조작이 편하고 직관적.
단점: 중복 문자열이 많으면 메모리 낭비, 비교는 FName보다 느림.
주요 API:
Append, Printf, Split, Replace, TrimStartAndEnd, ToLower, ToUpper
FString a = TEXT("Hello");
FString b = FString::Printf(TEXT("%s %d"), *a, 2025);
FString left, right;
b.Split(TEXT(" "), &left, &right);
UE_LOG(LogTemp, Log, TEXT("left=%s, right=%s"), *left, *right);
내부: 전역 이름 테이블에 문자열을 저장하고 인덱스로 관리.
장점: 정수 비교 수준의 빠른 비교, 중복 문자열 제거. 태그와 식별자에 최적.
단점: 과도한 런타임 생성은 테이블 부풀림 유발. UI 텍스트용으로는 부적합.
FName Tag = FName(TEXT("Enemy"));
if (Actor->ActorHasTag(Tag)) { /* ... */ }
if (SomeName == FName(TEXT("Player"))) { /* ... */ }
목적: 로컬라이제이션을 고려한 사용자 UI 텍스트 표현.
내부: 문자열 + 로컬라이제이션 키/컨텍스트 구조.
장점: 번역 파이프라인과 자동 연동, 숫자/날짜 포맷 문화권 대응.
단점: 비교/연산은 느림. 로직 내 조건문에 사용하면 비효율.
FText Greeting = NSLOCTEXT("MyGame", "Greeting", "Hello, Player!");
FText Greeting2 = FText::FromString("Hello");
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, Greeting.ToString());
FString → FText: FText::FromString()
FText → FString: ToString()
FName → FString: ToString()
FString → FName: FName(*MyString)
FString s = TEXT("Score: 100");
FText t = FText::FromString(s);
FName n = FName(*s);
성능·메모리 관점 핵심 포인트
반복 비교가 필요하면 FName이 월등히 효율적.
UI에서 매 프레임 FText::ToString() 호출은 피하기. 캐싱 권장.
FText::FromString() 반복 생성도 지양. 한 번 만들어서 재사용.
유저 입력 문자열은 FName으로 직접 변환하지 말고 FString 기반으로 관리.
네트워크·직렬화 관점
FString: 직렬화 용이, Replication에 적합.
FName:
직렬화 지원하지만 테이블 기반이라 전송 시 구조가 다름. 그래도 일반적으로 문제 없음.
FText:
번역 데이터 포함 → 네트워크 전송에는 부적합.
필요 시 FString으로 전송 후 클라이언트에서 FText로 변환하는 방식이 일반적.
Text = FText (UI 텍스트)
String = FString (일반 문자열)
Name = FName (식별자/태그)
UI 바인딩은 Text 사용 권장, 문자열 연산은 String 사용.