TIL60 - Protocol extension
Swift에서 특징중 하나는 protocol에서 extension을 지원한다는 사실입니다.
그래서 Protocol Extension을 사용하면 Protocol에서 선언된 메서드, 속성 또는 이니셜라이저의 기본 구현을 제공할 수 있습니다.
Protocol을 채택하는 모든 클래스, 구조체 또는 열거형은 해당 기본 구현을 상속 받습니다.
다음은 Protocol Extension을 사용하는 예입니다.
protocol Vehicle {
var numberOfWheels: Int { get }
}
extension Vehicle {
var numberOfWheels: Int {
return 4
}
}
struct Car: Vehicle {
}
let car = Car()
print(car.numberOfWheels) // 출력: 4
위의 예제에서, Vehicle
Protocol에 numberOfWheels
속성을 선언했습니다. 그런 다음, extension
키워드를 사용하여 Vehicle
Protocol에 대한 기본 구현을 제공했습니다. 이제 Car
구조체가 Vehicle
Protocol을 채택할 때, numberOfWheels
속성에 대한 구현을 제공하지 않아도 기본값인 4를 상속받게 됩니다.
이러한 방식으로 Protocol Extension을 사용하면 코드를 더욱 모듈화하고 재사용 가능하게 만들 수 있습니다. 또한, 기존 Protocol에 새로운 기능을 추가하는 것도 가능합니다.
이를 통해 특정 프로토콜을 conform하는 class는 전부 동일한 함수호출을 가능하게 합니다.
able이라고 불리우는 프로토콜들은 extension을 통해 function을 정의하고 해당 function의 오버라이딩을 금지시킵니다.
이를 통해 라이브러리를 만드는 구조를 많이 사용합니다.(Moya, alamofire)
댓글
