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

Kim Dongil·2024년 3월 18일
0

언리얼엔진

목록 보기
14/18

언리얼 구조체 UStruct

언리얼 엔진 구조체

  • 데이터 저장/전송에 특화된 가벼운 객체
  • 대부분 GENERATED_BODY 매크로를 선언해준다.
    • 리플렉션, 직렬화와 같은 유용한 기능을 지원함.
    • GENERATED_BODY를 선언한 구조체는 UScriptStruct 클래스로 구현됨.
    • 이 경우 제한적으로 리플렉션을 지원함
      • 속성 UPROPERTY만 선언할 수 있고 함수 UFUNCTION은 선언할 수 없음
    • 언리얼 엔진의 구조체 이름은 F로 시작함.
      • 대부분 힙 메모리 할당없이 스택 내 데이터로 사용됨.
      • NewObjectAPI를 사용할 수 없음.
  • UStruct는 UProperty를 지원하지만 가비지 컬렉션 시스템에 의해 관리되지 않으며 UFunction 함수를 제공할 수 없음.
  • 언리얼 리플렉션 시스템과 블루프린트 스크립팅에 표시되도록 구조체의 멤버 변수에 UProperty 태그를 지정할 수 있음.
  • 접두사는 F(단순 C++처럼 취급)
    • 구조체의 멤버 변수에 포인터를 사용한다면 깊은 복사, 얕은 복사 문제에 주의를 기울이자.
  • 언리얼 오브젝트 포인터를 멤버변수로 들고있다면 반드시 UPROPERTY 매크로 지정

TMap

언리얼 엔진 TMap

  • STL map
    • 이진 트리로 구성
    • 정렬 지원
    • 메모리 구성 효율 x
    • 데이터 삭제 시 재구축
    • 자료 순회 적합 x
  • 언리얼 TMap
    • key, value의 튜플 데이터의 TSet 구조로 구현
      • TSet과 내부 구조가 같다고 보면 됨
    • TMultiMap을 사용하면 중복 데이터 관리 가능
  • STL unordered_map과 유사
  • key, value 쌍이 필요한 자료구조에 광범위하게 사용
  • 언리얼 엔진 에서 TArray (배열) 다음으로 가장 자주 사용되는 컨테이너
  • 기존과 일치하는 key로 TMap에 넣으면 새 값으로 대체
  • 기존과 일치하는 key로 TMultiMap에 넣으면 새 값으로 추가
  • 실제 TPair<KeyType, ElementType> 로, TPair 유형을 직접 가리키는 것은 드물다.
  • 동질성 컨테이너
  • 해시 컨테이너라서, 기본적으로 키 유형은 반드시 GetTypeHash 를 지원하고 키의 동일성 비교를 위한 operator== 가 제공돼야 함
  • 전반적인 함수 구성은 TSet과 유사
  • UPROPERTY 매크로와 편집가능 키워드 (EditAnywhere, EditDefaultsOnly, EditInstanceOnly) 중 하나를 마킹하면, 언리얼 에디터에서 엘리먼트 추가 및 편집 가능

쿼리

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

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

  • Set과 유사

자료구조의 시간 복잡도 비교

0개의 댓글