언리얼 컨테이너 라이브러리 - 구조체, Map
[이득우의 언리얼 프로그래밍 수업의 정리]
언리얼 구조체 UStruct
- 데이터 저장/전송에 특화된 가벼운 객체
- 대부분 GENERATED_BODY 매크로 선언
-> 리플렉션, 직렬화 같은 유용한 기능 지원
-> 위의 매크로를 선언한 구조체는 UScriptStruct 클래스로 구현됨
-> 이 경우 제한적으로 리플렉션 지원 (속성 UPROPERTY만 선언, 함수 UFUCTION은 선언x)
언리얼 엔진의 구조체 이름은 F로 시작
-> 대부분 힙 메모리 할당(포인터 연산) 없이 스택 내 데이터로 사용됨.
-> NewObject API 사용할 수 없음
STL map
-> STL set과 마찬가지로 이진 트리로 구성됨
-> 메모리 구성 효율적이지 않고 데이터 삭제시 재구축 발생, 모든 자료 순회하는데 적합x
TMap
-> 키, 밸류 구성의 Tuple 데이터의 TSet 구조로 구현됨
-> 해시테이블 형태로 빠른 검색 가능
-> 동적 배열 형태로 빠르게 순회 가능, 데이터 삭제시 재구축x
-> TMultiMap 사용해 중복 데이터도 관리 가능
-> TPair<Key, Value>
람다함수에서 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 |