본문 바로가기
카테고리 없음

해시 테이블(Hash Table) 원리 쉽게 알기 (Key-Value)

by tech-korea 2026. 2. 8.

우리가 도서관에서 책을 찾을 때를 상상해 봅시다. 만약 책들이 아무런 규칙 없이 무작위로 꽂혀 있다면, 원하는 책 한 권을 찾기 위해 수만 권의 책을 처음부터 끝까지 다 뒤져야 할 것입니다. 이것이 바로 배열(Array)에서 데이터를 순차적으로 찾을 때 발생하는 O(n)의 비효율성입니다. 하지만 도서관에는 '청구기호'라는 규칙이 있고, 우리는 그 번호만 알면 책이 꽂힌 위치로 곧장 걸어가서(Direct Access) 책을 꺼낼 수 있습니다. 프로그래밍 세계에도 이처럼 검색 속도를 획기적으로 줄여주는 마법 같은 자료구조가 존재합니다. 바로 해시 테이블(Hash Table)입니다. 이번 글에서는 파이썬의 딕셔너리(Dictionary), 자바스크립트의 객체(Object)의 근간이 되는 해시 테이블의 원리를 아주 쉽게 파헤쳐 보겠습니다.

1. 해시 테이블: 키(Key)와 값(Value)의 만남

해시 테이블은 데이터를 저장할 때 단순한 값(Value)만 저장하는 것이 아니라, 그 값을 찾기 위한 고유한 이름표인 키(Key)를 함께 저장하는 자료구조입니다. 배열은 인덱스라는 숫자(0, 1, 2...)로만 데이터에 접근할 수 있어 사람이 이해하기 어렵지만, 해시 테이블은 문자열, 숫자 등 다양한 형태의 데이터를 키로 사용할 수 있어 직관적입니다.

  • 배열: `students[0] = "철수"` (0번이 누구인지 외워야 함)
  • 해시 테이블: `students["반장"] = "철수"` ("반장"이라는 키워드로 바로 찾음)

2. 핵심 엔진: 해시 함수(Hash Function)의 마법

해시 테이블이 데이터를 찾는 속도가 빠른 이유는 '해시 함수'라는 특별한 번역기가 존재하기 때문입니다. 해시 함수는 임의의 길이의 데이터(Key)를 입력받아, 고정된 길이의 숫자(인덱스, Hash Code)로 변환해 주는 수학적 함수입니다.

2-1. 데이터 저장 과정 (Mapping)

여러분이 `menu["pizza"] = 15000`이라는 코드를 실행하면 내부적으로 어떤 일이 일어날까요? 1. 컴퓨터는 "pizza"라는 키를 해시 함수에 넣습니다. 2. 해시 함수는 복잡한 연산을 거쳐 "pizza"를 숫자 `5`로 변환합니다. (이를 해시값이라고 합니다.) 3. 컴퓨터는 메모리의 5번 방(Bucket/Slot)으로 이동하여 `15000`이라는 가격 정보를 저장합니다.

2-2. 데이터 검색 과정 (Lookup)

나중에 `print(menu["pizza"])`를 실행하여 가격을 확인하고 싶습니다. 1. 컴퓨터는 다시 "pizza"를 해시 함수에 넣습니다. 2. 해시 함수는 똑같이 숫자 `5`를 반환합니다. (같은 입력에는 항상 같은 출력이 나옵니다.) 3. 컴퓨터는 배열을 뒤질 필요 없이, 곧바로 메모리의 5번 방으로 가서 저장된 값을 가져옵니다.

3. 시간 복잡도: 왜 O(1)인가?

해시 테이블의 가장 위대한 점은 데이터가 아무리 많아져도 검색 속도가 거의 느려지지 않는다는 것입니다. 데이터가 10개 있든, 10억 개 있든 해시 함수를 한 번 통과해서 나온 주소로 찾아가기만 하면 되기 때문입니다.

  • 배열의 검색(Search): O(n) - 최악의 경우 전체를 다 확인해야 함.
  • 해시 테이블의 검색(Search): O(1) - 키를 넣으면 위치가 즉시 나옴.

이러한 특성 때문에 회원 가입 시 아이디 중복 체크, 블록체인의 무결성 검증, 캐싱(Caching) 시스템 등 빠른 데이터 조회가 생명인 분야에서 해시 테이블은 절대적인 위치를 차지하고 있습니다.

4. 해시 테이블 사용 시 주의사항 (Trade-off)

세상에 공짜는 없습니다. 해시 테이블은 속도(Time)를 얻는 대신 공간(Space)을 희생하는 구조입니다.

  • 공간 효율성: 데이터가 들어오지 않은 방(Bucket)들도 미리 만들어둬야 하므로 메모리 낭비가 발생할 수 있습니다.
  • 순서 없음: 해시 테이블은 데이터를 정렬하지 않고 무작위 위치에 저장합니다. 따라서 "가나다순으로 출력하라" 같은 작업에는 적합하지 않습니다.
[핵심 요약]
1. 해시 테이블은 Key를 통해 Value에 즉시 접근(O(1))할 수 있는 초고속 자료구조입니다.
2. 해시 함수는 Key를 메모리 주소(인덱스)로 변환해 주는 핵심 역할을 수행합니다.
3. 속도가 빠르지만 추가 메모리가 필요하며, 데이터의 순서가 보장되지 않는다는 특징이 있습니다.