[C#] 자료구조 - 배열과 동적배열 (Dynamic Array)

2022. 5. 27. 15:39C#/자료구조

이 포스팅은 눈코딩님의 유튜브 영상을 보고 정리한 글입니다.

 

배열 

 

데이터 구조에 형식이 동일한 변수를 여러 개 저장할 수 있다.

 

ex) 

int[] scores = new int[3];

 

배열 요소 형식은 배열 형식을 비롯한 어떤 형식도 될 수 있다.

숫자 배열 요소의 기본값은 0으로 설정된다.

참조 요소는 null로 설정된다.

배열 형식은 추상 기본 형식에서 파생된 참조 형식이기 때문에,

가변 배열의 기본 값은 null로 설정된다.

 

ex)

string[] names = new string[3];

 

names[0] == null;

names[1] == null;

names[2] == null;

 

 

차원 수와 각 차원의 길이는 배열 인스턴스를 만들 때 설정되고,

이렇게 설정된 값은 인스턴스의 수명 동안 변경할 수 없다.

 

배열 요소는 인덱싱 된다.

n 개의 요소를 가진 배열은 0부터 n - 1로 인덱싱 된다.

 

배열은 단일 차원, 다차원 또는 가변일 수 있다.

 

다차원 배열(2차원)

 

가변 배열

가변 배열은 여러 배열로 구성되어 있기 때문에

해당 요소가 참조 형식이며, null로 초기화된다.

 

동적 배열

 

필요 시 배열의 크기를 확장하거나 축소하는 기능을 갖는 배열

http://www.csharpstudy.com/DS/dynamic-array.aspx

 

동적배열 (D-Array) - C# 프로그래밍 배우기 (Learn C# Programming)

자료구조 : 동적 배열 (Dynamic Array) 배열은 고정된 크기의 연속된 배열요소들의 집합이므로 배열을 초기화 할 때 총 배열 요소의 수를 미리 지정해야 한다. 하지만 경우에 따라 배열요소가 몇 개

www.csharpstudy.com

.NET 에는 동적배열을 지원하는 클래스로 ArrayList와 List<T> 가 있다.

이들 동적 배열 클래스들은 배열 확장이 필요한 경우,

내부적으로 배열 크기가 2배인 새로운 배열을 생성하고 모든 기존 배열 요소들을

새로운 배열에 복사한 후 기존 배열을 해제한다.

동적 배열의 Time Complexity는 배열과 같이 인덱스를 통할 경우 0(1),

값으로 검색할 경우 0(n)을 갖는다.

 

 

ArrayList 클래스 :

ArrayList는 모든 배열 요소가 object 타입인 Non-generic 동적 배열 클래스이다.

.NET의 Non-generic 클래스들은 박싱/언박싱이 일어나게 된다는 단점이 있다.

ArrayList는 배열 요소를 읽어 사용할 때 object를 반환하므로

일반적으로 원하는 타입으로 먼저 캐스팅을 한 후 사용하게 되기 때문이다.

 

 

List<T> 클래스 :

List<T>는 배열요소가  T 타입인 Generics로써 동적 배열을 지원하는 클래스이다.

List클래스는 내부적으로 배열을 가지고 있으며,

동일한 타입의 데이터를 저장한다.

만약 미리 할당된 배열 크기(Capacity)가 부족하면 내부적으로 배열을 2배로 늘려

동적으로 배열을 확장한다.ArrayList와 다르게 캐스팅을 할 필요가 없으므로, 박싱/언박싱의 문제를 발생시키지 않는다.

'C# > 자료구조' 카테고리의 다른 글

[C# 자료구조] 동적 배열 구현 방식과 시간 복잡도  (0) 2022.08.02
[C#] new 연산자, boxing  (0) 2022.02.12