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

Swift 해시 테이블 (Hash Table)

by 정석 지향 2022. 12. 20.
반응형

Swift에서 해시 테이블이란

먼저, 해시 테이블이란 유일한 키값과 벨류로 저장되는 자료구조입니다. 대표적으로 Swift에서는 딕셔너리(Dictionary), 집합(Set)이 테이블 구조를 따릅니다. 따라서 딕셔너리의 키 또는 집합 요소가 되려면 hashable 해야 합니다. 여기서 hashable 하다는 건 Swift의 hashable 프로토콜을 채택함을 의미합니다.

 

Hashable Protocol

hashable 프로토콜을 채택했다는 건 hasher의 hash 함수를 통해 다양한 여러 길이의 데이터를 고정된 길이의 정수 값으로 변환할 수 있음을 의미합니다. 이때, 다양한 여러 길이를 고려할 필요가 없기 때문에 성능적으로 이득을 볼 수 있습니다.

 

hash함수를 통해 키값에 대응하는 벨류값(해쉬값)을 얻을 때 키값이 같으면 해쉬값은 항상 같습니다. 반대로 해쉬값이 같다고 키값이 같지는 않습니다. 일반적으로 생각했을 때, 해쉬값이 같다 면 키값도 같을 거라 생각할 수 있지만, 각각 다른 키값이지만 hash함수의 내부 로직에따라 벨류 값(해쉬값)이 같게 나올 수 있기 때문입니다.

 

그렇다면 유일한 키값 이어야 하지만 유일하지 않게 될 수 있는 문제가 발생합니다. 이때 Hashable프로토콜은 Equatable프로토콜을 채택했기 때문에 원래의 키값으로 할 수 있어 문제를 해결할 수 있습니다. Swift의 Hasable프로토콜을 찾아보면 Equtable프로토콜을 채택한 부분을 보실 수 있습니다.

 

Equatable프로토콜을 채택한 Hashable의 모습

 

반응형