언리얼/언리얼 C++

언리얼 C++ - 자료 구조 ~ TArray

monstro 2024. 7. 20. 15:39
728x90
반응형

언리얼 엔진은 자체 제작한 자료 구조 라이브러리 줄여서 UCL(Unreal Container Libarary)를 제공합니다.

이는 언리얼 엔진을 안정적으로 지원하며 다수의 오브젝트 처리에 유용하게 사용할 수 있습니다.

이번 포스팅에서는 언리얼 엔진의 자료 구조에서 TArray에 대해 알아보겠습니다.

 

1) TArray

TArray는 동적 배열 자료구조입니다. 다시 말해 C++의 std::vector와 유사한 성격을 가집니다.

 

게임을 제작하는 경우에 동적 배열 자료구조를 효과적으로 활용하는 것이 좋은데, 이유는 다음과 같습니다.

 

  1.  데이터가 순차적으로 모여있어 메모리를 효과적으로 사용가능하고 또 캐시 효율이 높습니다.
  2. 임의의 데이터에 대한 접근이 빠르고, 빠른 속도로 원소를 순회하는 것이 가능합니다.

위의 특징에서 알 수 있듯이 TArray는 std::vector와 유사한 특징을 갖고 있습니다.

그렇기에 단점마저도 비슷한데,

 

자료구조의 끝에 데이터를 추가하는 것은 빠르지만, 중간에 삽입-삭제를 하는 것은 비용이 많이 요구됩니다.

데이터의 수가 많다면 검색에 필요한 시간도 그만큼 증가합니다.

따라서 데이터의 수가 많고 검색 작업도 빈번한 경우에는

가급적 TArray보다는 이후 설명드릴 TSet을 사용하는 것이 좋습니다.

 

2) TArray 관련 API

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/array-containers-in-unreal-engine

 

API에 관련된 설명은 공식문서에서의 설명이 훨씬 다양하고 자세합니다.

따라서 자주 사용하는 API에 대해 간략하게 설명드리고 다음으로 넘어가보겠습니다.

 

  1. Add : 외부에서 데이터를 복사하여 TArray에 삽입
  2. Emplace : TArray 내부에 데이터를 생성(Add에 비해 복사 비용이 발생하지 않음)
  3. Insert / Remove : TArray 중간에 데이터를 삽입 / 삭제
  4. Num : 원소의 개수를 구함
  5. GetData : TArray 내의 원소에 대한 포인터를 반환

 

3) TArray 내부 구조

 

TArray에서 데이터 배열은 메모리가 빈틈없이 순차적으로 이어집니다.

또한 생성 시에 설계자가 지정한 메모리보다 더 많은 여유분의 메모리를 가져가게 됩니다.

이를 슬랙이라고 하는데, 이러한 슬랙도 메모리를 아끼기 위해 삭제하는 것도 가능합니다.

 

마지막으로,

TArray에서의 원소를 삭제하는 것은 메모리를 삭제하는 것이 아닌 빈 공간으로 만드는 것을 의미합니다.

 

4) TArray 사용 예시

*에디터 종료는 check입니다, ensure는 로그 메세지를 띄웁니다. 필요하다면 수정하여 적용해주세요*

 

최종적인 실핼 결과는 다음과 같습니다.

 

 

 

마지막으로 TArray를 사용하는 경우의 시간 복잡도와 특징을 정리해보고 포스팅을 마치겠습니다.

 

 

TArray는 게임을 개발할 때 가장 많이 사용하는 자료구조 중 하나입니다.

이러한 TArray의 특징을 명확히 이해하고 사용한다면 개발에 많은 도움을 얻을 수 있을 것입니다.

728x90
반응형

'언리얼 > 언리얼 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