원본 데이터를 특정 규칙에 따라 처리하여 간단한 숫자로 만든 것을, 해쉬값(Hash Value)이라고 한다.
(정확히는 해쉬 함수를 통해 원본 데이터를 64bit의 Int값으로 변환한 것이다.)
보통 두 개의 데이터를 비교할 때 데이터가 동일하면, 각 데이터의 해쉬값도 동일하다.
그러나 데이터가 조금이라도 다르면 완전히 다른 해쉬값을 갖는다.
(즉 데이터가 달라지면 해쉬값도 달라지기 때문에, 해쉬값을 통해 원본 데이터를 유추할 수 없다.)
데이터의 해쉬값은
.hashValue를 통해 출력할 수 있는데, 코드를 컴파일 및 실행할 때마다 모든 해쉬값이 변경되므로 주의해야 한다.
Hashable한 데이터 타입은 해쉬값을 구할 수 있다.
Collection Type 중 Set을 보면 "요소로 Hashable한 값만 올 수 있다"라고 명시되어 있는데, Hashable한 값은 말그대로 Hashable Protocol을 준수한 값이다.
public protocol Hashable : Equatable {
var hashValue: Int { get }
func hash(into hasher: inout Hasher)
}
Hashable은 Equatable을 준수하고 있어, hashValue를 통해 데이터 간 비교가 가능하다.
그리고 Swift의 기본 데이터 타입은 모두 Hashable한 값이기 때문에 데이터 간의 비교가 가능한 것이다.