[iOS][Swift] Equatable Protocol

Jay·2023년 9월 6일
0

iOS

목록 보기
34/47

프로그래밍에서 두 객체나 값을 비교하여 같은지 확인하는 것은 흔한 작업입니다. Swift는 Equatable 프로토콜을 통해 이 작업을 효율적으로 수행할 수 있게 합니다.

Equatable이란?

Equatable은 Swift의 프로토콜로, == 연산자를 사용하여 타입의 인스턴스를 값의 동등성에 따라 비교할 수 있게 합니다. 단순히 말하면, 타입의 두 인스턴스가 같은 값인지 결정할 수 있게 해줍니다.

왜 유용한가?

사용자 정의 객체의 목록이 있고 해당 목록에 특정 객체가 이미 있는지 확인하려고 한다고 상상해 보세요. Equatable 프로토콜을 채택함으로써, 배열에 의해 제공되는 contains 메서드를 간단히 사용할 수 있습니다.

Equatable을 어떻게 준수하나요?
Equatable을 준수하는 것은 간단합니다. 대부분의 경우, 당신의 타입의 속성들도 Equatable이면 Swift는 자동으로 == 함수를 생성해줍니다.

예제:

struct Book: Equatable {
    let title: String
    let author: String
}

let book1 = Book(title: "Swift 프로그래밍", author: "홍길동")
let book2 = Book(title: "Swift 프로그래밍", author: "홍길동")

print(book1 == book2)  // true가 출력됩니다

위 예제에서 title과 author는 모두 String 타입이며, String은 Equatable을 준수하기 때문에, Swift는 우리의 Book 구조체에 대해 자동으로 == 함수를 생성합니다.

하지만, 동등성에 대한 사용자 정의 로직이 있는 경우, 직접 구현할 수 있습니다:

struct Person: Equatable {
    let name: String
    let age: Int

    static func ==(lhs: Person, rhs: Person) -> Bool {
        return lhs.name == rhs.name && lhs.age == rhs.age
    }
}

기억해야 할 점

  • Reflexivity(반사성):
    인스턴스는 자신에게 동일해야 합니다. 즉, 모든 인스턴스 x에 대해, x == x는 true이어야 합니다.
  • Symmetry(대칭성):
    x == y가 true라면, y == x도 true이어야 합니다.
  • Transitivity(전이성):
    x == y와 y == z가 모두 true라면, x == z도 true이어야 합니다.

결론적으로, Equatable은 객체와 값의 비교를 쉽게 만드는 Swift의 강력한 도구입니다. 이것을 이해하고 활용함으로써, 보다 효율적이고 깔끔한 코드를 작성할 수 있습니다.

profile
Junior Developer

0개의 댓글