Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 컬렉션(Collection) 완벽 정리: 종류별 특징과 사용 예제

컬렉션(Collection) 클래스는 데이터의 저장과 검색에 특화된 전용 클래스입니다. 스택(Stack), 큐(Queue), 리스트(List), 해시 테이블(Hashtable) 등 다양한 자료구조를 지원하며, 대부분의 컬렉션 클래스가 동일한 인터페이스를 구현하고 있어 일관된 방식으로 사용할 수 있다는 장점이 있습니다.

C#의 주요 컬렉션 클래스는 System.Collections 네임스페이스에 포함되어 있으며, 그 종류는 다음과 같습니다.

C#의 주요 컬렉션 클래스

ArrayList

ArrayList는 객체를 순서대로 저장하는 동적 배열 형태의 컬렉션입니다. 각 요소에 인덱스를 통해 개별적으로 접근할 수 있으며, 요소가 추가될 때마다 필요에 따라 크기가 자동으로 확장됩니다.

Hashtable

Hashtable은 키(Key)를 사용하여 컬렉션 내 요소에 접근합니다. 데이터를 키-값(Key-Value) 쌍으로 저장하며, 키를 기반으로 한 빠른 검색이 가능합니다.

SortedList

SortedList는 키와 인덱스 두 가지 방식으로 목록의 항목에 접근할 수 있는 컬렉션입니다. 항상 키를 기준으로 정렬된 상태를 유지한다는 특징이 있습니다.

BitArray

BitArray는 1과 0의 값을 사용하여 데이터를 비트(bit) 단위로 표현하는 배열입니다.

Stack

Stack은 후입선출(LIFO, Last-In First-Out) 방식으로 객체를 저장하는 컬렉션입니다. 즉, 가장 마지막에 추가된 요소가 가장 먼저 꺼내집니다.

Queue

Queue는 선입선출(FIFO, First-In First-Out) 방식으로 객체를 저장하는 컬렉션입니다. 먼저 추가된 요소가 먼저 처리되는 구조입니다.

ArrayList 사용 예제

다음은 C#에서 ArrayList 클래스를 사용하는 예제 코드입니다.

using System;
using System.Collections;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            ArrayList al = new ArrayList();

            al.Add(99);
            al.Add(76);
            al.Add(87);
            al.Add(46);
            al.Add(55);

            Console.WriteLine("Capacity: {0} ", al.Capacity);
            Console.WriteLine("Count: {0}", al.Count);

            Console.Write("Elements: ");
            foreach (int i in al) {
                Console.Write(i + " ");
            }

            Console.WriteLine();
            Console.ReadKey();
        }
    }
}

실행 결과

Capacity: 8
Count: 5
Elements: 99 76 87 46 55

위 실행 결과에서 Capacity는 내부적으로 할당된 저장 용량을 의미하고, Count는 실제로 저장된 요소의 개수를 나타냅니다. ArrayList는 초기 용량이 가득 차면 자동으로 용량을 늘리기 때문에, 요소 5개를 추가했을 때 용량이 8로 확장된 것을 확인할 수 있습니다.

참고로 C# 2.0 이후에는 타입 안정성이 보장되는 제네릭 컬렉션(List<T>, Dictionary<TKey, TValue> 등)이 System.Collections.Generic 네임스페이스에서 제공되며, 박싱/언박싱 오버헤드가 없어 대부분의 경우 제네릭 컬렉션을 사용하는 것이 권장됩니다.