본문 바로가기
Function/C#

C# List vs Dictionary 비교

by wawManager 2024. 8. 25.
728x90

안녕하세요.

List<T>와 Dictionary<TKey, TValue>는 C#에서 자주 사용되는 컬렉션 타입이지만, 그 용도와 구조에는 큰 차이가 있습니다. 아래에서 이 둘의 주요 차이점을 설명드리겠습니다.

# 1. 데이터 저장 방식
- List<T>: 
  - 순차적 저장: List는 요소를 순차적으로 저장하는 동적 배열입니다. 모든 요소는 인덱스를 통해 접근할 수 있으며, 요소의 순서가 중요합니다.
  - 인덱스 기반 접근: 요소는 인덱스를 사용해 접근할 수 있습니다. 예를 들어, myList[0]은 첫 번째 요소를 반환합니다.
  
- Dictionary<TKey, TValue>: 
  - 키-값 쌍 저장: Dictionary는 키와 값의 쌍을 저장합니다. 각 키는 고유해야 하며, 키를 통해 값에 접근합니다.
  - 키 기반 접근: 요소는 키를 통해 접근합니다. 예를 들어, myDictionary["key"]는 해당 키에 연결된 값을 반환합니다.

# 2. 사용 목적
- List<T>: 
  - 순서가 중요한 데이터 처리: 요소의 순서가 중요하거나, 인덱스를 통해 요소에 접근할 때 주로 사용됩니다. 예를 들어, 배열처럼 사용하거나, 데이터를 순차적으로 처리하는 경우에 적합합니다.
  - 데이터의 중복 허용: List는 동일한 값을 여러 번 포함할 수 있습니다.
  
- Dictionary<TKey, TValue>: 
  - 빠른 검색: 키를 통해 빠르게 값을 검색해야 하는 경우에 주로 사용됩니다. 데이터베이스의 해시 테이블과 비슷하게 작동합니다.
  - 데이터의 고유성 유지: 각 키는 유일해야 하며, 중복된 키를 가질 수 없습니다. 이를 통해 데이터의 고유성을 유지할 수 있습니다.

# 3. 성능
- List<T>: 
  - 순차적 접근에 최적화: 인덱스를 통해 순차적으로 데이터를 접근할 때 성능이 뛰어납니다.
  - 검색 성능: 리스트 내에서 특정 요소를 찾으려면 전체 리스트를 탐색해야 하므로, 평균적으로 O(n)의 시간이 소요됩니다.

- Dictionary<TKey, TValue>: 
  - 빠른 키 기반 검색: 키를 사용해 값을 찾는 데 평균 O(1)의 시간이 소요되므로, 매우 빠르게 값을 검색할 수 있습니다.
  - 메모리 사용: 해시 테이블을 사용하기 때문에, List에 비해 더 많은 메모리를 사용할 수 있습니다.

# 4. 예제 사용 시나리오
- List<T>:
  - 사용 예: 학생들의 이름을 저장하고, 순서대로 출력하거나 순서에 따라 작업을 수행하는 경우.
  csharp
  List<string> students = new List<string> { "Alice", "Bob", "Charlie" };
  string firstStudent = students[0];  // "Alice" 가져오기
  

- Dictionary<TKey, TValue>:
  - 사용 예: 학생들의 ID와 이름을 매핑하고, ID를 사용해 학생의 이름을 빠르게 검색하는 경우.
  csharp
  Dictionary<int, string> studentDictionary = new Dictionary<int, string>();
  studentDictionary.Add(1, "Alice");
  studentDictionary.Add(2, "Bob");
  string studentName = studentDictionary[1];  // "Alice" 가져오기
  

# 결론

- List<T>는 순차적인 데이터 저장과 인덱스 기반 접근이 필요한 경우에 적합합니다. 데이터의 순서가 중요하거나, 중복된 값을 허용해야 할 때 사용됩니다.
- Dictionary<TKey, TValue>는 고유한 키를 통해 데이터를 빠르게 검색해야 하는 경우에 적합합니다. 키-값 쌍을 사용하여 데이터를 관리하고, 각 키는 고유해야 한다는 특징이 있습니다.

이 둘의 차이를 이해하고 상황에 맞게 선택함으로써, 더 효율적인 데이터 관리를 할 수 있습니다.

 

 

 

 

감사합니다.

 

 

(chat gpt 참고)

728x90

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

C# HEX코드 활용법  (0) 2024.08.27
C# ASCII 코드 사용법  (0) 2024.08.26
C# Dictionary문 사용법 정리  (0) 2024.08.24
C# List 사용법 정리  (0) 2024.08.23
C# 다양한 Remove 문 사용법 정리  (0) 2024.08.22