I'm FanJae.

[20260513] C# ( HashTable 와 Dictionary의 공통점, 차이점 ) 본문

Unity/Unity 초격차캠프

[20260513] C# ( HashTable 와 Dictionary의 공통점, 차이점 )

FanJae 2026. 5. 13. 17:16

(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) 정리

 

 

Comments