IOS개발: SWIFT/4. 객체 지향 프로그래밍 심화

Swift 프로토콜 정의와 채택: 프로토콜 상속, 프로토콜 연장

_Blue_Sky_ 2024. 9. 13. 13:34
728x90
728x90

Swift 프로토콜: 정의, 채택, 상속, 연장 상세 설명

프로토콜이란 무엇인가?

Swift에서 프로토콜(Protocol)은 특정 타입이 갖춰야 할 메소드, 프로퍼티, 이니셜라이저 등의 요구 사항을 정의하는 청사진과 같습니다. 마치 설계도처럼, 프로토콜을 통해 다양한 타입들이 공통적으로 갖춰야 할 기능을 정의하고, 이를 통해 코드의 재사용성과 유연성을 높일 수 있습니다.

프로토콜 정의

protocol ProtocolName {
    // 요구 사항 정의
    var property: Type { get set }
    func method(parameter: Type) -> ReturnType
    init(parameter: Type)
}
 
 
  • property: 프로토콜을 채택하는 타입이 반드시 가져야 할 프로퍼티
  • method: 프로토콜을 채택하는 타입이 반드시 구현해야 할 메소드
  • initializer: 프로토콜을 채택하는 타입이 반드시 구현해야 할 이니셜라이저

프로토콜 채택

class MyClass: ProtocolName {
    // 프로토콜 요구 사항 구현
    var property: Int = 0
    func method(parameter: String) -> Bool {
        // 메소드 구현
    }
    required init(parameter: Int) {
        // 이니셜라이저 구현
    }
}
 
  • class MyClass: ProtocolName과 같이 클래스 뒤에 콜론(:)을 사용하여 프로토콜을 채택합니다.
  • 채택한 클래스는 프로토콜에 정의된 모든 요구 사항을 반드시 구현해야 합니다.

프로토콜 상속

프로토콜은 다른 프로토콜을 상속받을 수 있습니다. 이를 통해 프로토콜을 계층적으로 구성하고, 코드 재사용성을 높일 수 있습니다.

protocol FirstProtocol {
    // ...
}

protocol SecondProtocol: FirstProtocol {
    // FirstProtocol의 모든 요구 사항 + 추가 요구 사항
}
 
  • SecondProtocol은 FirstProtocol의 모든 요구 사항을 상속받고, 추가적인 요구 사항을 정의할 수 있습니다.

프로토콜 연장 (Protocol Extension)

프로토콜 연장을 통해 프로토콜에 새로운 기능을 추가하거나, 기존 기능에 대한 기본 구현을 제공할 수 있습니다.

extension ProtocolName {
    func defaultMethod() {
        // 기본 구현 제공
    }
}
 
  • 프로토콜을 채택한 모든 타입은 자동으로 이 연장된 기능을 사용할 수 있습니다.

프로토콜 활용 예시

  • 델리게이트 패턴: 객체 간의 통신을 위한 델리게이트 패턴을 구현할 때 프로토콜을 사용합니다.
  • 데이터 소스: 테이블 뷰나 컬렉션 뷰의 데이터 소스를 정의할 때 프로토콜을 사용합니다.
  • 타입 캐스팅: 다양한 타입을 하나의 프로토콜로 통일하여 안전하게 타입 캐스팅을 수행할 수 있습니다.

프로토콜의 장점

  • 코드 재사용성: 프로토콜을 통해 공통적인 기능을 추출하여 코드 재사용성을 높일 수 있습니다.
  • 유연성: 다양한 타입에 동일한 인터페이스를 제공하여 코드의 유연성을 높일 수 있습니다.
  • 타입 안전성: 프로토콜을 통해 타입을 검증하여 안전한 코드를 작성할 수 있습니다.
  • 모듈화: 코드를 모듈화하여 관리하기 쉽게 만들 수 있습니다.

실제 예시: UITableViewDataSource 프로토콜

protocol UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    // ...
}
 

UITableViewDataSource 프로토콜은 테이블 뷰에 데이터를 제공하기 위한 메소드들을 정의합니다. 이 프로토콜을 채택하는 클래스는 테이블 뷰의 데이터 소스 역할을 할 수 있습니다.  

결론

Swift의 프로토콜은 객체 지향 프로그래밍에서 매우 중요한 개념입니다. 프로토콜을 효과적으로 활용하면 코드의 재사용성, 유연성, 안전성을 높이고, 더욱 강력하고 유지보수가 용이한 애플리케이션을 개발할 수 있습니다.

728x90
728x90