| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- Object Pool
- 콘솔 앱
- 유니티
- 상태 패턴
- github desktop
- Dependency Injection
- 의존성 주입
- Canvas Scaler
- Abstract Factory Pattern
- MVP 패턴
- 데이터 형식
- 구글 스프레드 시트
- Render Mode
- 프로젝트 생성
- 오브젝트 풀
- Unity 기술면접
- New Input System
- C#
- 기술면접
- 이벤트 버스
- 게임 디자인 패턴
- Visual Studio Installer
- 스타일 지침
- 테이블 데이터
- Di
- event bus
- 구글플레이콘솔
- 개발
- unity
- 추상 팩토리 패턴
- Today
- Total
DevDino
[Unity 기술면접] Dictionary vs Hashtable 본문
"Dictionary와 Hashtable은 어떤 차이가 있나요?"
Dictionary vs Hashtable
Dictionary<TKey, TValue>
System.Collections.Generic 네임스페이스에서 제공되는 제네릭(Generic) 컬렉션이다.
생성 시 Key 타입과 Value 타입을 명시해야 하며, 타입이 미리 고정되므로 타입 안정성을 보장하고 박싱/언박싱이 없어 성능과 가독성 면에서 유리하다.
var dict = new Dictionary<string, int>();
dict.Add("apple", 3);
dict["banana"] = 5;
Console.WriteLine(dict["apple"]); // 3
Hashtable
System.Collections 네임스페이스에서 제공되는 비제네릭(Non-Generic) 컬렉션이다.
Key와 Value 모두 object 타입으로 취급한다.
여러 타입을 혼합해 저장 가능하다는 유연성이 있지만, 저장된 값을 꺼낼 때마다 박싱/언박싱이 발생할 수 있고, 타입 안전성이 보장되지 않는다.
Hashtable table = new Hashtable();
table.Add("key1", 123);
table.Add("key2", "hello");
int a = (int)table["key1"];
string b = (string)table["key2"];
대부분의 경우에는 Dictionary를 선호
타입이 고정되어 있고 key-value 관계가 명확한 경우, 박싱/언박싱 오버헤드가 없고 해시 + 제네릭 덕분에 속도와 안정성이 좋다.
유지보수성, 가독성, 타입 안전성 측면에서 Dictionary가 우위이다. 잘못된 캐스팅, 런타임 오류 위험이 적다.
→ 최근 C#에서 Generic 사용이 기본이고 Hashtable을 쓸 만한 경우가 거의 없기 때문에 Dicitionary가 표준 선택이 되었다.
시간 복잡도
Dictionary, Hashtable 모두 삽입, 조회, 삭제의 평균 시간 복잡도는 O(1)이고 최악의 경우 O(n)이다. 모두 내부적으로 해시 테이블(Hash table) 구조를 사용하기 때문이다. 이는 키를 해시 함수에 넣어 해시코드를 얻고, 이를 내부 배열의 인덱스로 매핑해 키-값 쌍을 저장하고 조회한다.
요약
Dictionary<TKey, TValue>는 제네릭 컬렉션으로, 타입이 미리 고정되어 있어 안정적이고 박싱/언박싱이 없어 빠르다.
Hashtable은 모든 타입을 object로 받아 유연하지만 안정성과 성능 측면에서 단점이 있다.
참고
Hashtable 및 Dictionary 컬렉션 형식
.NET Dictionary<TKey, TValue> 클래스
'Unity > 기술면접' 카테고리의 다른 글
| [Unity 기술면접] Unity Collider vs Rigidbody (1) | 2026.01.09 |
|---|---|
| [Unity 기술면접] Unity Quaternion과 Gimbal Lock (0) | 2026.01.07 |
| [Unity 기술면접] C# 컬렉션 비교: Array, List, ArrayList, LinkedList (0) | 2026.01.05 |
| [Unity 기술면접] C# string은 왜 불변(Immutable) 객체일까? (0) | 2026.01.02 |
| [Unity 기술면접] C# Garbage Collector (0) | 2026.01.01 |