딕셔너리<TKey , TValue>
딕셔너리는 자료구조 중에서 데이터를 Key 와 Value 의 쌍으로 저장하는 해시 테이블 ( Hashtable ) 을 기반으로 하는 제네릭 컬렉션이다. 배열이나 리스트처럼 순서 ( Index ) 로 접근하는 것이 아니라, 고유한 키 ( Key ) 를 통해 값 ( Value ) 을 빠르게 조회할 수 있다.
선언과 초기화
Dictionary<TKey, TValue> 변수명 = new Dictionary<TKey, TValue>();
- TKey : 키의 자료형
- TValue : 값의 자료형
초기 값을 설정할 수 있다.
Dictionary<string, int> scores = new Dictionary<string, int>()
{
{ "장한", 90 },
{ "호찬", 85 },
{ "윤수", 100 }
};
요소 추가
dict.Add("향숙", 60); // Add 메서드로 추가
dict["태윤"] = 95; // 인덱서를 사용한 새 키 추가
dict["태윤"] = 100; // 기존 키의 값 수정
- Add 는 같은 키가 있으면 오류 발생 ( ArgumentException )
- AddTry() 를 사용할 수도 있다
- 인덱서는 같은 키가 있으면 그냥 덮어씀
bool isAdded = dict.TryAdd("호찬", 90);
if (isAdded)
{
Console.WriteLine("성공적으로 추가");
}
else
{
Console.WriteLine("이미 해당 키가 존재");
}
값 조회
1. 인덱서로 조회
Console.WriteLine(scores["호찬"]);
int Score = dict["호찬"];
- 없는 키를 조회하면 KeyNotFoundException 발생
2. ContainsKey() 로 확인 후 조회
if (scores.ContainsKey("호찬"))
{
Console.WriteLine(scores["호찬"]);
}
else
{
Console.WriteLine("호찬의 점수는 없음");
}
- 안전하게 조회하려면 ContainsKey() 또는 TryGetValue() 사용
- 모든 값 확인하려면 foreach 로 순회
값 제거
1. Remove ( Key )
특정 키를 기준으로 해당 키-값 쌍을 제거한다
Dictionary<string, int> scores = new Dictionary<string, int>()
{
{ "향숙", 90 },
{ "호찬", 85 },
{ "윤수", 100 }
};
scores.Remove("향숙"); // 향숙 : 90 제거
반환값
true - 해당 키가 있어서 제거 성공
false - 해당 키가 없어서 제거 실패
2. Clear ()
딕셔너리의 모든 요소 제거
scores.Clear();
Count 확인
int count = scores.Count;
주요 특징
1. 빠른 검색 속도
- 내부적으로 해시 테이블 ( Hash Table ) 구조 사용
2. 키는 고유
- 키는 중복될 수 없다
- 같은 키를 중복해서 넣으려고 하면 오류 발생
3. 값은 중복 가능
- 다른 키에 같은 값 저장 가능
주의할 점
- 존재하지 않는 키로 접근하면 에러 발생 → ContainsKey 로 먼저 확인하는 습관 필요
- null 키는 허용하지 않는다
딕셔너리를 쓰면 좋은 상황
1. 빠른 검색이 필요할 때
- 배열 / 리스트는 값을 찾을 때 순차 탐색 필요하지만
- 딕셔너리는 해시 테이블 기반이라 빠르게 찾을 수 있다
- 학생 이름으로 점수 찾기
- 아이템 ID 로 아이템 정보 가져오기
2. 키를 기준으로 데이터를 관리할 때
- 고유한 값 ( Unique Key ) 으로 데이터를 식별해야 할 때 딕셔너리가 유용하다
- 사용자 ID → 사용자 정보
- 게임에서 몬스터 이름 → 스탯 정보
3. 데이터 매핑 ( Mapping ) 이 필요할 때
- 하나의 값에 다른 값을 연결하고 싶을 때
- 영어 단어 → 한국어 뜻 ( 사전 프로그램 )
4. 중복 없는 키 관리가 필요할 때
- 딕셔너리는 키 중복 불가 특성이 있어서 중복 없이 데이터를 저장할때 적합하다
- 로그인된 사용자 목록 관리 ( 중복 ID 불가 )
- 게임 인벤토리 슬롯 관리 ( 슬롯 ID 중복 방지 )
정리
- 딕셔너리는 특정 키로 빠르게 데이터에 접근해야 할 때
- 고유한 키-값 매핑이 필요할 때 가장 빛을 발휘한다.
참고 자료
https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.dictionary-2?view=net-7.0
'⭐C Sharp > 15-5. 딕셔너리 해시테이블' 카테고리의 다른 글
| 해시테이블 ( Hashtable ) (0) | 2025.09.28 |
|---|