C#은 개발자의 편의를 위해 다양한 내장 데이터 구조를 제공합니다. 그중에서도 가장 널리 사용되는 두 가지 컬렉션인 List와 ArrayList의 특징과 사용법을 살펴보겠습니다.
1. List<T>
제네릭 List<T>는 타입에 안전한(type-safe) 제네릭 컬렉션입니다. 반면 ArrayList는 비제네릭(non-generic) 컬렉션으로, 서로 다른 데이터 타입의 요소를 함께 저장할 수 있습니다.
배열(Array)과 달리 List는 크기가 고정되어 있지 않아 요소를 추가할 때마다 동적으로 크기가 늘어납니다. 이러한 유연성 덕분에 저장할 요소의 개수를 미리 알 수 없는 상황에서 특히 유용합니다.
List 선언 예제
List<string> myList = new List<string>();
위 코드처럼 문자열을 저장하는 List를 간단하게 선언할 수 있습니다. 제네릭 타입 매개변수 <T>에 원하는 자료형을 지정하면 해당 타입만 저장하는 강력한 형식의 컬렉션이 됩니다.
2. ArrayList
ArrayList는 개별적으로 인덱싱(indexing)이 가능한 객체들의 순서 있는 컬렉션을 나타냅니다. 내부적으로는 배열을 사용하지만, 필요에 따라 크기가 자동으로 조절됩니다.
ArrayList 선언 및 사용 예제
ArrayList arr = new ArrayList(); arr.Add(67); arr.Add(34); arr.Add(99); arr.Add(45);
Add() 메서드를 사용하면 요소를 순차적으로 추가할 수 있습니다. ArrayList는 object 타입을 저장하기 때문에 정수, 문자열 등 어떤 타입이든 담을 수 있지만, 값을 꺼낼 때마다 형 변환(casting)이 필요하고 타입 안정성이 떨어진다는 단점이 있습니다.
List vs ArrayList, 무엇을 사용해야 할까?
일반적으로는 타입 안정성과 성능 면에서 우수한 제네릭 List<T>를 사용하는 것이 권장됩니다. 값 타입을 저장할 때 박싱(boxing)과 언박싱(unboxing) 오버헤드가 발생하지 않고, 컴파일 시점에 타입 오류를 미리 잡아낼 수 있기 때문입니다. ArrayList는 주로 .NET 초기 버전과의 호환성이 필요한 경우에 사용됩니다.