본문 바로가기
Swfit

Protocol extension

by GGShin 2022. 11. 2.

Protocol은 interface처럼 body가 없는 function이나 값이 정해지지 않은 property들만 정의될 수 있다고 알고 있었습니다. 그렇지만 extension을 사용하면 값이 정의된 property와 body가 구현된 function 역시 작성이 가능하다는 것을 알게되었습니다. 이러한 형태를 protocol extension이라고 합니다. 

 

Protocol extension을 사용하면, protocol과 extension의 한계를 적절히 보완할 수 있습니다. Protocol은 필수적으로 구현되야 할 method를 정의하여 코드 중복을 피할 수 있다는 장점이 있지만 body를 정의할 수 없다는 한계가 있습니다. Extension에서는 method의 body를 정의할 수는 있지만 코드 중복과는 상관이 없습니다 (왜냐면 단일 타입에만 적용되기 때문입니다). 그리고 protocol extension은 protocol 내에서도 메서드의 body를 정의하면서도 여러 타입에 적용하여 코드 중복을 줄일 수 있다는 장점을 갖게 되는 것입니다.

 

간략한 예시를 한 번 살펴보면,

 

protocol Recievable {
    var sender: String { get set }
    var receiver: String { get set }
   
}

extension Recievable {
    var from: String {
        return receiver
    }
}

 

Receivable이라는 protocol을 정의할 때는 property들을 get set 여부만 명시할 수 있습니다. 하지만 해당 protocol의 extension을 정의하게 되면, property의 값을 정의할 수 있게 됩니다. 만일 from이라는 property를 extension이 아닌 protocol에 바로 정의하려고 하면 컴파일 에러가 발생합니다.  

 


참고자료

https://www.hackingwithswift.com/sixty/9/4/protocol-extensions

 

Protocol extensions - a free Hacking with Swift tutorial

Was this page useful? Let us know! 1 2 3 4 5

www.hackingwithswift.com

 

반응형