FName & FString

정혜창·2025년 2월 6일

독학

목록 보기
21/28

🔥FName

  • 정의 : FName은 주로 Unreal에서 사용되는 데이터 타입으로, 효율적인 문자열 관리를 위해 설계된 클래스이다.

🎮FName 이란?

FName은 Unreal Engine의 핵심 클래스 중 하나로, 문자열을 효율적으로 저장하고 비교할 수 있도록 설계된 데이터 타입이다. 일반적인 FString 과의 차이점은 다음과 같다.

1️⃣ FName의 주요 특징

  • 불변성(Immutable)
    • 한 번 생성된 FName 값은 변경할 수 없음
    • FString은 문자열을 동적으로 수정할 수 있지만, FName은 고정된 값을 가지며 변경되지 않음
  • 빠른 비교 성능
    • FName은 문자열 비교를 빠르게 수행할 수 있도록 내부적으로 해시 값과 인덱스를 사용함.
    • FString을 비교할 때는 전체 문자열을 비교해야 하지만, FName은 미리 생성된 인덱스를 비교하여 빠르게 처리 가능
  • 자동 중복 제거(Deduplication)
    • FName은 전역 테이블에서 관리됨.
    • 같은 문자열을 여러 번 생성해도, 한 번만 저장되어 메모리를 절약할 수 있음.
  • 가벼운 데이터 타입
    • FName은 주로 int32 인덱스를 기반으로 하여 문자열을 저장함.
    • FString 보다 메모리 사용량이 적으며, 네트워크 전송 시에도 부담이 적음

🎮FName 사용 예제

1️⃣ FName 기본 생성 및 반환

FName MyName = FName("Player1");
return MyName;
  • "Player1" 이라는 이름을 갖는 FName 객체가 생성되고 반환됨.

2️⃣ FName을 이용한 연산

FName Name1 = FName("Enemy");
FName Name2 = FName("Enemy");
FName Name3 = FName("Player");

if (Name1 == Name2) 
{
	UE_LOG(LogTemp, Warning, TEXT("같은 FName입니다!"));
}

if (Name1 != Name3)
{
	UE_LOG(LogTemp, Warning, TEXT("다른 FName입니다!"));
}
  • Name1Name2는 같은 문자열을 저장하고 있으므로 == 비교가 진실(true)가 됨.
  • Name1Name3는 서로 다른 문자열을 저장하고 있으므로 != 비교가 진실(true)가 됨.

3️⃣FNameFString으로 변환

FName MyFName = FName("TestName");
FStirng MyString = MyFName.ToString();

UE_LOG(LogTemp, Waring, TEXT("FName을 FString으로 변환: %s"), *MyString);
  • FName.ToString() 을 사용하면 FSting` 으로 변환 가능

4️⃣ FNameTEXT() 매크로와 함께 사용

FName LevelName = TEXT("MainLevel");
UE_LOG(LogTemp, Warning, TEXT("현재 레벨 이름: %s"), *LevelName.ToString());
  • TEXT() 매크로를 사용하여 FName을 직접 생성할 수도 있음.

🎮FName vs FString 차이 및 결론

1️⃣ 🎮FName vs FString 차이

2️⃣ 결론

  • FNameUnreal Engine에서 문자열을 효율적으로 관리하기 위한 데이터 타입이다.
  • return FName();은 새로운 FName 객체를 반환하는 코드
  • FName은 빠른 비교 성능, 불변성, 메모리 절약 등의 장점을 가짐
  • 하지만 긴 문자열을 다루거나 변경이 필요한 경우 FString을 사용해야 함

즉, FName은 고정된 문자열을 자주 비교해야 할 때 가장 적합한 타입이다.

profile
Unreal 1기

0개의 댓글