https://monstrosite.tistory.com/43
언리얼 C++ - 자료 구조 ~ TArray
언리얼 엔진은 자체 제작한 자료 구조 라이브러리 줄여서 UCL(Unreal Container Libarary)를 제공합니다.이는 언리얼 엔진을 안정적으로 지원하며 다수의 오브젝트 처리에 유용하게 사용할 수 있습니다.
monstrosite.tistory.com
위의 포스팅에서 이어지는 이번 포스팅에서는 언리얼 C++의 자료구조 중 하나인 TSet에 대해 알아보겠습니다.
TSet 역시 TArray와 마찬가지로 언리얼 엔진에서 제공되어 많이 사용되는 자료구조입니다.
1) TSet
TArray는 std::vector와 큰 차이점이 존재하지 않았습니다.
그러나 TSet은 std::set과는 큰 차이점이 존재하는데, 이를 유의하여야 합니다.
먼저 std::set의 특징을 알아보겠습니다.
- std::set은 이진 트리로 구성됩니다.
- 또한 메모리 구성이 효율적이지 않습니다.
- 트리로 구성되어 있는 특성 상 요소를 삭제하면 균형을 위해 재구축이 일어날 수 있습니다.
- 모든 자료를 순회하는데 적합하지 않습니다.
std::set의 특징을 간단하게 정리해보았습니다.
그리고 이번에는 TSet의 특징을 알아보겠습니다.
- 해시 테이블 키 형태로 데이터 값 자체를 키로 구축해 빠른 검색이 가능합니다.
- 동적 배열의 형태로 데이터가 모여 있어 메모리 구성이 효율적입니다.
- 트리로 구성되어 있지 않으므로 데이터를 삭제해도 재구축이 일어나지 않습니다.
- 자료에는 비어있는 데이터가 있을 수 있습니다.
TSet은 std::set과는 다른 방식으로 동작합니다.
하지만, 중요한 특징을 하나 공유하는데 set과 TSet 모두 중복없는 데이터 집합을 구축하는데 유용하다는 것입니다.
이 점은 TSet을 이용하는 이유 중 하나입니다.
TSet은 동적 배열로 구성되어 있지만, 비어있는 데이터가 있을 수 있습니다.
그 말은 데이터 배열에 빈틈이 존재할 수 있다는 것입니다.
그리고 이로 인해
메모리의 상대적인 순서는 신뢰성이 있거나 안정적이지 않을 수 있습니다.
또한 반복된 처리 결과도 처음의 순서와 다르게 반환될 수 있습니다.
이러한 점을 유의해야 합니다.
마지막으로 동적 배열 기반이므로 TSet 역시 슬랙이 발생합니다.
데이터 배열의 빈틈으로 인해
슬랙이 데이터 배열의 중간에 발생허거나 데이터의 뒷 부분에 발생할 수도 있다는 점도 염두해야 합니다.
2) TSet의 API
TArray와 마찬가지로 공식문서에서 더 자세한 설명과 더 많은 API를 설명하여 자세한 설명은 생략하겠습니다.
대신 자주 사용하는 API에 대해 간단하게 정리하겠습니다.
- Add() : 새로운 원소를 추가, 단 순서는 보장할 수 없음
- Emplace() : 새로운 원소를 추가(Add에 비해 복사비용이 저렴)
- Num() : 원소의 수를 리턴
- Contains() : 원소가 포함되어 있는지 여부를 bool로 리턴
- Find() : 원소가 포함되어 있다면 원소의 포인터를 리턴, 없다면 nullptr 리턴
3) TSet의 내부구조
4) TSet의 시간복잡도
5) TSet의 사용예시
이제 간단한 예시를 통해 TSet을 사용하는 방법을 알아보도록 하겠습니다.
코드는 위와 같고 이제 실행결과를 확인해보겠습니다.
실행결과는 위와 같습니다.
TSet은 게임 내에서 고유한 데이터를 다뤄야 할 때 매우 유용하게 사용가능합니다.
게임의 규모가 커질수록 고유 데이터는 거대한 데이터 뭉치의 키 역할을 하기 때문에 TSet의 중요도는 높아집니다.
이런 상황에서 TSet의 유용함과 특징을 잘 알고 있다면 큰 도움이 될 것입니다.
'언리얼 > 언리얼 C++' 카테고리의 다른 글
언리얼 C++ - 구조체 (0) | 2024.07.27 |
---|---|
언리얼 C++ - 자료 구조 ~ TMap (0) | 2024.07.20 |
언리얼 C++ - 자료 구조 ~ TArray (0) | 2024.07.20 |
언리얼 C++ - 델리게이트 (0) | 2024.07.13 |
언리얼 C++ - 컴포지션 (0) | 2024.07.07 |