(합성 구현을 통해 프로토콜 준수)
Swift에서 Equatable, Hashable, Comparable의 프로토콜 준수를 자동으로 제공할 수 있습니다.
synthesized implementation(합성된 구현)을 사용하게 되면 프로토콜의 요구사항을 구현하기 위해 반복적으로 상용구 코드를 작성할 필요가 없습니다.
Swift에서는 다음과 같은 종류의 커스텀 타입에 대해 Equatable의 합성 구현을 제공합니다.
- Hashable 프로토콜을 준수하는 저장 프로퍼티만 가진 구조체
- Equatable 프로토콜을 준수하는 연관 타입만 가지는 열거형
- 연관 타입이 없는 열거형
== 의 합성 구현을 받으려면 == 연산자를 직접 구현하지 않고 원본 선언이 포함된 파일에서 Equatable를오 수한오다어 선언하는 것으로 대체할 수 있습니다.
Equatable 프로토콜은 !=의 기본 구현을 제공합니다.
아래 예제에서 Vertor3D의 x, y, z 프로퍼티는 모두 Equatable 타입이기 때문에 Vector3D는 등가연산자(==) 합성 구현을 받습니다.
Vector3D는 위에서 설명한 합성 구현 제공으로 따지면 첫번째 Hashable 프로토콜을 준수하는 저장 프로퍼티만 가진 구조체 라고 볼 수 있습니다. Equatable은 Hashable 프로토콜을 준수하기 때문에~
Swift는 다음과 같은 커스텀 타입에 대해 Hasable 합성 구현도 제공합니다.
- Hashable 프로토콜을 준수하는 저장 프로퍼티만 가지는 구조체
- Hashable 프로토콜을 준수하는 연관된 타입만 가지는 열거형
- 연관된 타입이 없는 열거형
hash(into:)의 합성 구현을 받으려면 hash(into:) 메서드를 직접 구현하지 않고 원래 선언에 hashable를 준수한다고 선언하면 됩니다.
Note
Hash(into:) 메서드는 Hashable 프로토콜의 요구조건
Swift는 원시 값이 없는 열거 형에 대해 비교 가능한 합성 구현을 제공합니다.
열거형에 연관된 유형이 있는 경우 모두 비교 가능한 프로토콜을 준수해야 합니다.
< 의 합성구현을 받으려면 < 연산자를 직접 구현하지 않고 열거 선언에 Comparable을 준수한다고 선언하면 사용 가능하고 기본 구현인 <=, > 및 >=는 나머지 비교 연산자를 제공합니다.
아래 예제에서는 Comparable 프로토콜 채택을 통해서 sorted() 메서드를 합성 구현을 통해 사용하는 예제입니다.
'Swift > 꼬꼬무' 카테고리의 다른 글
Protocol Inheritance (0) | 2023.07.04 |
---|---|
Collections of Protocol Types (0) | 2023.07.04 |
Protocol 확장을 통한 프로토콜 준수 (0) | 2023.06.23 |
Delegation (0) | 2023.06.16 |
Protocol Requirements (0) | 2023.06.16 |