Type: Protocol
A type that can be hashed into a Hasher to produce an integer hash value.
integer hash value를 생성하는 Hasher로 hash 될 수 있는 타입.
한마디로 Hashable Protocol 을 상속받는다는 것은 hash 될 수 있는 타입이라고 한다.
hash 가 될 수 있다는 말은 뭘까? 해시의 기본적인 개념은 생략하고 해시 뜻만 보면,
해시 함수에 의해 얻어지는 값은 해시 값, 해시코드, 해시 체크섬 또는 간단하게 해시라고 한다.
해시가 될 수 있다라는 것은 HashTable 에서 찾을 수 있다는 의미이다. HashTable에서 hash 값을 찾으려면 key가 필요하여 그 key는 식별할 수 있도록 유일해야한다.
protocol Hashable: Equatable {
var hashValue: Int { get }
func hash(into hasher: inout Hasher)
}
위에서 말했듯 hash값을 찾을 수 있는 key 값인 hashValue가 필요하다.
그런데 Hashable 옆에 상속받는 프로토콜은 뭘까?
Hashable은 Equatable Protocol 을 상속받고 있다.
protocol Equatable {
static func == (lhs: Self, rhs: Self) -> Bool
}
hashValue는 고유값이어야 하기 때문에 고유값인지 식별해 줄 수 있는 ==
함수가 필요하다.
우리가 값을 비교할 때 사용하는 == 연산자가 프로토콜 안에 들어있는 것이다.
우리가 일반적으로 사용하는 Int, String, Double 등등 애플에서 제공하는 다양한 기본 연산자들은 Hashable 타입을 이미 상속받고 있기 때문에 자연스럽게 == 연산자를 사용할 수 있었던 것이다.
Hashable로 만들어 주려먼 두 가지가 필요하다.