[UE5] 이득우 Part 1. 11강 언리얼 컨테이너 라이브러리Ⅱ - 구조체와 Map

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

언리얼 구조체

  • 데이터 저장/전송에 특화가벼운 객체
  • 대부분 GENERATED_BODY 매크로 선언
    • 리플렉션, 직렬화와 같은 유용한 기능 지원
    • GENERATED_BODY를 선언한 구조체는 UScriptStruct 클래스로 구현
    • 이 경우 제한적으로 리플렉션 지원
      • 속성 UPROPERTY만 선언 가능
      • 함수 UFUNCTION 선언 불가
  • 언리얼 엔진의 구조체 이름은 F로 시작
    • 대부분 힙 메모리 할당 없이 스택 내 데이터로 사용
    • NewObject API 사용 불가

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

  • 멤버 프로퍼티를 체계화 및 조작할 수 있는 데이터 구조체
  • UStructUProperty를 지원하지만 가비지 컬렉션 시스템에 의해 관리되지 않으UFunction 함수를 제공할 수 없음

  • 언리얼 리플렉션 시스템과 블루프린트 스크립팅에 표시되도록 구조체의 멤버 변수UProperty 태그를 지정할 수 있음

  • UStruct는 언리얼 엔진의 포인터를 사용해서 멤버 변수로 쓸 수 있는데 UPROPERTY 매크로를 반드시 지정해줘야 UObject가 제거되는 것을 방지하는 등의 메모리 관리가 가능
  • 구조체는 단순한 데이터 타입에 적합
    • 복잡한 인터렉션을 하기 위해서는 UObjectAActor를 이용하는 것이 좋음
    • 언리얼 엔진에서는 UObject와 구조체의 사용 용도가 크게 다름
    • C++에서는 Class와 Struct의 차이가 크지 않음
  • UStruct는 리플리케이션용으로 간주되지 않음
    • 접두사가 F (단순 C++처럼 취급)
    • 멤버 변수의 경우 UProperty 변수는 리플리케이션용으로 간주
  • 언리얼 엔진에는 구조체를 위한 Make 및 Break 함수 자동 생성 기능이 있음



TMap

  • STL map
    • 이진 트리로 구성
    • 정렬 지원
    • 메모리 구성 효율 x
    • 데이터 삭제 시 재구축
    • 자료 순회 적합 x
  • 언리얼 TMap
    • key, value의 튜플 데이터의 TSet 구조로 구현
      • TSet과 내부 구조가 같다고 보면 됨
    • TMultiMap을 사용하면 중복 데이터 관리 가능
  • STL unordered_map과 유사
  • key, value 쌍이 필요한 자료구조에 광범위하게 사용

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

  • 언리얼 엔진 에서 TArray (배열) 다음으로 가장 자주 사용되는 컨테이너
  • 기존과 일치하는 key로 TMap에 넣으면 새 값으로 대체
  • 기존과 일치하는 key로 TMultiMap에 넣으면 새 값으로 추가

  • 실제 TPair< KeyType, ElementType > 로, TPair 유형을 직접 가리키는 것은 드묾
  • 동질성 컨테이너
  • 해시 컨테이너라서, 기본적으로 키 유형은 반드시 GetTypeHash 를 지원하고 키의 동일성 비교를 위한 operator== 가 제공돼야 함

맵 만들고 채우기

  • 전반적인 함수 구성은 TSet과 유사
  • UPROPERTY 매크로와 편집가능 키워드 (EditAnywhere, EditDefaultsOnly, EditInstanceOnly) 중 하나를 마킹하면, 언리얼 에디터에서 엘리먼트 추가 및 편집 가능

반복처리

  • key와 value로 가져오면 됨

쿼리

  • Set과 유사
  • FindKey를 통해 값으로 key를 찾을 수 있음
    • 느리고 값이 같은 키가 여러 개면 어떤 키를 반환하는지 알 수 없음

제거, 소팅, 연산자, 슬랙

  • Set과 유사

KeyFuncs

  • 해당 문서 참고
  • 예) 고유 ID가 있는 구조체들이 있는데 고유 ID 외에는 모두 같으면 같은 구조체로 설정하고 싶다면 따로 만들어서 지정해주면 됨

TArray vs TSet vs TMap vs TMultiMap

 TArray    TSet      TMap   TMultiMap
접근O(1)O(1)O(1)O(1)
검색O(N)O(1)O(1)O(1)
삽입O(N)O(1)O(1)O(1)
삭제O(N)O(1)O(1)O(1)
  • TArray
    • 빈틈없는 메모리
    • 가장 높은 접근성능
    • 가장 높은 순회성능
  • TSet
    • 빠른 중복 감지
  • TMap
    • 중복 불허
    • key, value 관리
  • TMultiMap
    • 중복 허용
    • key, value 관리

0개의 댓글