반응형
Swift에서 해시 테이블이란
먼저, 해시 테이블이란 유일한 키값과 벨류로 저장되는 자료구조입니다. 대표적으로 Swift에서는 딕셔너리(Dictionary), 집합(Set)이 테이블 구조를 따릅니다. 따라서 딕셔너리의 키 또는 집합 요소가 되려면 hashable 해야 합니다. 여기서 hashable 하다는 건 Swift의 hashable 프로토콜을 채택함을 의미합니다.
Hashable Protocol
hashable 프로토콜을 채택했다는 건 hasher의 hash 함수를 통해 다양한 여러 길이의 데이터를 고정된 길이의 정수 값으로 변환할 수 있음을 의미합니다. 이때, 다양한 여러 길이를 고려할 필요가 없기 때문에 성능적으로 이득을 볼 수 있습니다.
hash함수를 통해 키값에 대응하는 벨류값(해쉬값)을 얻을 때 키값이 같으면 해쉬값은 항상 같습니다. 반대로 해쉬값이 같다고 키값이 같지는 않습니다. 일반적으로 생각했을 때, 해쉬값이 같다 면 키값도 같을 거라 생각할 수 있지만, 각각 다른 키값이지만 hash함수의 내부 로직에따라 벨류 값(해쉬값)이 같게 나올 수 있기 때문입니다.
그렇다면 유일한 키값 이어야 하지만 유일하지 않게 될 수 있는 문제가 발생합니다. 이때 Hashable프로토콜은 Equatable프로토콜을 채택했기 때문에 원래의 키값으로 할 수 있어 문제를 해결할 수 있습니다. Swift의 Hasable프로토콜을 찾아보면 Equtable프로토콜을 채택한 부분을 보실 수 있습니다.
반응형