그냥 게임개발자

언리얼 컨테이너 라이브러리 - TArray 본문

Unreal스터디/TArray

언리얼 컨테이너 라이브러리 - TArray

sudoju 2024. 1. 2. 22:30
언리얼 엔진이 자체적으로 제작해 제공하는 자료구조 라이브러리 줄여서 UCL(Unreal Container Libaray)라고도 한다.

C++ STL과 언리얼 컨테이너 라이브러리의 차이점

C++ STL은 범용적으로 설계되어 있고, 표준이기 때문에 호환성이 높다.

또한 많은 기능이 엮여 있어 include 하게 되면 컴파일 시간이 오래 걸린다.
하지만 언리얼 컨테이너 라이브러리는 가볍고 게임 제작에 최적화 되어 있고, 언리얼 오브젝트 구조를 안정적으로 지원한다.

 

주요 컨테이너 라이브러리는 3개로 간결할 수 있다.

 

C++과 언리얼 컨테이너 라이브러리 두 라이브러리의 이름과 용도는 유사하지만, 내부적으로는 다르게 구현이 되어 있다.

 

C++ Unreal
vector TArray
set TSet
map TMap

 

 

TArray

 

  • TArray는 가변 배열(Dynamic Array) 자료 구조
  • STL의 vector와 동작 원리가 유사하다.
  • 게임 제작에서는 가변 배열 자료구조를 효과적으로 활용하는 것이 좋음.
    • 데이터가 순차적으로 모여있기 때문에 메모리를 효과적으로 사용할 수 있고 캐시 효율이 높다.
    • 컴퓨터 사양이 좋아지면서 캐시 용량이 늘어나고, 캐시 지역성(Locality)으로 인한 성능 향상은 굉장히 중요해짐.
    • 임의 데이터의 접근이 빠르고, 고속으로 요소를 순회하는 것이 가능.
  • 가변 배열의 단점
    • 맨 끝에 데이터를 추가하는 것은 가볍지만, 중간에 요소를 추가하거나 삭제하는 작업은 비용이 큼
    • 데이터가 많아질 수록 검색, 삭제, 수정(중간에 데이터 추가) 작업이 느려지기 때문에, 많은 수의 데이터에서 검색 작업이 빈번하게 일어난다면 TArray 대신 TSet을 사용하는 것이 좋음.

Tarray 내부 구조

  • 데이터들이 빈틈없이 차곡차곡 배열되어 있다.
  • 배열을 시작하는 부분의 포인터를 GetData() 함수를 통해서 가져올 수 있다.
  • 끝에 추가하는 함수로는 Add/Emplace()나 Append()같은 함수가 있다.
  • 중간에 추가하는 Insert()같은 경우네는 전체적인 메모리를 변경해줘야 하기 때문에 비용이 많이 발생하며 Remove()함수 또한 마찬가지이다.
  • 인덱스 오퍼레이터 같이 특정한 인덱스를 주웠을 때 해당 인덱스를 빠르게 가져오는 작업은 균일한 데이터로 배열이 되어있기 때문에 바로 주소를 알 수 있어서 한번에 가져올 수 있음.

'Unreal스터디 > TArray' 카테고리의 다른 글

TArray - Insert  (0) 2024.01.02
TArray - Insert  (0) 2024.01.02
TArray - AddUnique  (0) 2024.01.02
TArray - Append  (0) 2024.01.02
TArray - Add/Emplace  (0) 2024.01.02