Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

3냥 집사이면서 게임 개발자입니다.

언리얼 컨테이너 라이브러리 2 - 구조체와 Map 본문

Unreal Engine 5/언리얼 C++

언리얼 컨테이너 라이브러리 2 - 구조체와 Map

훙이야 2023. 7. 27. 12:13

언리얼 구조체의 선언과 특징 이해, 언리얼 대표 컨테이너 라이브러리인 TMap의 내부 구조 이해,

세 컨테이너 라이브러리의 장단점을 파악하고, 알맞게 활용하는 방법을 정리하고자 합니다.

 

언리얼 구조체 UStruct

- 데이터 저장/전송에 특화된 가벼운 객체입니다.

- 대부분 GENERATED_BODY 매크로를 선언해줍니다.

     - 리플렉션, 직렬화와 같은 유용한 기능을 지원합니다.

     - GENERATED_BODY를 선언한 구조체는 UScriptStruct 클래스로 구현됩니다.

     - 이 경우 제한적으로 리플렉션을 지원합니다.

         - 구조체 멤버변수에 UPROPERTY만 선언할 수 있고 함수 UFUNCTION은 선언할 수 없습니다. 
             구조체에서 함수를 선언할 수 없다는 점이 언리얼 오브젝트와의 가장 큰 차이점입니다.

- 언리얼 엔진의 구조체 이름은 F 로 시작합니다. (언리얼 엔진이 메모리를 관리해주지 않습니다.)

     - 대부분 힙 메모리 할당(포인터 연산)없이 스택 내 데이터로 사용됩니다.

     - NewObject API를 사용할 수 없습니다.

 

구조체를 TArray에서 관리하면 UPROPERTY를 자유롭게 선언할 수 있지만,

TArray 에서 UStudent 언리얼 오브젝트를 관리하는 경우 반드시 UPROPERTY()를 선언해야합니다.

 

TMap의 구조와 활용

- STL map 과 TMap의 비교 

     - STL map 의 특징 

     - set과 동일하게 이진트리로 구성되어있습니다.

     - 정렬은 지원하지만, 메모리 구성이 효율적이지 않으며, 데이터 삭제시 재정렬이 일어날 수 있습니다.

     - 모든 자료를 순회하는데 적합하지 않습니다.

- 언리얼 TMap 의 특징 

     - 키, 벨류 구성의 튜플(Tuple) 데이터의 TSet구조로 구현되어 있습니다.

     - 동적 배열의 형태로 구축되어 있어 빠른 검색이 가능합니다.

     - 데이터는 빠르게 순회할 수 있습니다.

     - 데이터는 삭제해도 재구축이 일어나지 않습니다.

     - 비어있는 데이터가 있을 수 있습니다.

     - TMultiMap을 사용하면 중복 데이터를 허용합니다.

- 동작 원리는 STL unordered_map과 유사합니다.

- 키, 벨류 쌍이 필요한 자료구조에 광범위하게 사용됩니다.

학생 데이터를 관리하는 구조체를 생성합니다.

 

멤버변수로 선언합니다.

 

64가지 이름을 생성하는 함수

300명의 이름을 만들어서 컨테이너에 저장한 뒤, 컨테이너의 특성에 맞게 잘 작동하는지 확인합니다.

64가지 이름 중 63가지 이름만 나온 출력 결과

 

 

 

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

  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)
  빈틈없는 메모리
가장 높은 접근성능
가장 높은 순회 성능
빠른 중복 감지 중복 불허
키 벨류 관리
중복 허용
키 벨류 관리

 

 

 

참고 사이트(언리얼 문서)

https://docs.unrealengine.com/5.1/ko/using-structs-in-unreal-cpp/

 

구조체 사용하기

간단한 가이드로 구조체 사용을 시작합니다.

docs.unrealengine.com

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

 

TMap

TMap, 맵은 크게 키 유형과 값 유형, 두 가지로 정의되며, 맵에 하나의 짝으로 저장됩니다.

docs.unrealengine.com