언리얼의 3대 String 문자열(11.20)

이정국(PBD)·2025년 11월 20일

TIL

목록 보기
61/70

개요 — 언리얼이 문자열 타입을 세 개로 나눈 이유

문자열을 사용하는 목적이 다르기 때문에 타입이 분리됨.

  • FString: 일반 문자열 처리(조작, 파싱, 로그).

  • FName: 빠른 비교와 식별자 용도.

  • FText: 로컬라이즈된 사용자-facing 텍스트.

기본 가이드라인 :

  • UI/대사→FText / 태그·식별자→FName / 일반 문자열 처리→FString

1. FString — 상세 정리

  • 내부: 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);

2. FName — 상세 정리

  • 내부: 전역 이름 테이블에 문자열을 저장하고 인덱스로 관리.

  • 장점: 정수 비교 수준의 빠른 비교, 중복 문자열 제거. 태그와 식별자에 최적.

  • 단점: 과도한 런타임 생성은 테이블 부풀림 유발. UI 텍스트용으로는 부적합.

FName Tag = FName(TEXT("Enemy"));
if (Actor->ActorHasTag(Tag)) { /* ... */ }

if (SomeName == FName(TEXT("Player"))) { /* ... */ }

3. FText — 상세 정리

  • 목적: 로컬라이제이션을 고려한 사용자 UI 텍스트 표현.

  • 내부: 문자열 + 로컬라이제이션 키/컨텍스트 구조.

  • 장점: 번역 파이프라인과 자동 연동, 숫자/날짜 포맷 문화권 대응.

  • 단점: 비교/연산은 느림. 로직 내 조건문에 사용하면 비효율.

FText Greeting = NSLOCTEXT("MyGame", "Greeting", "Hello, Player!");
FText Greeting2 = FText::FromString("Hello");
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, Greeting.ToString());

4. 타입 간 변환 정리

  • 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로 변환하는 방식이 일반적.

5. 블루프린트에서의 구분

  • Text = FText (UI 텍스트)

  • String = FString (일반 문자열)

  • Name = FName (식별자/태그)

  • UI 바인딩은 Text 사용 권장, 문자열 연산은 String 사용.

profile
창백한 푸른점 속 작은점

0개의 댓글