특정 부분을 구현하기위해 달성해야 하는 메소드와 프로퍼티드을 나열한 것.

스위프트에서 프로토콜을 구현 할 수 있는 구현체

  1. 구조체
  2. 클래스
  3. 열거형
  4. 익스텐션

예시)

protocol SomeMethodProtocol{
    func execute(cmd:String)
    func showPort(p:Int)->String
}
struct RubyService : SomeMethodProtocol{
    func showPort(p: Int) -> String {
        return "Port : \\(p)"
    }
    
    func execute(cmd: String) {
        if cmd == "start"{
            print("실행합니다.")
        }
    }
    
}

mutating, static

구조체나 열거형은 프로토콜의 메소드에 mutating 키워드가 추가되어 있지 않을 경우 프로퍼티의 값을 변경할 수 없다.

일반적으로 프로토콜에서 메소드 선언에 mutating 키워드가 붙지 않은 것은 2가지로 해석가능

mutating 키워드가 붙지 않은 메소드를 구현체에서 구현시 프로퍼티 값을 변경하면 오류 발생

mutating 키워드가 붙은 메소드를 구현체에서 구현시 프로퍼티를 수정하지 않을 경우 생략가능