728x90
반응형
현대의 컴퓨터에서 문자열을 처리하는 방식은
MBCS(Multi Byte Character Set)과 WBCS(Wide Byte Character Set)로 나뉘어 있는 유니코드 방식입니다
그 중에서도 언리얼 엔진에서는 후자인 UTF-16을 사용합니다.
이때 언리얼 엔진에서는 편의성과 일관성을 유지하기 위해 문자열에 대해 다음과 같은 특징을 갖고 있습니다.
1) 언리얼 엔진에서의 문자열의 특징
- 2byte의 균일한 사이즈로 문자를 처리하는 UTF-16을 사용
- 문자열은 반드시 TEXT 매크로를 사용해 지정
- 문자열을 다루기 위한 클래스로 FString을 제공
언리얼 엔진에서의 문자열의 특징은 간단하게 위와 같이 정리가 가능합니다.
위와 같은 상황에서 문자열보다 더 깊게 파고들어 단일문자로 들어가게 될 경우,
언리얼 엔진은 유니코드를 위한 자체적인 표준 캐릭터(단일문자) 타입을 제공하는데, 그것이 바로 TCHAR입니다.
이때 위의 특징을 TCHAR로 다시 정리하자면 다음과 같습니다.
- TEXT 매크로 : 문자열을 TCHAR 형태의 배열로 저장
- FString : TCHAR 배열을 포함하는 헬퍼 클래스
2) 언리얼이 제공하는 다양한 문자열의 처리
(1) FName : 에셋 관리를 위한 문자열 체계
FName의 특징은 다음과 같습니다.
- 대소문자의 구분이 없음 (예시) HELLO == hello
- 한번 선언되면 바꿀 수 없음
- 문자를 표현하는 용도가 아닌, 에셋의 키를 지정하는 용도로 사용됨
- 위와 같은 용도로 인해 빌드 시에는 해시 값으로 전환되고 따라서 가볍고 빠름
(2) FText : 다국어를 지원하는 문자열 관리 체계
FText의 특징은 다음과 같습니다.
- 해시값을 추출해 키를 생성하고 이 키로 작용함
- 별도의 문자열 테이블 정보가 추가로 요구됨
- 게임이 빌드되면 자동으로 다양한 국가별 언어로 변환됨
- 언리얼이 제공하는 Global Pool 자료구조에서 생성된 키로 원하는 자료(=언어)를 검색해 반환(=변환)함
- FName과 마찬가지로 대소문자의 구분이 없음
3) 간단한 코드로 보는 언리얼 엔진의 문자열 처리
컨텐츠를 담은 어플리케이션의 뼈대인 GameInstance로부터 상속된 MyGameInstance를 통해
언리얼의 문자열 처리 방법을 간략한 코드로 사용해보았습니다.
UMyGameInstance::UMyGameInstance()
{
// TCHAR 배열로 문자열 만들기
TCHAR TcharText[] = TEXT("TCHAR로 만든 문자열");
// FString으로 문자열 만들기
FString StringText = TEXT("FString으로 만든 문자열");
// 문자열에 인자가 포함되었는지를 bool 형태로 리턴(대소문자의 구별은 하지 않음)
if (false == StringText.Contains(TEXT("TCHAR"), ESearchCase::IgnoreCase))
{
UE_LOG(LogTemp, Warning, TEXT("TCHAR는 포함되어있지 않습니다."));
}
else
{
UE_LOG(LogTemp, Warning, TEXT("TCHAR는 포함되어있습니다."));
}
// 문자열에 인자가 포함되었는지를 확인하고 존재하면 인덱스를 리턴(대소문자의 구별은 하지 않음)
int32 index = StringText.Find(TEXT("FString"), ESearchCase::IgnoreCase);
UE_LOG(LogTemp, Warning, TEXT("FString이 포함된 인덱스는 %d입니다"), index);
// 문자열을 인자를 기준으로 분리하고 결과를 bool로 리턴
FString Left, Right;
if (StringText.Split(TEXT(" "), &Left, &Right))
{
UE_LOG(LogTemp, Warning, TEXT("인자를 기준으로 잘린 문자열은 '%s' 와 '%s' 입니다"), *Left, *Right);
}
FName Name1(TEXT("KIM"));
FName Name2(TEXT("kim"));
// FName의 비교연산
UE_LOG(LogTemp, Warning, TEXT("FName끼리의 비교 연산은 %s 입니다"), Name1 == Name2 ? TEXT("'같음'") : TEXT("'다름'"));
}
실행 결과는 다음과 같습니다.
이렇게 언리얼 엔진에서 문자열을 어떻게 처리하고 어떤 방식으로 다루는 지 알아보았습니다.
이외에도 다양한 문자열 처리 방법이 존재하므로 궁금하시다면 아래의 공식문서를 확인해주시면 되겠습니다.
728x90
반응형
'언리얼 > 언리얼 C++' 카테고리의 다른 글
언리얼 C++ - 언리얼 리플렉션 시스템의 활용 (0) | 2024.06.30 |
---|---|
언리얼 C++ - 언리얼 오브젝트 리플렉션 시스템 ~ CDO (0) | 2024.06.24 |
언리얼 C++ - 간단한 언리얼 오브젝트 클래스 생성 (0) | 2024.06.17 |
언리얼 C++에 대해 배워보자! - 언리얼 오브젝트 (0) | 2024.06.17 |
언리얼 C++에 대해 배워보자! - 들어가기에 앞서 (0) | 2024.06.03 |