Recent Post

Recent Comment

Archive

2020. 8. 3. 23:27 C#
ArrayList
Type Class
Namespace System.Collections

 

크기가 동적으로 변하는 배열이다.

 

var arrayList = new ArrayList();

위와 같이 ArrayList의 인스턴스를 생성하여 사용할 수 있다.

 

ArrayList.Add(object obj) 메서드로 아래와 같이 배열의 가장 마지막 위치에 요소를 추가한다.

arrayList.Add(10);

arrayList.Add(10.5);

 

ArrayList.Insert(int index, object obj) 메서드로 배열의 특정 위치에 요소를 삽입한다.

arrayList.Insert(0, "abc");

 

ArrayList.RemoveAt(int index) 메서드로 배열의 특정 위치의 요소를 삭제한다.

arrayList.RemoveAt(1);

 

ArrayList의 요소에 접근할 때는 foreach문을 활용하여 접근할 수 있다.

foreach(obejct obj in arrayList)

{

    Console.WriteLine(obj.ToString());

}

 

object 타입으로 인덱서를 제공하기 때문에 아래와 같이 인덱스를 사용하여 접근도 가능하다.

for(var i = 0; i < arrayList.Count; i++)

{

    Console.WriteLine(arrayList[i].ToString());

}

 

위와 같이 ArrayList 배열은 object 형식 데이터를 다루도록 설계되어 있고, object 형식이 아닌 데이터를 추가하더라도 object 형식으로 박싱 되어 저장된다. 즉, 자료형에 관계없이 모든 데이터를 추가할 수 있다고 볼 수 있다. 매우 좋은 기능처럼 보이지만 사실 권장되는 방법은 아니다.

어떤 데이터가 object 형식으로 저장될 때는 박싱이 발생하고, object 형식 데이터를 사용하기 위해서는 언박싱이 발생한다. 박싱/언박싱은 속도 저하를 유발하게 될 것이고, 더 큰 문제로는 모든 데이터가 object 형식으로 변환되어 저장되기 때문에 여러 타입의 요소가 뒤죽박죽 섞인 ArrayList를 다룰 때, 데이터의 타입에 있어서 안전하지 않은 코드가 된다는 점이다. 저장된 요소의 원본 타입을 사용자가 알기 힘들기 때문이다.

 

결론 : 차라리 제네릭 List<T>를 사용하는 것이 좋다.

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

Test  (0) 2022.05.10
사용자 정의 형변환 (implicit, explicit)  (0) 2020.08.06
Parallel.For()  (0) 2020.08.03
posted by Dv Jm