C#의 컬렉션 클래스는 데이터를 관리하고 저장하는 데 필수적인 도구입니다. 다양한 데이터 구조와 기능을 제공하여 개발자들이 데이터를 효과적으로 처리할 수 있도록 도와줍니다. 컬렉션 클래스에 대해 실제 적용 가능한 예제 코드를 통해 각 컬렉션의 특징을 이해할 수 정리해 보겠습니다.
C# 프로그래밍 언어의 컬렉션 클래스 학습서
1. 컬렉션 클래스란?
컬렉션 클래스(Collection Class)는 데이터를 저장하고 관리하는데 사용되는 특별한 자료구조입니다. 배열과 달리 동적으로 크기가 조정되며, 다양한 타입의 데이터를 효율적으로 관리할 수 있는 기능을 제공합니다. C#에서 대표적인 컬렉션 클래스는 List
, Dictionary
, Queue
, Stack
등이 있습니다.
2. 배열과 컬렉션 클래스의 차이점
C#의 배열(Array)은 고정된 크기의 데이터를 저장하는 데 사용되며, 배열이 생성된 후에는 크기를 변경할 수 없습니다. 반면에, 컬렉션 클래스는 데이터의 개수가 동적으로 변할 수 있어 데이터를 추가하거나 삭제할 때 매우 유연하게 대처할 수 있습니다.
// 배열 예시
int[] numbers = new int[5]; // 고정된 크기의 배열
// List 컬렉션 예시
List<int> dynamicNumbers = new List<int>(); // 동적으로 크기가 변하는 List
dynamicNumbers.Add(1);
dynamicNumbers.Add(2);
dynamicNumbers.Add(3);
3. 주요 컬렉션 클래스 소개
C#의 컬렉션 클래스는 크게 두 가지 제네릭(Generic) 컬렉션과 비제네릭(Non-generic) 컬렉션로 나눌 수 있습니다.
제네릭 컬렉션(Generic Collection)
제네릭 컬렉션은 특정 데이터 타입에 제한되어 데이터를 처리할 수 있습니다. 코드의 안정성과 성능을 높여주며, 컴파일 시점에 타입을 명확하게 지정할 수 있습니다. 주요 제네릭 컬렉션 클래스는 다음과 같습니다.
- List: 배열과 유사하지만, 크기를 동적으로 조절할 수 있는 리스트입니다.
- Dictionary<TKey, TValue>: 키와 값의 쌍으로 데이터를 관리하는 해시 테이블 기반 컬렉션입니다.
- Queue: FIFO(First In First Out) 방식으로 데이터를 관리하는 컬렉션입니다.
- Stack: LIFO(Last In First Out) 방식으로 데이터를 관리하는 컬렉션입니다.
비제네릭 컬렉션(Non-generic Collection)
비제네릭 컬렉션은 모든 데이터 타입을 허용하지만, 타입 안전성이 떨어질 수 있습니다. 주로 예전 코드에서 사용되었으나, 현재는 제네릭 컬렉션이 더 권장됩니다.
4. List 클래스
List는 가장 자주 사용되는 제네릭 컬렉션 클래스 중 하나로, 배열처럼 데이터의 순서가 중요할 때 사용됩니다. 하지만 배열과는 달리 크기를 동적으로 변경할 수 있어 데이터를 자유롭게 추가하거나 삭제할 수 있습니다.
사용법
List<string> names = new List<string>();
// 데이터 추가
names.Add("Alice");
names.Add("Bob");
// 데이터 접근
Console.WriteLine(names[0]); // Alice
// 데이터 삭제
names.Remove("Bob");
주요 메서드
Add(T item)
: 데이터를 리스트에 추가합니다.Remove(T item)
: 리스트에서 해당 데이터를 제거합니다.Count
: 리스트에 저장된 데이터의 개수를 반환합니다.
5. Dictionary<TKey, TValue> 클래스
Dictionary <TKey, TValue>는 키-값 쌍으로 데이터를 관리하는 컬렉션입니다. 여기서 TKey
는 고유한 키를 의미하고, TValue
는 해당 키에 연관된 값을 나타냅니다.
사용법
// Dictionary 선언
Dictionary<int, string> students = new Dictionary<int, string>();
// 데이터 추가
students.Add(1, "Alice");
students.Add(2, "Bob");
// 데이터 접근
Console.WriteLine(students[1]); // Alice
// 데이터 삭제
students.Remove(2);
주요 메서드
Add(TKey key, TValue value)
: 새로운 키-값 쌍을 추가합니다.Remove(TKey key)
: 해당 키에 해당하는 데이터를 삭제합니다.ContainsKey(TKey key)
: 특정 키가 Dictionary에 있는지 확인합니다.
6. Queue 클래스
Queue는 FIFO(First In, First Out) 방식으로 데이터를 처리합니다. 즉, 먼저 들어온 데이터가 먼저 처리됩니다.
사용법
// Queue 선언
Queue<string> queue = new Queue<string>();
// 데이터 추가
queue.Enqueue("First");
queue.Enqueue("Second");
// 데이터 처리
Console.WriteLine(queue.Dequeue()); // First
주요 메서드
Enqueue(T item)
: 큐에 데이터를 추가합니다.Dequeue()
: 큐에서 데이터를 제거하고 반환합니다.Peek()
: 큐에서 데이터를 제거하지 않고 반환합니다.
7. Stack 클래스
Stack는 LIFO(Last In, First Out) 방식으로 데이터를 처리합니다. 즉, 나중에 들어온 데이터가 먼저 처리됩니다.
사용법
// Stack 선언
Stack<string> stack = new Stack<string>();
// 데이터 추가
stack.Push("First");
stack.Push("Second");
// 데이터 처리
Console.WriteLine(stack.Pop()); // Second
주요 메서드
Push(T item)
: 스택에 데이터를 추가합니다.Pop()
: 스택에서 데이터를 제거하고 반환합니다.Peek()
: 스택에서 데이터를 제거하지 않고 반환합니다.
8. 컬렉션 클래스 사용 시 유의점
- 타입 안전성: 제네릭 컬렉션을 사용할 때는 타입이 명확하기 때문에 타입 안정성이 높습니다. 반면, 비제네릭 컬렉션은 다양한 타입을 저장할 수 있지만, 그만큼 타입 오류가 발생할 확률이 높습니다.
- 성능: 컬렉션 클래스는 데이터 추가와 삭제 시 유연성을 제공하지만, 너무 큰 데이터를 다루거나 빈번한 연산이 일어나는 경우 성능에 영향을 줄 수 있습니다. 이때는 적절한 컬렉션 클래스를 선택하는 것이 중요합니다.
- 메모리 관리: 컬렉션 클래스는 동적으로 크기가 변하기 때문에 메모리 관리가 자동으로 이루어지지만, 불필요한 데이터를 적시에 삭제하지 않으면 메모리 누수가 발생할 수 있습니다.
'프로그래밍 언어 > C#' 카테고리의 다른 글
C# 파일 입출력 가이드 StreamReader, StreamWriter, File 클래스 사용법 - C# 17 (0) | 2024.10.28 |
---|---|
C# 예외 처리 try catch와 오류 메시지 처리 방법 - C# 16 (0) | 2024.10.23 |
C# 자료구조 가이드 딕셔너리(Dictionary)와 해시테이블(Hashtable) 사용법 및 장단점 (0) | 2024.10.17 |
C# 배열과 리스트 선언 및 초기화 방법 자료구조 메모리 관리 (0) | 2024.10.14 |
C# 프로그래밍 언어에서 인터페이스와 추상 클래스 차이점 및 사용법 (0) | 2024.10.07 |