본문으로 바로가기

[C#] 동적 배열 (Dynamic Array)

category Program/C# 2019. 1. 23. 16:55
환경 : Visual Studio 2015

자료구조 : 동적 배열 (Dynamic Array) 

배열은 고정된 크기의 연속된 배열요소들의 집합이므로 배열을 초기화 할 때 총 배열 요소의 수를 미리 지정해야 한다. 하지만 경우에 따라 배열요소가 몇 개나 필요한 지 미리 알 수 없는 경우가 있으며, 중간에 필요에 따라 배열을 확장해야 하는 경우도 있다. .NET에는 이러한 동적 배열을 지원하는 클래스로 ArrayList와 List<T>이 있다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    static void Main(string[] args)
        {
            //ArrayList 클래스
            ArrayList myList = new ArrayList();
            myList.Add(90);
            myList.Add(80);
            myList.Add(70);
            int val = (int)myList[1];
            System.Console.Write(val+"\n\n"); // 80 출력
 
            //List<T> 클래스
            List<int> myList2 = new List<int>();
            myList2.Add(50);
            myList2.Add(40);
            myList2.Add(30);
            int val2 = myList2[0];
            System.Console.Write(val2 + "\n\n"); // 50 출력
        }
cs


ArrayList 클래스 

ArrayList는 모든 배열 요소가 object 타입인 Non-generic 동적 배열 클래스이다. .NET의 Non-generic 클래스들은 System.Collections 네임스페이스 안에 있으며, 단점으로 박싱 / 언박싱이 일어나게 된다. ArrayList는 배열 요소를 읽어 사용할 때 object를 리턴하므로 일반적으로 원하는 타입으로 먼저 캐스팅(Casting)한 후 사용하게 된다. 

List<T> 클래스 

List<T>는 배열요소가 T 타입인 Generics로서 동적 배열을 지원하는 클래스이다. .NET의 Generic 클래스들은 System.Collections.Generic 네임스페이스 안에 있다. List클래스는 내부적으로 배열을 가지고 있으며, 동일한(Homogeneous) 타입의 데이타를 저장한다. 만약 미리 할당된 배열 크기(Capacity라 부른다)가 부족하면 내부적으로 배열을 2배로 늘려 동적으로 배열을 확장한다. ArrayList와 다르게 캐스팅을 할 필요가 없으며, 박싱 / 언박싱의 문제를 발생시키지 않는다.


'Program > C#' 카테고리의 다른 글

[C#] 해시테이블 (Hash Table)  (0) 2019.01.23
[C#] 링크드 리스트 (Linked List)  (0) 2019.01.23
[C#] 기초 실력 체크 테스트  (0) 2019.01.23
[C#] Nullable 타입의 도입  (0) 2019.01.23
[C#] MVC View  (0) 2019.01.23