해시테이블 ( Hashtable )
C# 에서는 Key 와 Value 를 사용해서 자료를 저장하는 타입이 두 가지가 있다.
해시테이블과 딕셔너리인데 사용법은 거의 동일하지만 내부적으로 처리하는 기술이 다르다.
해시 함수를 이용해 키 ( Key )에 대응되는 값 ( Value )를 빠르게 저장하고 검색할 수 있는 자료구조이다.
C# 에서는 System.Collections.Hashtable 클래스로 제공된다.
문법
▼선언
using System.Collections;
Hashtable table = new Hashtable();
▼추가
table.Add("apple", 100); // 100 (int → object) 박싱 발생
table["banana"] = 200; // 200 (int → object) 박싱 발생
▼조회
int value = (int)table["apple"]; // object → int 언박싱 발생
▼삭제
table.Remove("banana");
▼출력
foreach (DictionaryEntry item in table) // Key, Value는 object 타입
{
// item.Key, item.Value 접근 시 실제 타입으로 캐스팅 필요
Console.WriteLine($"{item.Key} : {item.Value}");
}
▼예시 코드
Hashtable scoreTable = new Hashtable();
scoreTable.Add("윤수", 95);
scoreTable.Add("호찬", 88);
scoreTable["장한"] = 76;
Console.WriteLine(scoreTable["윤수"]); // 95 출력
if (scoreTable.ContainsKey("호찬"))
Console.WriteLine("호찬의 점수 존재");
foreach (DictionaryEntry entry in scoreTable)
Console.WriteLine($"{entry.Key} : {entry.Value}");
이렇게 보면 Hashtable 은 모든 값이 object 로 저장된다.
int , string 같은 값 형식 ( Value Type ) 은 무조건 박싱 / 언박싱이 발생한다.
그래서 성능과 타입 안정성 때문에 딕셔너리 ( Dictionary<TKey , TValue> ) 사용을 권장한다.
주의할 점
- Hashtable 은 제네릭이 아니다 → 박싱 / 언박싱 발생 가능, 성능 저하
- Dictionary<TKey, TValue> 사용 권장
- 키는 중복 불가 , 값은 중복 가능
- 키 검색 시 ContainsKey() 로 존재 여부 확인 필요
- 순서가 보장되지 않는다 → 입력한 순서와 다르게 출력될 수 있다.
정리
해시테이블은 키-값 쌍을 저장하고 해시 함수를 이용해 빠르게 검색/삽입/삭제할 수 있는 비제네릭 컬렉션이다.
참고 자료
https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.hashtable?view=net-9.0
'⭐C Sharp > 15-5. 딕셔너리 해시테이블' 카테고리의 다른 글
| 딕셔너리<TKey , TValue> ( Dictionary ) (0) | 2025.09.27 |
|---|