[swift] 프로토콜의 연속 적용 (Protocol Conformance)

프로토콜은 특정 작업이나 행동을 수행하기 위한 방법을 정의하는 추상적인 청사진으로, 프로토콜을 준수하는 타입은 프로토콜이 요구하는 속성과 메서드를 구현해야 합니다. 프로토콜을 연속(확장)하여 새로운 메서드나 속성을 추가하거나 기존의 프로토콜을 준수하는 타입에 새로운 프로토콜을 적용할 수 있습니다.

기존 프로토콜에 새로운 기능 추가하기

기존의 프로토콜을 확장하여 새로운 메서드나 속성을 추가하려면 다음과 같이 새로운 프로토콜을 정의하고, 기존 프로토콜을 상속해야 합니다.

protocol Drawable {
    func draw()
}

// Drawable 프로토콜을 확장하여 Colorable 프로토콜 정의
protocol Colorable: Drawable {
    var color: String { get set }
    func fill()
}

위 예제에서 Colorable 프로토콜은 Drawable 프로토콜을 상속하고, color 속성과 fill() 메서드를 추가하여 새로운 기능을 정의합니다.

기존 타입에 새로운 프로토콜 적용하기

기존의 타입에 새로운 프로토콜을 적용하려면 ‘익스텐션(Extensions)’을 사용하여 기존 타입에 새로운 프로토콜을 준수하도록 확장해야 합니다.

// 기존의 Rectangle 구조체
struct Rectangle: Drawable {
    // draw() 메서드 구현
    func draw() {
        print("Drawing a rectangle")
    }
}

// Rectangle 구조체에 Colorable 프로토콜 적용
extension Rectangle: Colorable {
    var color: String {
        get { return "Red" }
        set { print("New color: \(newValue)") }
    }
    
    func fill() {
        print("Filling the rectangle with color")
    }
}

위 예제에서는 기존의 Rectangle 구조체에 Colorable 프로토콜을 적용하기 위해 extension을 사용하여 color 속성과 fill() 메서드를 구현했습니다.

프로토콜을 연속 적용하여 기존의 프로토콜을 확장하고, 기존 타입에 새로운 프로토콜을 적용함으로써 코드의 재사용성과 유연성을 높일 수 있습니다.