C#은 데이터 그룹을 저장하기 위한 풍부한 컬렉션 타입을 System.Collections.Generic에 제공합니다. 가장 흔한 것은 List<T>(동적 배열), Dictionary<K,V>(키-값 맵), HashSet<T>(고유 집합)입니다. 올바른 것을 선택하는 것은 명확성과 성능에 중요합니다.
var numbers = new List<int> { 1, 2, 3 };
numbers.Add(4); // 동적으로 확장
numbers[0]; // 인덱스 접근 — O(1)
numbers.Contains(3); // O(n) 검색
numbers.Remove(2);
numbers.Count; // 크기
foreach (var n in numbers) { } // 순회
List<T>는 가장 기본이 되는 범용 컬렉션입니다 — 순서가 있고 크기가 조정되며 인덱스로 접근할 수 있는 리스트입니다. <T>는 제네릭 타입 매개변수로(List<string>, List<User>), 컴파일 타임 타입 안전성을 제공합니다.
var ages = new Dictionary<string, int> { ["Ann"] = 30, ["Bob"] = 25 };
ages["Carol"] = 28; // 추가/설정
ages["Ann"]; // 키로 조회 — O(1)
ages.ContainsKey("Ann");
ages.TryGetValue("Ann", out var age); // 안전한 조회(없어도 예외 없음)
foreach (var (name, a) in ages) { } // 키-값 쌍 순회
Dictionary<K,V>는 키를 값에 매핑하며 빠른 O(1) 조회를 제공합니다 — 캐시, 인덱스, 그 밖의 모든 키 기반 접근에 사용됩니다. TryGetValue는 안전한 조회 방법입니다(키가 없을 때 예외를 피함).
var set = new HashSet<int> { 1, 2, 3 }; // 고유 요소, O(1) Contains
set.Add(2); // 무시됨(중복)
var queue = new Queue<int>(); // FIFO
var stack = new Stack<int>(); // LIFO
int[] arr = { 1, 2, 3 }; // 고정 크기 배열
var ro = numbers.AsReadOnly(); // 읽기 전용 래퍼
순서, 인덱스, 크기 조정 가능 → List<T>
키-값 조회(빠름) → Dictionary<K,V>
고유성 / 빠른 멤버십 → HashSet<T>
FIFO / LIFO 처리 → Queue<T> / Stack<T>
고정 크기 / 성능이 중요한 경우 → 배열(T[])
컬렉션은 거의 모든 프로그램에 기본적입니다 — 데이터 그룹을 저장하고 처리하는 일은 끊임없이 일어나므로, C#의 흔한 컬렉션 타입을 이해하고 잘 선택하는 것은 필수적인 일상 지식입니다.
주요 타입과 용도를 아는 것 — 순서가 있고 인덱스 접근이 가능하며 크기를 조정할 수 있는 데이터에는 List<T>(범용 일꾼), 빠른 키 기반 조회에는 Dictionary<K,V>(캐시, 인덱스), 고유성과 빠른 멤버십 검사에는 HashSet<T>, FIFO/LIFO 처리에는 Queue/Stack — 은 효율적이고 명확한 코드를 작성하는 데 필요합니다.
선택은 성능(예: Dictionary의 O(1) 조회 vs List의 O(n) 스캔, 또는 HashSet의 O(1) 멤버십 vs List의 O(n))과 의도에 직접 영향을 미치므로, 모든 것에 List<T>를 기본으로 쓰기보다 적절한 컬렉션을 고르는 것은 중요한 능력입니다.
이 컬렉션들은 또한 제네릭(<T>)이어서 컴파일 타임 타입 안전성을 제공합니다.
안전한 사전 조회를 위한 TryGetValue(키가 없을 때 예외 회피)나 각 타입의 성능 특성 같은 실용적인 세부 사항을 아는 것은 C#에서 데이터를 다루는 일상적인 필요를 충족합니다.
컬렉션은 사실상 모든 프로그램에 등장하고 올바른 선택이 성능과 가독성에 의미 있게 영향을 주므로, 흔한 컬렉션 타입과 그 적절한 사용을 숙달하는 것은 효과적인 C# 개발을 위한 반드시 알아야 할 기초 지식입니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기