iOS/Swift 상식

Hashable 및 Equatable을 상속 받아야 하는 이유

HJ39 2023. 3. 4. 22:32

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 프로토콜을 상속받아야 한다.

 

 

 

# 참고한 사이트

  1. https://velog.io/@hayeon/Hashable%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-Equatable%EC%9D%84-%EC%99%9C-%EC%83%81%EC%86%8D%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EC%A7%80-%EC%84%A4%EB%AA%85%ED%95%98%EC%8B%9C%EC%98%A4
  2. https://babbab2.tistory.com/149

'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