^야곰님 강좌^

프로토콜 : 특정 기능 수행에 필수적인 요소를 정의한 *청사진(blueprint)

구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)해서 프로토콜의 요구사항을 실제로 구현할 수 있다.

프로토콜을 만족시키는 타입을 프로토콜을 따른다(conform)고 말한다.

프로토콜에 필수 구현을 추가하거나 추가적인 기능을 더하기 위해 프로토콜을 확장(extend)하는 것이 가능하다.

문법

프로토콜의 정의는 클래스, 구조체, 열거형 등과 유사하다.


protocol SomeProtocol {
// protocol definition goes here
}

프로토콜을 따르는 타입을 정의하기 위해서는 타입 이름 뒤에 콜론을 붙이고 따를 프로토콜 이름을 적는다.

만약 따르는 프로토콜이 여러개라면 콤마로 구분한다.


struct SomeStructure: FirstProtocol, AnotherProtocol {
// structure definition goes here
}

클래스를 상속받을 경우 수퍼클래스를 프로토콜 앞에 적어준다.


class SomeClass: SomeSuperclass, FirstProtocol, AnotherProtocol {
// class definition goes here
}

mutating 키워드

mutating 키워드를 사용하면 인스턴스에서 변경가능하다는 것을 표시 할 수 있다.

mutating 키워드는 값타입 형에만 사용한다.

required 키워드

대부분의 프로토콜은 옵셔널 = 프로토콜에 정의된 모든 것들을 따르지 않아도 됨

하지만 required 키워드를 사용한 프로토콜 메서드는 무조건 따라야한다.

!만약 따르지 않는다면 동작하지 않음!

*청사진 : 어떠한 자세한 계획