[swift] 프로토콜과 프로토콜 지향 설계 원칙 (POP principles)

프로토콜은 Swift 언어의 강력한 기능 중 하나로, 타입 간의 일반적인 기능을 정의하는데 사용됩니다. 프로토콜을 사용하면 코드의 유연성을 높일 수 있고, 재사용 가능한 코드 생성이 가능합니다.

프로토콜 지향 설계 원칙은 다음과 같습니다:

1. Protocol Composition

프로토콜 합성(promotion)이라고도 알려진 이 개념은 여러 프로토콜을 조합하여 더 큰 프로토콜을 만드는 것을 말합니다. 이를 통해 코드의 유연성과 모듈성을 높일 수 있습니다.

예제:

protocol Playable {
    func play()
}

protocol Pauseable {
    func pause()
}

// Playable 및 Pauseable 프로토콜을 조합하여 AudioPlayable 프로토콜을 만듬
protocol AudioPlayable: Playable, Pauseable {
    func skip()
}

2. Protocol Inheritance

프로토콜은 클래스와 마찬가지로, 다른 프로토콜을 상속(확장)할 수 있습니다. 이러한 상속을 통해 다양한 기능을 조합하여 더 큰 프로토콜을 만들 수 있습니다.

예제:

protocol Loggable {
    func log()
}

// Loggable 프로토콜을 상속하여 Debuggable 프로토콜을 만듬
protocol Debuggable: Loggable {
    func debug()
}

3. Protocol Extensions

프로토콜의 확장을 통해 기본 구현을 제공할 수 있습니다. 이를 통해 프로토콜을 채택한 타입이 해당 기능을 구현하지 않아도 되게 할 수 있습니다.

예제:

protocol Resettable {
    func reset()
}

// 프로토콜 확장을 통해 reset()의 기본 구현을 제공
extension Resettable {
    func reset() {
        print("Resetting")
    }
}

프로토콜과 프로토콜 지향 설계 원칙을 잘 활용하면, 코드의 재사용성과 확장성을 향상시키는 데 도움을 줄 수 있습니다. 만약 자세한 내용을 알고 싶다면, Apple Developer Documentation를 참고하세요.