Equatable, Hashable

Equatable

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 함수의 구현부를 작성해야 한다. == 함수 정의에 따라 타입을 비교(같은지, 같지 않은지)할 수 있다.

Hashable

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를 사용하는 경우를 이해하고, 비교할 속성을 잘 정의할 수 있어야 한다.

See Also


https://zeddios.tistory.com/equatable
https://velog.io/@dev-lena/Hashable

좋은 웹페이지 즐겨찾기