Protocol

  • 특정 역활을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의

  • 구조체(Struct), 클래스(Class), 열거형(Enum)은 프로토콜(Protocol)을 채택(Adopted)해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현 할 수 있다

  • 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜을 준수한다(Conform)고 표현

  • 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 한다

  • 프로토콜은 기능을 정의하고 제시 할 뿐, 스스로 기능을 구현하지 않는다.

protocolImage


Protocol 요구사항

  • 프로토콜은 타입이 특정 기능을 수행하기 위해 필요한 기능을 요구

    • 프로토콜이 자신을 채택한 타입에 요구하는 사항 => 프로퍼티나 메서드와 같은 기능들
  • 프로토콜은 프로퍼티, 메서드, 서브스크립트, 이니셜라이저 등의 기능을 요구 할 수 있다


Protocol의 프로퍼티 요구

  • 프로토콜은 자신을 채택한 타입이 어떤 프로퍼티를 구현해야 하는지 요구할 수 있다

  • 프로토콜은 그 프로퍼티의 종류(연산 프로퍼티, 저장 프로퍼티)는 따로 신경쓰지 않는다

  • 프로토콜을 채택한 타입은 프로토콜이 요구하는 프로퍼티의 이름과 타입만 맞도록 구현해주면 된다.

  • 프로퍼티를 읽기 전용으로 할지 혹은 읽고 쓰기가 모두 가능하게 할지는 프로토콜이 정해야 한다.

  • 프로토콜의 프로퍼티 요구사항은 항상 var 키워드를 사용한 변수 프로퍼티로 정의된다.

  • 읽기와 쓰기가 모두 가능한 프로퍼티는 프로퍼티의 정의 뒤에 {get,set} 이라고 명시 해야한다.

    • 읽기 전용 프로퍼티는 프로퍼티 정의 뒤에 {get} 이라고 명시

protocolImage2


Protocol의 메서드 요구

  • 프로토콜은 특정 인스턴스 메서드나 타임 메서드를 요구할 수도 있다

  • 프로토콜이 요구할 메서드는 프로토콜 정의에서 작성한다

  • 메서드의 실제 구현부인 중괄호 부분은 제외하고 메서드의 이름, 매개변수, 반환 타입 등만 작성한다.

  • 프로토콜의 메서드 요구에서는 매개변수 기본값을 지정할 수 없다.

  • 프로토콜에서 타입 메서드 요구할 때는 타입 프로퍼티 요구와 마찬가지로 앞에 static 키워드를 명시한다.

  • static 키워드를 사용하여 요구한 타입 메사드를 클래스에서 실제 구현할 때에는 static 키워드나 class 키워드 어느 쪽을 사용해도 무방하다.

protocolMethodImage