Equatable은
Equatable을 채택한 대상끼리 같은 값인지 확인할때 사용하는 Protocol이다.
간단히 설명을 보면
![](https://blog.kakaocdn.net/dn/dlqZ74/btraIm1g5GU/peIq2R07ydnNmTqfC6ovo1/img.png)
Equatable 을 채택했을 경우 == 연산자와 != 연산자를 사용하여
같음 또는 같지 않음을 확인할 수 있고 SwiftStandardLibrary의 대부분 타입이 이 Equatable Protocol을 따른다고 한다.
우리가 흔히 사용하는 Int, Float같은 자료형은 모두 ==, != 연산자를 통해 값을 비교하는데
이는 Int,Float같은 자료형이 Equatable Protocol을 채택했기 때문이다.
![](https://blog.kakaocdn.net/dn/B6gy1/btraInskd9d/voWg9IY7T1wkjyqLjVNSmK/img.png)
Int타입의 변수를 선언하고 command+Click 으로 그 정의를 따라가보면
![](https://blog.kakaocdn.net/dn/Qr6sV/btraKEtyJL1/SW69bvf0D9kKGGrwAZMzeK/img.png)
Int 옆에 채택한 Protocol 이 나오는데 이 프로토콜들의 뿌리를 따라가다보면 Equatable이 나온다.
Equatable의 정의는 아래와 같다.
![](https://blog.kakaocdn.net/dn/r0jiI/btraMq2Gdg4/NQJaKga8kP6iRQzcaMCHyK/img.png)
이 위로 어마어마한 양의 주석이 있는데 그것까지는 시간이 되면 읽어보도록...
이정도면 대충 감이 왔을테지만 확실한 이해는 예제를 보는게 빠르니까
Equatable을 사용하여 두 클래스를 비교하는 예제를 만들어보자.
아래는 일반적으로 비교를 하는 코드이다.
![](https://blog.kakaocdn.net/dn/ddJ8Ws/btraL1n1xXq/WsCmDXZeiOJYhCmdhe0drk/img.png)
두 값을 비교할때 비교연산자를 통해서 쉽게 값을 비교할 수 있다.
Equatable을 이미 채택한 Int를 사용한 것이니 저렇게 편히 사용할 수 있지만,
지금 실습할 것은 Equatable을 채택하지 않은 class에 Equatable을 채택하여 비교가 가능하도록 하는것이다.
number1과 number2를 대신하는 클래스를 넣어줄텐데
상품을 비교하는 시나리오로해서 product1, product2로 해보겠다.
간단히Product클래스를 작성하고 Equatable을 채택하도록 한다.
![](https://blog.kakaocdn.net/dn/bQiHHN/btraP8Ab99o/00wTqsznirSbthUEQnjYn1/img.png)
일단 위처럼 작성만 해두면 Equatable을 준수하지않았다는 경고가 나타난다.
Equatable을 채택할 경우 필수로 구현해야하는 메서드를 추가하지 않아서 나타난 경고이니, Fix버튼을 눌러 추가를 해주자.
![](https://blog.kakaocdn.net/dn/dwVI9R/btraNJVf3fN/Q8piXlqHyckRESNGgWSLc0/img.png)
그럼 Product는 이런 모습이 되는데 여기서 잠깐!
우리가 같은 타입의 대상 두개를 비교할땐 고유한값을 통해 서로를 비교한다.
그것이 이름이 될 수도 있고 , 주민등록번호가 될 수 있듯이.
Product끼리 비교가 가능하도록 유일한 값을 지니게 해야한다.
productCode를 추가하고 init을 통해 초기화를 시킬 수 있도록 만들어보자.
이제 == 안에 lhs의 productCode와 rhs의 productCode가 같은지 비교하고 그 결과를 리턴하도록 한다.
productCode는 Int타입으로 이미 Equatable을 채택하고 있으니 == 사용이 가능하다.
결과적으로 아래와 같이 클래스 작성을 완료하고
![](https://blog.kakaocdn.net/dn/d7TUqA/btraJzsv2vI/O7NgOm0miYjk3YzbERVbD1/img.png)
productCode가 서로다른 두개의 클래스를 생성해서 비교를 해보면된다.
![](https://blog.kakaocdn.net/dn/lmqmv/btraNxNNwIY/u6I8jIKAr9yTMDI3l7QhGK/img.png)
전체 코드는 여기
'난 iOS개발자 > iOS' 카테고리의 다른 글
연락처 저장화면 호출하기 CNContactViewController (0) | 2021.07.29 |
---|---|
UITextField LeftPadding (0) | 2021.07.29 |
RTL (0) | 2021.07.29 |
개행(\n) 없이 두 줄 이상의 문자열 할당하기 (0) | 2021.07.29 |
String Extension (0) | 2021.07.27 |