Protocol
Equatable
A type that can be compared for value equality.
Equatable
프로토콜을 채택한 타입(class, value, enum)은 ==
, !=
연산자로 값의 같음, 같지 않음을 비교할 수 있다.
스위프트 표준 라이브러리의 대부분의 기본 데이터 타입은 Equatable 프로토콜을 따르고 있다.
class StreetAddress {
let number: String
let street: String
let unit: String?
init(_ number: String, _ street: String, unit: String? = nil) {
self.number = number
self.street = street
self.unit = unit
}
}
extension StreetAddress: Equatable {
static func == (lhs: StreetAddress, rhs: StreetAddress) -> Bool {
return
lhs.number == rhs.number &&
lhs.street == rhs.street &&
lhs.unit == rhs.unit
}
}
Equatable 프로토콜을 준수하기 위해서는
static func == (lhs: StreetAddress, rhs: StreetAddress) -> Bool
함수의 구현부를 작성해야 한다. ==
함수 정의에 따라 타입을 비교(같은지, 같지 않은지)할 수 있다.
Protocol
Hashable
A type that can be hashed into a Hasher to produce an integer hash value.
integer 해쉬 값을 가질 수 있는 타입을 의미한다.
Hashable Protocol을 준수한 타입은 Dictionary나, Set의 key가 될 수 있다.
다음 hash
메서드를 필수로 구현해야 한다.
hash 메서드를 구현해서 hash value를 얻을 수 있다.
func hash(into: inout Hasher)
// Hashes the essential components of this value by feeding them into the given hasher.
Hashable은 Equatable 상속하고 있으므로, ==
함수도 필수로 구현해야 한다.
==
으로 비교할 때와 HashValue를 사용하는 경우를 이해하고, 비교할 속성을 잘 정의할 수 있어야 한다.
https://zeddios.tistory.com/equatable
https://velog.io/@dev-lena/Hashable