Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 유니티
- DFS
- 시리얼라이제이션
- upper_bound
- binary_search
- fsm
- unreal
- 안드로이드
- 알고리즘
- c++
- 백준
- 너비우선탐색
- 게임개발
- lower_bound
- 구현
- 이분탐색
- 인프런
- 이득우
- 게임개발공모전
- unity
- 운영체제
- 웅진씽크빅
- 재귀
- 개발일지
- 언리얼
- UI 자동화
- 프로그래머스
- BFS
- c#
- 유한상태기계
Archives
- Today
- Total
초고교급 희망
[10강] 언리얼 컨테이너 라이브러리 1 - Array와 Set 본문
728x90
강의 내용
언리얼에서 제공하는 대표 컨테이너 라이브러리의 동작 원리와 활용 방법을 예제를 통해 살펴보기
강의 목표
- 언리얼 대표 컨테이너 라이브러리 TArray, TSet의 내부 구조 이해
- 각 컨테이너 라이브러리의 장단점을 파악하고, 알맞게 활용하는 방법의 학
언리얼 컨테이너 라이브러리
- 언리얼 엔진이 자체 제작해 제공하는 자료구조 라이브러리
- 줄여서 UCL(Unreal Container Library)라고도 함.
- 언리얼 오브젝트를 안정적으로 지원하며 다수 오브젝트 처리에 유용하게 사용됨.
- 언리얼 C++은 다양한 자료구조 라이브러리를 직접 만들어 제공하고 있음.
- 실제 게임 제작에 유용하게 사용되는 라이브러리로 TArray, TMap, TSet를 추천함.
- 접두사 T는 템플릿 라이브러리를 의미한다.
C++ STL과 언리얼 컨테이너 라이브러리의 차이점
- C++ STL은 범용적으로 설계되어 있다.
- C++ STL은 표준이기 때문에 호환성이 높다.
- C++ STL에는 많은 기능이 엮여 있어 컴파일 시간이 오래 걸림.
- 언리얼 컨테이너 라이브러리는 언리얼 엔진에 특화되어 있음.
- 언리얼 컨테이너 라이브러리는 언리얼 오브젝트 구조를 안정적으로 지원한다.
- 언리얼 컨테이너 라이브러리는 가볍고 게임 제작에 최적화되어 있음.
언리얼 C++ 주요 컨테이너 라이브러리
두 라이브러리의 이름과 용도는 유사하지만, 내부적으로 다르게 구현되어 있음.
- TArray : 오브젝트를 순서대로 담아 효율적으로 관리하는 용도로 사용
- TSet : 중복되지 않는 요소로 구성된 집합을 만드는 용도로 사용
- TMap : 키, 밸류 조합의 레코드를 관리하는 용도로 사용
vector와 Tarray는 유사하지만,
set과 TSet, map과 TMap은 내부적으로는 다르게 구현이 되어있다.
TArray
- 가변 배열 (Dynamic Array) 자료구조
- STL의 vector와 동작 원리가 유사함
- 게임 제작에서는 가변 배열 자료구조를 효과적으로 사용하는 것이 좋음.
- 데이터가 순차적으로 모여있기 때문에 메모리를 효과적으로 사용할 수 있고, 캐시 효율이 높다.
- 컴퓨터 사양이 좋아지면서, 캐시 지역성(Locality)으로 인한 성능 향상은 굉장히 중요해짐.
- 임의 데이터의 접근이 빠르고, 고속으로 요소를 순회하는 것이 가능.
- 가변 배열의 단점
- 맨 끝에 데이터를 추가하는 것은 가볍지만, 중간에 요소를 추가하거나 삭제하는 작업은 비용이 큼.
- 데이터가 많아질 수록 검색, 삭제, 수정 작업이 느려지기 때문에, 많은 수의 데이터에서 검색 작업이 빈번하게 일어난다면 TArray 대신 TSet을 사용하는 것이 좋음.
내부구조
같은 규격을 가진 데이터들이 빈틈없이 차곡차곡 배열되어 있다.
배열을 시작하는 부분의 포인터를 getData 함수를 통해서 가져올 수가 있다.
끝에 추가하는 함수로는 Add, Emplace, Append 함수가 있다.
중간에 추가하는 Insert 함수는 전체적인 메모리를 변경해줘야 하기 때문에 비용이 많이 발생한다. Remove 함수도 마찬가지.
특정한 인덱스가 주어졌을 때 해당 인덱스를 빠르게 가져오는 작업은 균일한 데이터로 배열이 되어 있기 때문에 바로 주소를 알 수 있어서 한 번에 가져올 수가 있다.
공식 문서에서 설명한 TArray
- 신속성, 메모리 효율성, 안전성을 염두에 두고 디자인 됨
- 엘리먼트 유형(타입, 배열에 저장되는 오브젝트 유)과 얼로케이터(allocator)(메모리를 어떻게 관리하는지에 대해서 지정한 것)라는 두가지 프로퍼티로 정의됨.
- 값 유형으로 동적 할당을 하지 않는다. New나 Delete로 생성하거나 소멸시키는 것은 좋지 않다.
TSet
- STL의 set과 언리얼 TSet의 비교
- STL set의 특징
- 이진 트리로 구성되어 있어 정렬을 지원함
- 메모리 구성이 효율적이지 않음
- 요소가 삭제될 때 균형을 위한 재구축이 일어날 수 있음
- 모든 자료를 순회하는데 적합하지 않음
- 언리얼 Tset의 특징
- 해시 테이블 형태로 키 데이터가 구축되어 있어 빠른 검색이 가능함.
- 동적 배열의 형태로 데이터가 모여있음
- 데이터를 빠르게 순회할 수 있음
- 데이터를 삭제해도 재구축이 일어나지 않음
- 자료에는 비어있는 데이터가 있을 수 있음
- 활용 방법이 서로 다르기 때문에 주의
- STL의 unordered_set과 유사하게 동작하지만 동일하진 않다.
- TSet은 중복 없는 데이터 집합을 구축하는데 유용하게 사용 가능
- STL set의 특징
내부구조
동적 가변 배열의 형태
중간중간 데이터가 빠져 있을 수도 있다
내부적으로 해시테이블로 구성 -> 빠르게 검색 가능
데이터를 추가할 때는 비어있는 부분을 빠르게 메꾸는 형태
데이터가 빠져있긴 하지만 모여있어서 빠른 순회 가능
728x90
'Game > Unreal' 카테고리의 다른 글
[13강] 언리얼 직렬화 (0) | 2024.02.08 |
---|---|
[9강] 언리얼 C++ 설계 3 - 델리게이트 (0) | 2023.12.27 |
[8강] 언리얼 C++ 설계 2 - 컴포지션 (1) | 2023.12.27 |