C#에서 데이터를 키(Key)와 값(Value) 형태로 저장하고 관리할 때는 Hashtable과 Dictionary를 사용할 수 있습니다. 두 컬렉션은 비슷한 역할을 하지만 동작 방식과 타입 안정성에서 차이가 있습니다. 이번 글에서는 두 클래스의 주요 메서드와 함께 실제 예제 코드를 살펴보겠습니다.
1. Hashtable이란?
Hashtable 클래스는 키의 해시 코드(hash code)를 기반으로 구성된 키-값 쌍의 컬렉션을 나타냅니다. 배열처럼 인덱스로 접근하는 것이 아니라 키를 사용해 요소에 접근하며, System.Collections 네임스페이스에 포함되어 있습니다.
주요 메서드
| 번호 | 메서드 및 설명 |
|---|---|
| 1 | Add(object key, object value) 지정한 키와 값을 Hashtable에 추가합니다. |
| 2 | Clear() Hashtable의 모든 요소를 제거합니다. |
| 3 | ContainsKey(object key) 특정 키가 Hashtable에 존재하는지 여부를 확인합니다. |
| 4 | ContainsValue(object value) 특정 값이 Hashtable에 존재하는지 여부를 확인합니다. |
사용 예제
다음 예제는 부서 정보를 Hashtable에 저장하고, 중복 여부를 확인한 후 전체 목록을 출력하는 코드입니다.
using System;
using System.Collections;
namespace Demo {
class Program {
static void Main(string[] args) {
Hashtable ht = new Hashtable();
ht.Add("D01", "Finance");
ht.Add("D02", "HR");
ht.Add("D03", "Operations");
if (ht.ContainsValue("Marketing")) {
Console.WriteLine("This department name is already in the list");
} else {
ht.Add("D04", "Marketing");
}
ICollection key = ht.Keys;
foreach (string k in key) {
Console.WriteLine(k + ": " + ht[k]);
}
Console.ReadKey();
}
}
}
출력 결과
D04: Marketing D02: HR D03: Operations D01: Finance
Hashtable은 내부적으로 해시 코드를 기반으로 요소를 배치하기 때문에 출력 결과에서 키의 순서가 입력 순서와 다르게 나타날 수 있습니다.
2. Dictionary란?
Dictionary<TKey, TValue>는 C#에서 키와 값을 저장하는 제네릭(Generic) 컬렉션으로, System.Collections.Generic 네임스페이스에 포함되어 있습니다. Hashtable과 달리 타입 안정성(Type Safety)을 제공하며, 박싱(Boxing)/언박싱(Unboxing) 오버헤드가 없어 일반적으로 더 나은 성능을 보여줍니다.
주요 메서드
| 번호 | 메서드 및 설명 |
|---|---|
| 1 | Add(TKey, TValue) Dictionary에 키-값 쌍을 추가합니다. |
| 2 | Remove(TKey) 지정한 키를 가진 요소를 제거합니다. |
| 3 | ContainsKey(TKey) 지정한 키가 Dictionary에 존재하는지 확인합니다. |
| 4 | ContainsValue(TValue) 지정한 값이 Dictionary에 존재하는지 확인합니다. |
| 5 | Count 저장된 키-값 쌍의 개수를 반환합니다. |
| 6 | Clear() Dictionary의 모든 요소를 제거합니다. |
사용 예제
아래 예제는 Dictionary에 요소를 5개 추가한 후, 저장된 전체 개수를 출력하는 방법을 보여줍니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
IDictionary<int, int> d = new Dictionary<int, int>();
d.Add(1, 44);
d.Add(2, 34);
d.Add(3, 66);
d.Add(4, 47);
d.Add(5, 76);
Console.WriteLine(d.Count);
}
}
출력 결과
5
마무리: Hashtable vs Dictionary
Hashtable과 Dictionary는 모두 키-값 쌍을 효율적으로 관리할 수 있는 컬렉션입니다. 새로운 프로젝트에서는 타입 안정성과 성능이 우수한 Dictionary<TKey, TValue>를 사용하는 것이 권장되며, 레거시 코드나 비제네릭 환경을 다룰 때는 Hashtable을 활용하면 됩니다.