Devs/Unreal Engine

CreateDefaultSubobject 함수, FName, FString, TEXT 매크로, TCHAR

whawoo 2025. 3. 18. 19:03
반응형

CreateDefaultSubobject함수는 Object.h에 정의되어 있는 template 함수로 특정 타입의 인스턴스를 만들고 해당 포인터를 반환하는 함수로 보인다

슈팅 게임 캐릭터의 예제에서는 UCameraComponent와 USkeletonMeshComponent의 인스턴스를 만드는 것으로 보인다.

추가로 인자로 보내는 TEXT 매크로로 FName을 지정해서 해당 인스턴스의 이름을 지정하는 것으로 보인다

 

 

- FName

CreateDefaultSubobject함수의 인자로 넘겨주는 타입이 자세히 보니 그냥 스트링이 아닌 FName으로 되어 있어서 좀 더 살펴보자. 주석을 보면 아래와 같이 써져 있다.

/**
 * Public name, available to the world.  Names are stored as a combination of
 * an index into a table of unique strings and an instance number.
 * Names are case-insensitive, but case-preserving (when WITH_CASE_PRESERVING_NAME is 1)
 */

 

... 좀 더 자세한 설명을 위해 gpt에게 설명을 부탁해 본 내용

고정적인 특성을 가진 이름으로 보이고, 비교 연산에 용이하고, 중복 저장 방지 등의 특성을 가진 데이터 타입이라고 한다. 스트링 비교를 하는데 드는 것을 빠르게 처리하기 위한 것으로 보인다. 그래서 FName의 내부 코드를 봐보면 operator==의 부분을 보면 스트링 비교가 아닌 int 값으로 비교를 하고 있는 것을 알 수 있다

 

추가로 FString과의 비교한 부분 정리

 

 

- FString

알아 본 김에 같이 알아보는 FString. 위의 비교표를 통해서 어느정도 특성을 알 수 있을 듯 하다. 이것도 역시 gpt에세 설명을 부탁해보았다.

 

간단히 설명하면 C# 등에서 쓰는 String으로 비슷하게 가변적이고 동적 메모리 할당, 대소구분, 문자 하나씩 비교 등을 가진 것으로 보인다. 언리얼 엔진에서 쓰기 위해서 만든 것으로 보이는... 그렇지만 확실히 기존에 유니티로 개발 당시 스트링 비교에 대해서 큰 생각 없이 썼었던 부분이 있었는데 자주 비교를 하는 것 등을 고려하면 FName과 FString이 분리 되어 있는 부분이 흥미롭게 생각된다. 

 

 

- TEXT 매크로, TCHAR

언리얼 엔진에서 쓰이는 TCHAR 형식으로 바꿔주기 위한 매크로 기능으로 보인다. 여러 플랫폼에서 대응을 편하게 해주기 위한 매크로 기능으로 이해가 된다. 추가로 TCHAR에 대한 것도 하단 스크린샷의 비교표를 보면 플랫폼에 따라서 대응을 해주기 위해서 만들어진 언리얼 엔진의 기본 문자 타입으로 알 수 있다. 멀티 플랫폼에 대해서 대응이 핵심으로 보이고, FString, FName, UE_LOG 등의 기능을 쓰기에 필수이기에 적극활용해야 할 것으로 보인다.

 

실제로 TCHAR를 찾아보면 각 플랫폼 타입에 따라서 구현이 나뉘어서 된 부분을 발견할 수 있다. 실제론 FGenericPlatformTypes를 상속 받아서 전처리기로 케이스에 따라서 동작이 바뀌게 되어 있다.

반응형