언리얼 엔진은 자체 제작한 자료 구조 라이브러리 줄여서 UCL(Unreal Container Libarary)를 제공합니다.
이는 언리얼 엔진을 안정적으로 지원하며 다수의 오브젝트 처리에 유용하게 사용할 수 있습니다.
이번 포스팅에서는 언리얼 엔진의 자료 구조에서 TArray에 대해 알아보겠습니다.
1) TArray
TArray는 동적 배열 자료구조입니다. 다시 말해 C++의 std::vector와 유사한 성격을 가집니다.
게임을 제작하는 경우에 동적 배열 자료구조를 효과적으로 활용하는 것이 좋은데, 이유는 다음과 같습니다.
- 데이터가 순차적으로 모여있어 메모리를 효과적으로 사용가능하고 또 캐시 효율이 높습니다.
- 임의의 데이터에 대한 접근이 빠르고, 빠른 속도로 원소를 순회하는 것이 가능합니다.
위의 특징에서 알 수 있듯이 TArray는 std::vector와 유사한 특징을 갖고 있습니다.
그렇기에 단점마저도 비슷한데,
자료구조의 끝에 데이터를 추가하는 것은 빠르지만, 중간에 삽입-삭제를 하는 것은 비용이 많이 요구됩니다.
또 데이터의 수가 많다면 검색에 필요한 시간도 그만큼 증가합니다.
따라서 데이터의 수가 많고 검색 작업도 빈번한 경우에는
가급적 TArray보다는 이후 설명드릴 TSet을 사용하는 것이 좋습니다.
2) TArray 관련 API
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/array-containers-in-unreal-engine
API에 관련된 설명은 공식문서에서의 설명이 훨씬 다양하고 자세합니다.
따라서 자주 사용하는 API에 대해 간략하게 설명드리고 다음으로 넘어가보겠습니다.
- Add : 외부에서 데이터를 복사하여 TArray에 삽입
- Emplace : TArray 내부에 데이터를 생성(Add에 비해 복사 비용이 발생하지 않음)
- Insert / Remove : TArray 중간에 데이터를 삽입 / 삭제
- Num : 원소의 개수를 구함
- GetData : TArray 내의 원소에 대한 포인터를 반환
3) TArray 내부 구조
TArray에서 데이터 배열은 메모리가 빈틈없이 순차적으로 이어집니다.
또한 생성 시에 설계자가 지정한 메모리보다 더 많은 여유분의 메모리를 가져가게 됩니다.
이를 슬랙이라고 하는데, 이러한 슬랙도 메모리를 아끼기 위해 삭제하는 것도 가능합니다.
마지막으로,
TArray에서의 원소를 삭제하는 것은 메모리를 삭제하는 것이 아닌 빈 공간으로 만드는 것을 의미합니다.
4) TArray 사용 예시
최종적인 실핼 결과는 다음과 같습니다.
마지막으로 TArray를 사용하는 경우의 시간 복잡도와 특징을 정리해보고 포스팅을 마치겠습니다.
TArray는 게임을 개발할 때 가장 많이 사용하는 자료구조 중 하나입니다.
이러한 TArray의 특징을 명확히 이해하고 사용한다면 개발에 많은 도움을 얻을 수 있을 것입니다.
'언리얼 > 언리얼 C++' 카테고리의 다른 글
언리얼 C++ - 자료 구조 ~ TMap (0) | 2024.07.20 |
---|---|
언리얼 C++ - 자료 구조 ~ TSet (0) | 2024.07.20 |
언리얼 C++ - 델리게이트 (0) | 2024.07.13 |
언리얼 C++ - 컴포지션 (0) | 2024.07.07 |
언리얼 C++ - 인터페이스 (0) | 2024.06.30 |