해시테이블 (Hash Table)

컴퓨터과학·AI
한 줄 정의: 데이터를 특정 계산식(해시 함수)으로 변환한 값을 주소 삼아 저장해 두고, 그 주소로 곧장 찾아가는 방식으로 매우 빠르게 검색할 수 있게 만든 자료구조입니다.

쉽게 풀면

도서관에서 책을 찾을 때 첫 페이지부터 한 장씩 넘겨가며 확인한다면 시간이 오래 걸릴 것입니다. 하지만 책마다 고유한 청구기호를 매겨두고 그 번호가 있는 서가로 곧장 가면 훨씬 빠르게 찾을 수 있습니다. 해시테이블도 비슷한 원리입니다. "사과"라는 단어를 저장한다고 하면, 해시 함수라는 계산식이 "사과"를 특정 숫자(예: 7번)로 변환해 주고, 그 숫자를 저장 공간의 주소로 사용합니다. 나중에 "사과"를 다시 찾을 때도 같은 계산식을 돌려 7번 주소로 곧장 가면 되므로, 데이터가 아무리 많아도 거의 즉시 찾을 수 있습니다. 다만 서로 다른 단어인데 계산 결과가 같은 주소로 나오는 "충돌"이 가끔 발생할 수 있어, 이를 처리하는 방법도 함께 설계해야 합니다.

왜 중요한가

해시테이블은 평균적으로 상수 시간에 검색·삽입·삭제가 가능한 몇 안 되는 자료구조이기 때문에, 성능이 중요한 시스템을 설계하는 논문에서 기본 구성 요소로 매우 자주 등장합니다. 데이터베이스 인덱스, 컴파일러의 심볼 테이블, 캐시 시스템, 네트워크 라우팅 테이블 등 대규모 데이터를 빠르게 조회해야 하는 거의 모든 시스템 연구에서 해시테이블 또는 그 변형이 핵심 자료구조로 채택되며, 새로운 자료구조를 제안하는 논문에서는 해시테이블이 비교 기준(baseline)으로 함께 제시되는 경우도 많습니다.

논문에서는 이렇게 쓰입니다

"제안한 인덱싱 기법은 해시테이블을 이용해 평균 시간복잡도 O(1)로 조회가 가능하도록 설계되었다."

이 문장은 데이터베이스나 시스템 최적화를 다루는 논문에서, 검색 속도를 개선하기 위해 사용한 자료구조를 설명하는 대목입니다. 해시테이블은 캐시 시스템, 데이터베이스 인덱스, 중복 탐지 알고리즘 등 성능이 중요한 논문의 방법론 부분에서 자주 근거로 인용됩니다.

"딥러닝 학습 데이터 전처리 과정에서 이미 처리된 샘플을 빠르게 확인하기 위해 해시테이블 기반 캐시를 구현하였다."

대규모 데이터 파이프라인에서 중복 작업을 피하기 위해 해시테이블을 캐시 자료구조로 활용한 사례로, 시스템 및 데이터 엔지니어링 논문에서 흔히 볼 수 있는 표현이다.

"컴파일러의 심볼 테이블은 해시테이블로 구현되어 변수명과 타입 정보를 상수 시간에 조회할 수 있다."

프로그래밍 언어와 컴파일러 연구에서도 해시테이블이 이름과 정보를 빠르게 연결하는 핵심 내부 자료구조로 쓰인다는 것을 보여준다.

조금 더 깊게 보면

해시테이블의 성능은 해시 함수의 품질, 충돌 해결 방식(체이닝 또는 개방주소법), 적재율(load factor) 세 가지 요소에 의해 결정됩니다. 적재율이 지나치게 높아지면 충돌이 잦아져 성능이 저하되므로, 대부분의 구현체는 적재율이 일정 임계값을 넘으면 테이블 크기를 늘리고 기존 데이터를 새 위치로 재배치하는 리해싱을 자동으로 수행합니다. 논문에서 해시테이블을 언급할 때는 평균 시간복잡도 O(1)뿐 아니라, 해시 충돌이 몰릴 경우 최악의 경우 O(n)까지 느려질 수 있다는 점, 그리고 이를 완화하기 위한 구체적인 설계 선택을 함께 제시하는 경우가 일반적입니다.

주의할 점

해시테이블은 평균적으로 빠르지만, 해시 함수가 부적절하거나 충돌이 많이 발생하면 최악의 경우 시간복잡도와 빅오 표기법가 크게 느려질 수 있습니다. 또한 스택과 큐처럼 순서를 보장하는 자료구조가 아니라서, 저장한 순서대로 데이터를 꺼낼 수 있다고 기대해서는 안 됩니다.

관련 용어