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

Unreal 이론|2024. 8. 20. 17:56

[이득우의 언리얼 프로그래밍 수업의 정리]

 

언리얼 구조체 UStruct

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

- 대부분 GENERATED_BODY 매크로 선언

    -> 리플렉션, 직렬화 같은 유용한 기능 지원

    -> 위의 매크로를 선언한 구조체는 UScriptStruct 클래스로 구현됨

    -> 이 경우 제한적으로 리플렉션 지원 (속성 UPROPERTY만 선언, 함수 UFUCTION은 선언x)

언리얼 엔진의 구조체 이름은 F로 시작

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

-> NewObject API 사용할 수 없음

헤더파일에 작성한 FStudentData 구조체.

 

FStudentData라는 구조체를 TArray에 Emplace로 채워넣는다. 대충 이렇게 쓴다

 

STL map

-> STL set과 마찬가지로 이진 트리로 구성됨

-> 메모리 구성 효율적이지 않고 데이터 삭제시 재구축 발생, 모든 자료 순회하는데 적합x

 

TMap

-> 키, 밸류 구성의 Tuple 데이터의 TSet 구조로 구현됨

-> 해시테이블 형태로 빠른 검색 가능

-> 동적 배열 형태로 빠르게 순회 가능, 데이터 삭제시 재구축x

-> TMultiMap 사용해 중복 데이터도 관리 가능

-> TPair<Key, Value>

TMap은 Unreal Object가 없다면 UPROPERTY 안해도 된다

 

언리얼 구조체를 TMap으로 변환하는 로직.

 

람다함수에서 TMap과 구조가 같은 TPair를 사용해 구조체를 TMap으로 변환한다.

 

TSet에 구조체를 집어넣기 위해서는 GetTypeHash함수를 사용해 해시값을 만들어 줘야한다.

요런 느낌

 

그래서 각 자료구조의 시간복잡도는?

  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은

중복x, 키 밸류 관리 -> 가장 쉽게 자료 검색 가능. TArray다음으로 많이 사용된다.

TMultiMap은

중복o, 키 밸류 관리

 

클라이언트의 로컬 컴퓨터의 성능을 최대한 끌어내야하며, 네트워크 부하를 최대한 줄여 각 클라이언트에게 동일한 경험을 주는것이 게임의 과제이니 만큼 상황에 따른 적절한 자료구조를 사용해야 할것 같다.

'Unreal 이론' 카테고리의 다른 글

언리얼 엔진의 메모리 관리  (1) 2024.09.05
언리얼 네트워킹 개요  (3) 2024.09.02
언리얼 컨테이너 라이브러리 - Array, Set  (0) 2024.08.14
언리얼 델리게이트  (0) 2024.08.14
언리얼 컴포지션  (0) 2024.08.13

댓글()