C#의 Hashtable 클래스는 키(key)와 값(value) 쌍으로 구성된 컬렉션을 나타내며, 키의 해시 코드(hash code)를 기반으로 요소들을 관리합니다. 컬렉션 내부의 요소에 접근할 때는 키를 사용합니다.
Dictionary 역시 키와 값으로 이루어진 컬렉션이지만, Dictionary<TKey, TValue> 형태로 제네릭(Generic) 기반이라는 점이 핵심적인 차이입니다. Dictionary는 System.Collections.Generic 네임스페이스에 포함되어 있습니다.
Hashtable과 Dictionary의 성능 차이
일반적으로 Hashtable은 Dictionary보다 느립니다. 그 이유는 Hashtable에 값을 저장하거나 읽어올 때 값 형식(value type)에 대해 박싱(boxing)과 언박싱(unboxing)이 발생하기 때문입니다. 반면 제네릭 기반의 Dictionary는 강력한 형식(strongly-typed) 컬렉션으로, 불필요한 박싱·언박싱 없이 타입 안정성(type safety)까지 보장하므로 더 빠른 성능을 제공합니다.
동일한 연산에서의 속도 비교
예를 들어 Hashtable과 Dictionary에서 특정 키가 존재하는지 확인해야 하는 상황을 가정해 보겠습니다. 동일한 문장이라도 Dictionary 쪽이 더 빠르게 처리됩니다.
Hashtable의 경우
hashtable.ContainsKey("12345");
Dictionary의 경우
dictionary.ContainsKey("12345");
결론
타입 안정성, 실행 속도, 코드 가독성 등 모든 면에서 C#에서는 Hashtable보다 Dictionary<TKey, TValue>를 사용하는 것이 권장됩니다. 특히 int, double 같은 값 형식을 다룰 때는 박싱 비용이 없기 때문에 성능상의 이점이 더욱 커집니다.