[TIL] Hashable과 Equatable의 차이

Eden·2025년 8월 11일

Equatable은 두 인스턴스가 같은지 비교할 수 있도록 하는 프로토콜이고, Hashable은 객체를 해시값으로 변환할 수 있도록 하는 프로토콜입니다. Hashable은 Equatable을 상속하기 때문에 Hashable을 채택하면 반드시 == 비교를 구현해야 합니다. Equatable은 == 연산을 구현해 값의 동등성을 판단하고, Hashable은 이를 기반으로 hash(into:)를 구현해 Dictionary의 키나 Set의 원소처럼 빠른 검색과 저장이 가능하게 합니다.

추가로 확인해보니 Hashable을 채택한 구조체에서 프로퍼티가 모두 Hashable이라면 == 비교와 hash(into:)를 자동으로 만들어줍니다.

  • 하지만 직접 구현할 수도 있습니다. (아래 코드 참고)
struct MyItem: Hashable {
    let id: Int
    let title: String

    static func == (lhs: MyItem, rhs: MyItem) -> Bool {
        return lhs.id == rhs.id // id가 같으면 같은 객체로 본다
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }
}
profile
iOS Dev

0개의 댓글