[swift] 구조체와 열거형의 Equatable, Hashable 프로토콜 적용 방법

소개

Swift에서 구조체와 열거형을 사용할 때 Equatable 및 Hashable 프로토콜을 구현하는 것은 중요합니다. Equatable 프로토콜을 준수하면 두 값을 비교할 수 있고, Hashable 프로토콜을 준수하면 Set 또는 Dictionary와 같은 해시 기반 컬렉션에 저장할 수 있습니다. 이 게시물에서는 Swift에서 구조체와 열거형에서 Equatable 및 Hashable 프로토콜을 어떻게 구현하는지 알아보겠습니다.

Equatable 프로토콜 구현하기

구조체나 열거형에서 Equatable 프로토콜을 구현하려면 == 연산자를 오버로드해야 합니다. 구조체나 열거형에 저장된 프로퍼티들을 비교하여 동일한지 확인하는 역할을 합니다.

다음은 Equatable 프로토콜을 준수하는 구조체의 예제입니다.

struct Point: Equatable {
    var x: Int
    var y: Int
    
    static func ==(lhs: Point, rhs: Point) -> Bool {
        return lhs.x == rhs.x && lhs.y == rhs.y
    }
}

위의 예제에서 Point 구조체에 Equatable 프로토콜을 준수하기 위해 == 연산자를 오버로드했습니다.

Hashable 프로토콜 구현하기

Hashable 프로토콜을 준수하려면 hashValue 프로퍼티를 제공해야 합니다. 구조체나 열거형의 각 인스턴스에 대해 유일한 해시 값을 반환해야 합니다.

다음은 Hashable 프로토콜을 준수하는 구조체의 예제입니다.

struct Person: Hashable {
    var name: String
    var age: Int
    
    func hash(into hasher: inout Hasher) {
        hasher.combine(name)
        hasher.combine(age)
    }
}

위의 예제에서 Person 구조체에 Hashable 프로토콜을 준수하기 위해 hash(into:) 메서드를 구현했습니다.

결론

Swift에서 구조체와 열거형에서 Equatable 및 Hashable 프로토콜을 구현하는 방법에 대해 살펴보았습니다. 이러한 프로토콜을 구현하면 값의 동일성을 비교하거나 해시 기반 컬렉션에 값을 저장하는 등의 작업을 보다 쉽게 처리할 수 있습니다.

더 많은 정보는 Swift 공식 문서를 참고할 수 있습니다.