Equatable은
Equatable을 채택한 대상끼리 같은 값인지 확인할때 사용하는 Protocol이다.
간단히 설명을 보면
Equatable 을 채택했을 경우 == 연산자와 != 연산자를 사용하여
같음 또는 같지 않음을 확인할 수 있고 SwiftStandardLibrary의 대부분 타입이 이 Equatable Protocol을 따른다고 한다.
우리가 흔히 사용하는 Int, Float같은 자료형은 모두 ==, != 연산자를 통해 값을 비교하는데
이는 Int,Float같은 자료형이 Equatable Protocol을 채택했기 때문이다.
Int타입의 변수를 선언하고 command+Click 으로 그 정의를 따라가보면
Int 옆에 채택한 Protocol 이 나오는데 이 프로토콜들의 뿌리를 따라가다보면 Equatable이 나온다.
Equatable의 정의는 아래와 같다.
이 위로 어마어마한 양의 주석이 있는데 그것까지는 시간이 되면 읽어보도록...
이정도면 대충 감이 왔을테지만 확실한 이해는 예제를 보는게 빠르니까
Equatable을 사용하여 두 클래스를 비교하는 예제를 만들어보자.
아래는 일반적으로 비교를 하는 코드이다.
두 값을 비교할때 비교연산자를 통해서 쉽게 값을 비교할 수 있다.
Equatable을 이미 채택한 Int를 사용한 것이니 저렇게 편히 사용할 수 있지만,
지금 실습할 것은 Equatable을 채택하지 않은 class에 Equatable을 채택하여 비교가 가능하도록 하는것이다.
number1과 number2를 대신하는 클래스를 넣어줄텐데
상품을 비교하는 시나리오로해서 product1, product2로 해보겠다.
간단히Product클래스를 작성하고 Equatable을 채택하도록 한다.
일단 위처럼 작성만 해두면 Equatable을 준수하지않았다는 경고가 나타난다.
Equatable을 채택할 경우 필수로 구현해야하는 메서드를 추가하지 않아서 나타난 경고이니, Fix버튼을 눌러 추가를 해주자.
그럼 Product는 이런 모습이 되는데 여기서 잠깐!
우리가 같은 타입의 대상 두개를 비교할땐 고유한값을 통해 서로를 비교한다.
그것이 이름이 될 수도 있고 , 주민등록번호가 될 수 있듯이.
Product끼리 비교가 가능하도록 유일한 값을 지니게 해야한다.
productCode를 추가하고 init을 통해 초기화를 시킬 수 있도록 만들어보자.
이제 == 안에 lhs의 productCode와 rhs의 productCode가 같은지 비교하고 그 결과를 리턴하도록 한다.
productCode는 Int타입으로 이미 Equatable을 채택하고 있으니 == 사용이 가능하다.
결과적으로 아래와 같이 클래스 작성을 완료하고
productCode가 서로다른 두개의 클래스를 생성해서 비교를 해보면된다.
전체 코드는 여기
'난 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 |