-
[UE5] FString은 왜 '*'을 붙여서 읽어야할까?302호 컴퓨터실/언리얼 엔진 5 기초 2024. 11. 27. 17:21728x90반응형
1. FString의 구조
- FString은 언리얼 엔진의 문자열 클래스입니다. 이 클래스는 내부적으로 힙(Heap)에 동적 문자열 데이터를 관리합니다.
- FString의 핵심은 문자열 데이터를 TArray<TCHAR>를 통해 관리하며, 메모리 관리와 최적화를 위해 다양한 유틸리티 메서드가 포함되어 있습니다.
하지만, FString 자체는 문자열 데이터를 바로 반환하지 않고, 문자열 값을 가리키는 내부 메서드를 제공합니다.
2. C++에서 *의 역할
- '*'는 C++에서 포인터의 값을 참조하거나 언리얼에서 오버로딩된 특정 연산자를 호출하는 역할을 합니다.
- FString에서는 * 연산자를 오버로딩하여 내부의 C-Style 문자열 포인터(TCHAR)를 반환하도록 설계되어 있습니다.
오버로딩된 operator*()의 역할
const TCHAR* operator*() const;
- 이 연산자를 통해 FString의 내부 문자열 데이터(TCHAR 배열)를 직접 접근할 수 있습니다.
FString MyString = TEXT("Hello, Unreal!"); UE_LOG(LogTemp, Log, TEXT("%s"), *MyString);
3. 왜 직접 접근이 아닌 오버로딩 방식을 사용할까?
- FString은 단순한 문자열 데이터가 아니라 클래스이기 때문에 직접적으로 문자열 데이터를 반환하는 것이 아니라 메서드나 연산자를 통해 데이터를 반환하도록 설계되었습니다.
- 이 방식은 다음과 같은 장점을 제공합니다:
- 메모리 관리: 문자열 데이터는 FString이 관리하며, 외부에서 메모리 할당/해제를 신경 쓸 필요가 없습니다.
- 안전성: 문자열 데이터에 대한 읽기/쓰기 작업이 FString 내부 메서드를 통해 제어됩니다.
- 최적화: FString 내부에서 데이터 변환 및 캐싱을 통해 성능 최적화를 구현할 수 있습니다.
4. FString의 대안: TEXT 매크로와의 관계
- 언리얼에서는 TEXT() 매크로를 사용하여 기본적으로 FString과 호환되는 리터럴 문자열을 작성합니다.
- TEXT와 FString의 결합 덕분에, C++의 문자열 처리보다 더 직관적이고 간편하게 작업할 수 있습니다.
결론
FString에서 *를 사용하는 이유는 내부 문자열 데이터(TCHAR*)를 반환하기 위한 연산자 오버로딩 때문입니다. 이는 C++의 기본 동작과 언리얼 엔진의 메모리 관리 및 최적화 설계 철학에 따른 것입니다.
- 만약 * 없이 데이터를 읽으려면 MyString 객체를 직접 사용하지 않고 ToString() 메서드를 호출해야 할 수도 있습니다.
FString MyString = TEXT("Hello, Unreal!"); std::string StdString = MyString.ToString();
반응형'302호 컴퓨터실 > 언리얼 엔진 5 기초' 카테고리의 다른 글
[Unreal 5] 블루프린트 5 - 첫번째 객체 만들기 (0) 2024.11.06 [Unreal 5] 블루프린트 4 - Vector, Force, Impulse (0) 2024.11.06 [Unreal 5] 블루프린트 3 - 객체와 참조 (0) 2024.11.04 [Unreal 5] 블루프린트 2 - 액터 물리 시뮬레이션 (0) 2024.11.03