본문 바로가기
iOS/iOS

Equatable

by 황민우 2022. 6. 17.

Equatable

- 프로토콜
- 값이 동일한지 비교하는 타입
- 클래스, 구조체, enum과 같은 타입이 채택할 수 있습니다.

사용

- Equatable를 채택하여 아래의 코드를 Int 값뿐만 아니라 String, Double, Float에도 다 적용할 수 있습니다.

var some = 1
var other = 2

if some == other {
  // code
} else {
  // code
}

- 그럼 아래의 코드와 같이 복잡한 클래스나 구조체를 만들어 비교한다면 어떻게 해야 할까요?

class A {
  var aNum : Int
  init(_ aNum: Int) {
    self.aNum = aNum
  }
}

if A(1) == A(2) // error

- 위처럼 A(1)와 A(2)가 같은지는 xcode에서 확인할 수 없지만, Equatable을 채택하여 준수하면 비교할 수 있습니다.

// 클래스A는 Equatable을 채택하고 준수함으로써 동일한지 안한지 판별이 가능해짐
class A: Equatable {
  var aNum : Int
  init(_ aNum: Int) {
    self.aNum = aNum
  }
}

- 위와 같이 프로토콜을 채택하고 실행하면 Type 'A' does not conform to protocol 'Equatable'이라는 에러가 발생합니다.

- 해당 에러는 클래스 A가 Equtable프로토콜을 준수하고 있지 않다고 알려주는 에러입니다.

- 따라서 Equatable프로토콜에 대한 필수 메서드를 작성하면 이렇게 됩니다.

class A: Equatable {
  var aNum : Int
  init(_ aNum: Int) {
    self.aNum = aNum
  }
  public static func ==(lhs: Self, rhs: Self) -> Bool {

  }
}

- 그럼 또 다른 에러가 발생합니다.

- Self가 A이긴 하지만 파라미터를 안에서 사용하지 못한다는 에러로, 파라미터의 Self를 A로 바꿔주면 됩니다.

class A: Equatable {
  var aNum : Int
  init(_ aNum: Int) {
    self.aNum = aNum
  }
  public static func ==(lhs: A, rhs: A) -> Bool {

  }
}

- 그럼 Missing return in a function expected to return 'Bool'이라는 에러가 나타나는데 에러를 해결하기 위해, 

필수 메서드에서 값을 비교하는 리턴 코드를 작성해주겠습니다.

class A: Equatable {
  var aNum : Int
  init(_ aNum: Int) {
    self.aNum = aNum
  }
  public static func ==(lhs: A, rhs: A) -> Bool {
    return lhs.aNum == rhs.aNum
  }
}

- 완성 코드로 클래스 A의 프로퍼티인 aNum의 값을 비교 판별해 리턴해주는 코드입니다. 

- Equatable을 준수했기 때문에 처음과 다르게 비교가 가능하게 되며, 그 결괏값이 Bool 타입으로 나타납니다.

if A(1) == A(2) {
  print("same")
} else {
  print("different")
}

// different

- 그리하여 A(1)와 A(2)의 값을 비교해보면 정상적으로 결과가 출력되는 것을 확인할 수 있습니다.


내용 출처

https://zeddios.tistory.com/227

 

Swift ) Equatable

안녕하세요 :) Zedd입니다. 오늘은 Swift의 Equatable에 대해서 알아볼거에요 XD 저도 처음들어본답니다... 다음글에서 Equatable이 나오는데 Equatable을 모르시는 분들을 위해(+나) 정리해보려고 해요 :)

zeddios.tistory.com

https://developer.apple.com/documentation/swift/equatable

 

Apple Developer Documentation

 

developer.apple.com

 

'iOS > iOS' 카테고리의 다른 글

nib  (0) 2022.06.18
Hashable  (0) 2022.06.16
Result타입  (0) 2022.06.13
접근 제어자의 종류  (0) 2022.06.11
NSCache와 NSDictionary의 차이를 설명하시오.  (0) 2022.06.09

댓글