[UE5] 이득우 Part 1. 3강 언리얼 C++ 기본 타입과 문자열

공부 스파이럴·2023년 12월 7일
0

언리얼 C++ 기본 타입

  • int처럼 32비트일 수도 64비트일 수도 있는 애매모호한 데이터 타입은 문제가 될 수 있음
  • (u) + int + 8 / 16 / 32 / 64
  • float은 4바이트 고정
  • double은 8바이트 고정
  • character는 TCHAR
  • bool은 크기 추정 x

bool 타입

  • bool은 크기가 명시되었지 않음
  • 헤더에서는 uint8/int8(바이트)로 저장
    • 바이트는 필요 이상의 데이터를 씀
    • Bit Field 오퍼레이터를 사용 -> 데이터 최소화
    • 일반적인 uint8과 구분하기 위해 b접두사 필수
  • 헤더가 아닌 cpp에서는 bool 사용해도 무방

캐릭터 인코딩

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/CharacterEncoding/

  • 언리얼은 내부적으로 UTF-16을 사용
  • 텍스트 파일 로드도 UTF-16으로 로드
  • 언리얼에서 파일을 저장할 때도 UTF-16 추천
  • 소스 코드 같은 경우에는 많이 사용되는 UTF-8을 사용해서 저장

문자열 처리

  • 유니코드 문자열 처리
    • 2바이트로 사이즈가 균일한 UTF-16 사용
    • 언리얼 표준 캐릭터 타입: TCHAR
  • TEXT 매크로를 사용해서 TCHAR을 사용
  • 문자열 클래스 FString 제공

FString

https://docs.unrealengine.com/5.3/ko/fstring-in-unreal-engine/

  • 다양한 구조체들이 ToString()을 통해 FString으로 변환해서 디버깅을 할 수 있도록 해줌
  • 비교, 검색, 조립
  • 복잡한 문자를 생성하고 싶으면 Printf()를 사용
  • 인코딩 매크로 제공


FString의 구조와 활용

  • TArray라는 언리얼 제공 동적배열 클래스 이용해서 TCHAR를 관리
  • *연산자를 이용해서 TArray의 포인터를 반환해서 TCHAR 이용
  • FCString
    • C 라이브러리 기본 제공 함수를 포함하는 Wrapper Class
    • FString은 보관, FCString에서 기능 작동

  • TCHAR*를 가져오고 싶으면 const TCHAR*로 가져오기
  • 직접 수정을 하고 싶어서 TCHAR*로 가져와야하면 GetCharArray().GetData() 로 가져옴
  • TCHAR는 FCString::Strcpy 이용

  • FString 함수
    • Contains: 포함
    • Find: 인덱스 찾기
    • ESearchCase::CaseSensitive -> 대소문자 구분
    • ESearchCase::IgnoreCase -> 대소문자 구분 x
    • Mid: 해당 인덱스부터 뒤로 자르기
    • Split: 해당 FString 앞 뒤 자르기
    • FString::Printf: 복잡한 문자열 합성
    • FString::SanitizeFloat: Float -> String
    • FString::FromInt: Int -> String

  • 저수준 API 함수는 FCString에서 제공 (안전 보장 x)
    • FCString::Atoi
    • FCString::Atof

FName

https://docs.unrealengine.com/5.3/ko/fname-in-unreal-engine/

  • 에셋 관리를 위해 사용되는 문자열 체계
  • 문자열을 사용하지만 내부적으로 해시값을 사용해서 바로 찾을 수 있게 함
  • 대소문자 구분 없음
  • 선언되면 바꿀 수 없음(key니깐)
  • 실질적으로는 인덱스 key값이 저장되어 있음
  • 바꾸려면 FString으로 바꿔야하는데 대소문자 구분이 없어서 데이터가 깨질 수 있음


FName의 구조와 활용

  • FName과 관련된 글로벌 Pool 자료구조를 가짐
    • 싱글톤으로 되어 있는 글로벌의 네임들만 모아놓은 자료
    • Key, Value 쌍
  • FName은 Key가 저장
    • 용량이 작음
    • 찾거나 추가하거나만 가능

  • Tick같은 반복되는 함수에서 계속 FName을 호출하면 약간의 오버헤드가 발생할 수 있기 때문에 1번만 선언하거나 const static을 이용해라

0개의 댓글