• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

언리얼 엔진 C++ 가변 배열에 대해서

24.06.25 18:35 작성 조회수 41

0

저는 최근에 면접 키워드를 정리하면서 가변 배열에 대해 알게되었는데 정보가 너무 오락가락이여서 여쭈어 봅니다.

C#의 가변배열을(Jegged Array) 라 불리고
보통 영어로 번역하면 Variable Array 변하는 배열 이라고도 하는데.

Dynamic Array가 현재 TArray 개요에서 나오는데
이것은 동적 배열을 의미해서 해당 C++에서 new와 malloc과 같은 방식의 할당 방식을 의미하는 것이라고 알고 있는데,

위와 같이 모든 어원적 의미는 다 동일한 것인가요?


C++ 가변 배열은 결국 구조체를 생성해서 해야하는 것인지?
아니면 그냥 C++자체적으로 구현하는 방법이 있는 것인지.

1. Jagged Array, Variable Array, Dynamic Array는 모두 같은 가변배열인 것인지.
2. C++ 에서 말하는 가변배열이 언리얼 에서 말하는 TArray의 가변배열과 동일한 것인지.


답변 1

답변을 작성해보세요.

1

음.. 우선은 몇 가지 개념 정리가 필요하겠네요.

[정적 배열(static array or fixed array) vs 동적 배열(dynamic array or variable array)]
정적 배열은 선언시에(컴파일타임) 크기가 확정되는 배열이며, 이후 크기 변경이 불가합니다. 그래서 정적 혹은 고정 배열이라는 용어를 사용합니다. 반면에 동적 배열은 사용시에(런타임) 언제든지 크기 조절이 가능한 배열입니다. 그래서 동적 혹은 가변 배열이라는 말을 사용합니다. 즉 동적 배열과 가변 배열은 동의어입니다.
이러한 동적 배열은 보통 메모리 사용량이 크기 때문에, 힙 영역에 데이터를 배치하는 것이 일반적입니다. 다만 그렇다고 동적 배열이 무조건 힙을 사용해야 해야한다는 것은 아닙니다.

저장공간이 스택이냐 힙이냐인 것과 배열의 크기가 컴파일 타임에서 확정인가는 서로 다른 개념입니다.

 

[가변 길이 배열(jagged array)]

jagged는 들쑥날쑥함을 의미하는 용어입니다.
2차원 이상의 배열 내 배열을 구성할 때, 배열의 요소의 길이를 마음대로 조절할 수 있어서 가변 길이 배열이라고 합니다. 한글로 검색해보니 어떤 페이지에서 가변 배열이라고도 쓰는 곳을 봤는데, 이는 가변 길이 배열의 오타가 아닌가 생각됩니다. 그래서 위의 동적 배열과 개념이 혼동되셨던게 아닌가 보여지네요.
솔직히 가변 길이 배열보다 아래 그림처럼 원어 그대로 들쑥날쑥 배열이라고 하는게 의미 전달이 잘 되지 않나 생각합니다.

image(출처 : https://en.wikipedia.org/wiki/Jagged_array )


아무튼 jagged array는 배열 내의 배열 즉 2차원 이상의 배열의 형태를 지칭할 때 사용하는 개념입니다.
정적 배열 내 정적 배열을 선언하면, 항상 고정된 사각형의 형태가 만들어지는데 비해, 동적 배열 내 동적 배열을 사용하면 들쑥날쑥한 형태가 만들어지기 떄문에 jagged array라고 지칭합니다. 따라서 jagged array는 동적 배열 또는 가변 배열과 밀접한 관련이 있지만, 그렇다고 가변 배열(variable array) 또는 동적 배열(dynamic array)과의 동의어는 아닙니다.

 

[TArray]

C++에서 동적 배열(또는 가변 배열)을 사용하는 방법으로는 malloc을 사용해 힙을 직접 건드리는 방법도 있지만, 가장 대표적이고 권장되는 방법으로는 STL의 vector를 사용하는 것입니다.
다만 언리얼 엔진은 C++을 사용하지만 STL을 사용하는 것을 권장하지 않으므로, STL의 vector를 대신해 제공하는 TArray를 사용한다고 이해해주시면 되겠습니다.

 

 

 

우오오오오오오오 감사합니다 교수님 ^^ 😊 드디어 ...

채널톡 아이콘