| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- multi-thread
- Unity
- Network Programming
- c#
- git
- PS
- Toy Project
- Online Judge
- Data Structure
- BOJ
- System Programming
- C++
- 독서
Archives
- Today
- Total
I'm FanJae.
[20260513] C# ( HashTable 와 Dictionary의 공통점, 차이점 ) 본문
(1) 공통점
- HashTable과 Dictionary는 둘 다 Key와 Value를 한 쌍으로 저장하는 자료구조이다.
- 즉, 다음과 같은 형태로 저장된다.
Key -> Value
1 -> 전사
2 -> 마법사
3 -> 도둑
- 또한 둘 다 Key 를 이용해서 Value 를 빠르게 찾을 수 있다.
(2) 차이점
- 가장 큰 차이점은 HashTable은 Object 기반이고, Dictionary는 Generic 기반이라는 점이다.
① HashTable
- HashTable은 Key와 Value를 모두 object 타입으로 저장한다.
Hashtable table = new Hashtable();
table.Add(1, "전사");
table.Add("2",100);
- 위 코드처럼 서로 다른 타입을 섞어서 넣을 수 있다.
- 하지만 이 때문에 타입 안정성이 떨어진다.
string job = (string) table[1];
- 값을 꺼낼 때 직접 형변환이 필요하다.
- 또한 값 타입을 object 로 저장할 경우 박싱이 발생할 수 있다.
- 반대로 값을 다시 꺼낼 때 언박싱이 발생할 수 있다.
- 박싱과 언박싱에 따른 성능 문제를 초래하는지는 해당 포스트에서 다룬 적이 있다.
② Dictionary
- Dictionary는 Generic 기반 자료구조이다.
Dictionary<int, string> players = new Dictionary<int, string>();
- 위 코드는 Key : int, Value : string이다.
- 즉, Key에는 int, Value에는 string만 사용할 수 있다.
players.Add(1, "전사");
players.Add(2, "마법사");
- 다른 타입을 넣으려고 하면 컴파일 오류가 발생한다.
players.Add("3", "도둑"); // 불가능
players.Add(4, 100); // 불가능
- 또, 값을 꺼낼 때도 형 변환이 필요하지 않다.
- 즉, Dictionary<int, int> 처럼 타입을 명확히 지정하면, Hashtable 처럼 object로 변환하는 과정이 필요하지 않아 불필요한 박싱/언박싱을 줄일 수 있다.
string job = players[1]; // 바로 넣을 수 있다.
(3) 정리

'Unity > Unity 초격차캠프' 카테고리의 다른 글
| [20260514] C# ( Stack<T> ) (0) | 2026.05.14 |
|---|---|
| [20260513] C# ( Hash 기반 자료구조의 주의점과 이를 해결하는 기법) (0) | 2026.05.13 |
| [20260513] C# ( 제네릭 제약 ) (0) | 2026.05.13 |
| [20260512] C# ( Boxing & UnBoxing ) (0) | 2026.05.12 |
| [20260512] C# ( List ) (0) | 2026.05.12 |
Comments