Hash란
어떤 특정 값(Key)을 해싱 함수에 넣었을 때 HashTable의 index로 변환한 후 HashTable에 Value를 저장하는 것을 말한다.
Equatable과 마찬가지로 swift의 기본 자료형들은 Hashable 프로토콜이 자동 채택되어 따로 구현하지 않아도 사용할 수 있다.
struct
struct의 경우 내부 변수가 기본 자료형인 경우 따로 구현하지 않아도 사용 가능하다.
struct Dog: Hashable{
let name: String = "a"
let age: Int = 10
}
let dog: [Dog:Int] = [:]
class
class의 경우 Hashable 내부 프로토콜과 Equatable 내부 프로토콜 함수까지 모두 구현해야 한다.
왜냐하면 Hashable 프로토콜은 Equatable 프로토콜을 상속받기 때문이다!
class Cat: Hashable{
let name: String = "a"
let age: Int = 10
static func == (lhs: Cat, rhs: Cat) -> Bool {
return lhs.name == rhs.name
}
func hash(into hasher: inout Hasher) {
hasher.combine(name)
hasher.combine(age)
}
}
let cat: [Cat:Int] = [:]
Hashable이 Equatable을 상속받아야 하는 이유
HashValue는 무조건 고유값으로 존재해야 한다.
따라서 비교하여 구별할 수 있는 '==' 함수가 필요하므로 Equatable 프로토콜을 상속받아야 한다.
# 참고한 사이트
'iOS > Swift 상식' 카테고리의 다른 글
Escaping 개념 (0) | 2023.03.04 |
---|---|
Mutating (0) | 2023.03.04 |
Equatable 이란? (0) | 2023.03.03 |
POP(Protocol Oriented Programming) vs OOP(Object Oriented Programming) (0) | 2023.02.21 |
프로토콜이란? (0) | 2023.02.21 |