IT 초보 탈출 100일 챌린지

[100일의 IT 초보 탈출] #69 해시 테이블 _ 빠른 검색의 마법

Prof.SSong 2025. 7. 10. 19:14
728x90
반응형

오늘은 무엇을 배우게 될까요?

 

우리는 프로그램에서 특정 데이터를 빠르게 찾고 싶을 때가 많습니다.

예를 들어

 

  • 사용자 ID가 등록되어 있는지?
  • 어떤 단어가 이미 등장했는지?
  • 특정 키에 대한 값을 얼마나 빠르게 찾을 수 있을까?

 

이럴 때 사용하는 대표적인 자료구조가 바로 해시 테이블(Hash Table)입니다.

 


 

해시 테이블이란?

 

Key → Value 쌍으로 데이터를 저장하는 구조입니다.

검색, 삽입, 삭제를 매우 빠르게 할 수 있습니다.

 

  • Key는 고유한 식별자
  • Value는 저장하고 싶은 데이터

 


 

 

해시 함수란?

 

해시 테이블의 핵심은 해시 함수(Hash Function)입니다.

Key를 받아서 내부 배열의 인덱스로 바꿔주는 함수입니다.

Index = Hash(Key) % Table_Size

좋은 해시 함수일수록 Key가 잘 분산되고 충돌이 적습니다.

 


Python 코드로 해시 테이블 흉내내기

class HashTable:
    def __init__(self, size):
        self.size = size
        self.table = [[] for _ in range(size)]
    
    def _hash(self, key):
        return sum(ord(c) for c in key) % self.size
    
    def insert(self, key, value):
        index = self._hash(key)
        for i, (k, v) in enumerate(self.table[index]):
            if k == key:
                self.table[index][i] = (key, value)
                return
        self.table[index].append((key, value))
    
    def get(self, key):
        index = self._hash(key)
        for k, v in self.table[index]:
            if k == key:
                return v
        return None

 


사용 예시

ht = HashTable(10)
ht.insert("apple", 5)
ht.insert("banana", 10)
ht.insert("grape", 7)

print(ht.get("banana"))  # 출력: 10
print(ht.get("melon"))   # 출력: None

 


충돌(Collision)이란?

 

서로 다른 키가 같은 해시값을 가질 경우, 한 인덱스에 여러 개의 데이터가 들어갑니다.

 

이를 처리하는 방식

 

체이닝(Chaining) 같은 인덱스에 리스트로 저장
개방 주소법(Open Addressing) 빈 인덱스를 찾아 저장 (선형 탐사 등)

 


 

 

시간 복잡도 비교

연산평균 시간최악 시간 (충돌 시)

삽입 O(1) O(N) (최악)
탐색 O(1) O(N) (최악)
삭제 O(1) O(N) (최악)

→ 평균적으로는 매우 빠름!

 


Python 내장 해시 구조

 

  • dict: 해시 테이블 기반
  • set: 내부적으로 key만 가진 해시 테이블
d = {'name': 'Alice', 'age': 25}
print(d['name'])  # O(1) 접근

s = set()
s.add("apple")
print("apple" in s)  # O(1) 검색

 


해시 테이블의 활용 예시

분야설명

데이터베이스 인덱싱 구조로 사용 (Hash Index)
캐시 최근 결과를 빠르게 저장/검색
중복 제거 Set처럼 존재 여부만 확인
언어 처리 단어 빈도 수 세기
그래프 탐색 정점-간선 관계 저장

 


해시 테이블 vs 배열/리스트

 

배열 인덱스 접근 빠름 키를 숫자로만 사용
리스트 삽입/삭제 유연 검색 느림 (O(N))
해시 테이블 키 기반 빠른 검색 (O(1)) 충돌 처리 필요

 


한 줄 요약

 

👉 해시 테이블은 키-값 쌍 데이터를 초고속으로 검색/저장할 수 있는 자료구조로,

모든 프로그래밍 언어에서 가장 많이 쓰이는 핵심 도구 중 하나입니다.

 

728x90
반응형