![Part1 10. 언리얼 컨테이너 라이브러리 UCL : TArray, TSet](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkEqEq%2FbtsFFQdohmg%2Fk3h92YOw0KtFjZv8JuMMlk%2Fimg.png)
Part1 10. 언리얼 컨테이너 라이브러리 UCL : TArray, TSet개발/GAME CLIENT2024. 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: 언리얼 엔진의 배열
docs.unrealengine.com
- 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
TSet, 세트는 보통 순서가 중요치 않은 상황에서 고유 엘리먼트를 저장하는 데 사용되는 고속 컨테이너 클래스입니다.
docs.unrealengine.com
TSet의 비어있는 배열 공간은 가장 마지막에 비어진 곳부터 채워진다.
여기서도 비어있는 배열 공간을 slack이라고 부른다.
TArray vs TSet
TArray
: 빈틈없는 메모리, 가장 높은 접근성능, 순회성능을 가진다.
TSet
: 빠른 중복을 감지한다.(검색능력이 탁월하다.)
'개발 > GAME CLIENT' 카테고리의 다른 글
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 :: 두 번째 저장공간
이것저것 기억하고 싶은거 글쓰는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!