Part1 10. 언리얼 컨테이너 라이브러리 UCL : TArray, TSet하고싶은거/Unreal2024. 3. 11. 18:42
Table of Contents
언리얼 컨테이너 라이브러리 UCL
- 언리얼 엔진이 제공하는 자료구조 라이브러리(언리얼C++이니까~)
- 다양한 라이브러리가 있는데, 그중 TArray, TSet, TMap을 가장 유용하게 사용한다.
(접두사 T는 Template의 T)
C++ STL | 언리얼 C++ UCL |
1. 범용적 2. 호환성 3. 많은 기능이 있으서 컴파일이 오래 걸림 |
1. 언리얼 엔진에 특화 2. UObject를 안정적으로 지원 3. 가볍과 게임 제작에 최적화 |
TArray
- STL의 vector 처럼 가변 배열(동적배열) 자료구조
- 장점
- 데이터가 순차적으로 모여있어 메모리 효과적, 캐시 효율↑
(특히 컴퓨터 사양이 좋아져서 캐시 지역성으로 인한 성능 향상이 중요해졌다.) - 임의 데이터 접근빠름(인덱스를 통해서, O(1)), 데이터 순회 가능
- 데이터가 순차적으로 모여있어 메모리 효과적, 캐시 효율↑
- 단점
- 중간 요소 추가(삽입), 삭제 비용이 큼(O(n))
- 데이터가 많을수록 검색, 삭제, 수정이 느림 (이럴 땐 TSet이 좋음)
※ 접근과 검색은 다르다!! 접근은 뭐 특정 데이터라던가 인덱스가 있을 때를 말하고, 검색은 말 그대로 찾는거야
접근 : 주소를 알고 있을 때, 검색 : 주소 모르고 그 데이터가 있는지도 모를때(그러니까 검색이지)
- TArray 원소 추가
- Add() : 밖에서 생성한 인스턴스(변수)를 배열에 추가
- Emplace() : TArray 자체에서 생성, 임시 변수를 사용하지 않아서 더 효율적이다.
- Append() : 한번에 여러 원소를 추가
- Insert() : 해당 인덱스에 추가
- 제거
- RemoveAll() : 조건에 일치하는 모든 원소를 제거
- Remove() : 입력한 값과 동일한 모든 원소 제거
- RemoveSingle() : 처음 일치한 엘리먼트만 제거
- RemoveAt() : 인덱스 접근으로 제거
- 원소를 제거하고 남은 메모리 공간, 기존에 있던 여유분을 slack이라고 부른다.
- 연산자 operator
- 일반적인 생성자 복사, 할당 연산자로 복사한다.
- Add처럼 동작
- 로우 메모리 접근
- AddUninitialized, InsertUninitialized() : 초기화되지 않은 데이터를 추가
- FMemory::Memcpy()를 사용해서 데이터를 덮을 것이기 때문에 초기화하는 낭비를 줄일 수 있다.
언리얼 엔진에서 알고리즘 라이브러리사용하기
Algo::Accumulate 함수를 사용해서 알고리즘을 이용할 수 있다.
TSet
- 순서가 중요하지 않은 상황에서 하나의 파라미터-데이터를 저장한다.
- 데이터 값 자체를 키로 사용(독립된 키로 데이터 값을 연결 X)
- 중복없는 데이터 집합을 구축하는데 유용
TSet은 접근, 검색, 삽입, 삭제가 매우 유용하다 (O(1)) : 해시테이블 형태로 키값을 구성하니까!
STL Set | TSet |
1. 이진트리 구성(자동 정렬 가능) 2. 이진트리이다보니, 메모리 구성 효율 X 3. 데이터가 삭제될 때 균형을 위한 재구축 4. 자료 순회에 적합 X |
1. 해시테이블 형태로 키데이터 구성(빠른 검색 가능) 2. 동적 배열 형태로 데이터 구성 3. 데이터가 삭제되도 재구축 X 4. 자료 순회 적합 O 5. 비어있는 데이터가 있을 수 있음 |
여기서 비어있는 데이터란?
동적 배열 내에 중간중간 빈 공간이 있을 수 있다는 뜻.
: 그래서 TArray와 다르게 TSet의 메모리 내 순서는 안정적 X, 신뢰성 X
: 이러한 구조를 sparse array(희소 배열)이라고 부른다. (데이터가 제거되면 빵꾸(간극)이 생기고 새로운 데이터가 메꾼다.)
TSet의 비어있는 배열 공간은 가장 마지막에 비어진 곳부터 채워진다.
여기서도 비어있는 배열 공간을 slack이라고 부른다.
TArray vs TSet
TArray
: 빈틈없는 메모리, 가장 높은 접근성능, 순회성능을 가진다.
TSet
: 빠른 중복을 감지한다.(검색능력이 탁월하다.)
'하고싶은거 > Unreal' 카테고리의 다른 글
Part1 12. 언리얼 엔진 메모리 관리 (0) | 2024.03.13 |
---|---|
Part1 11. 언리얼 컨테이너 라이브러리 UCL : UStruct, TMap (0) | 2024.03.11 |
Part1 09. 언리얼 C++ 설계 : 델리게이트 (0) | 2024.03.10 |
Part1 08. 언리얼 C++ 설계 : 컴포지션 (0) | 2024.03.10 |
Part1 07. 언리얼 C++ 설계 : 인터페이스 (0) | 2024.03.09 |
@ssIIIn :: 두 번째 저장공간
#개발 #게임 #일상
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!