Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 Hashtable과 Dictionary의 차이점 완벽 정리

C#에서 Hashtable과 Dictionary의 차이점

C#에서 HashtableDictionary는 모두 데이터를 저장하는 데 사용되는 대표적인 자료구조입니다. 두 컬렉션의 가장 큰 공통점은 데이터를 키(Key)와 값(Value)의 쌍 형태로 저장한다는 점입니다.

다만 두 자료구조는 타입 안정성, 성능, 예외 처리 방식 등 여러 측면에서 중요한 차이를 보입니다. 아래 표에서 핵심 차이점을 하나씩 비교해 보겠습니다.

번호구분HashtableDictionary
1정의Hashtable은 키/값 쌍으로 데이터를 저장하는 제네릭이 아닌(non-generic) 컬렉션으로, System.Collections 네임스페이스에 정의되어 있습니다.Dictionary는 System.Collections.Generic 네임스페이스에 정의된 제네릭(generic) 컬렉션으로, 마찬가지로 키/값 쌍 형태로 데이터를 저장합니다.
2데이터 타입Hashtable은 키와 값의 데이터 타입이 서로 달라도 저장할 수 있으며, 타입을 미리 지정할 필요가 없습니다. 어떤 타입의 객체든 자유롭게 저장할 수 있습니다.Dictionary는 생성 시점에 키와 값의 타입을 반드시 지정해야 하며, 지정된 타입과 일치하는 데이터만 저장할 수 있습니다.
3데이터 검색 속도Hashtable은 값을 읽어올 때 박싱(boxing)언박싱(unboxing) 과정이 발생하기 때문에 Dictionary에 비해 검색 속도가 느립니다.Dictionary는 박싱/언박싱이 발생하지 않으므로 데이터 검색 및 조회 속도가 더 빠릅니다.
4null 값 처리Hashtable에서 존재하지 않는 키에 접근하면 예외가 발생하지 않고 null을 반환합니다.Dictionary에서 존재하지 않는 키에 접근하면 KeyNotFoundException 예외가 발생합니다.
5데이터 순서Hashtable은 삽입된 키/값 데이터의 순서를 유지하지 않습니다.Dictionary는 저장된 값의 삽입 순서를 유지합니다.

어떤 것을 선택해야 할까?

일반적으로 현대적인 C# 개발에서는 Dictionary<TKey, TValue> 사용이 권장됩니다. 컴파일 시점에 타입을 검사하므로 타입 안정성이 보장되고, 박싱/언박싱 오버헤드가 없어 성능 면에서도 유리하기 때문입니다.

반면 레거시 코드와의 호환이 필요하거나, 서로 다른 타입의 데이터를 하나의 컬렉션에 유연하게 담아야 하는 특수한 상황에서는 Hashtable이 여전히 유용할 수 있습니다.