[Swift] 프로토콜

승아·2021년 4월 17일
0

부스트코스-iOS 프로그래밍을 위한 스위프트 기초

✅ 프로토콜이란?

  • 프로토콜은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다.
  • 구조체, 클래스, 열거형은 프로토콜을 채택해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있습니다.
  • 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜을 준수한다(Conform)고 표현합니다.
  • 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 합니다. 즉, 프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하지는 않습니다.
protocol Talkable {
    
    // 프로퍼티 요구
    // 항상 var 키워드 사용
    var topic: String { get set }
    var language: String { get }
    
    // 메서드 요구
    func talk()
    
    // 이니셜라이저 요구
    init(topic: String, language: String)
}

프로토콜 상속

  • 프로토콜은 하나 이상의 프로토콜을 상속받아 기존 프로토콜의 요구사항보다 더 많은 요구사항을 추가할 수 있습니다.
  • 프로토콜 상속 문법은 클래스의 상속 문법과 유사하지만, 프로토콜은 클래스와 다르게 다중상속이 가능합니다.
  • 클래스에서 상속과 프로토콜 채택을 동시에 하려면 상속받으려는 클래스를 먼저 명시하고 그 뒤에 채택할 프로토콜 목록을 작성합니다.

프로토콜 준수 확인

  • is, as 연산자를 사용해서 인스턴스가 특정 프로토콜을 준수하는지 확인할 수 있다.
someAny is Readable 
if let someReadable: Readable = someAny as? Readable {
    someReadable.read()
}

💡 interface와 protocol의 차이

  • Interface
    - 프로퍼티의 초기값 설정가능
    - 선언된 모든 메소드 구현
    - static(정적 멤버) 선언할 수 없음
  • Protocol
    - 프로퍼티의 초기값 설정불가
    - optional 키워드를 통해 선택적으로 구현 가능
    - static(정적 멤버) 선언할 수 있음

0개의 댓글