Protocol
은 method, property 등의 blueprint(청사진)으로 정의된다. Swift에서 Protocol은 Class, Structure, Enumeration 등에서 adopted(채택)
되며, Protocol에서 명시된 variable이나 function이 실제로 구현된다. 어떠한 타입이라도 Protocol의 명세사항이 만족된다면, 해당 Class, Structure, Enumeration 등은 Protocol을 conform(준수)
한다고 말한다.
protocol MyProtocol {
// Protocol requeriments
}
struct MyStruct: MyProtocol, AnotherProtocol, ThirdProtocol {
//structure implementation here
}
enum MyEnum: MyProtocol, AnotherProtocol, ThirdProtocol {
//enum implementation here
}
class MyClass: MyBaseClass, MyProtocol, AnotherProtocol, ThirdProtocol {
//class implementation here
}
Note
Protocol은 타입이므로, FullyNamed와 RandomNumberGenerator 등과 같이 대문자로 시작하는 것이 좋다(Swift 공식문서)
Property requirements는 항상 variable property로 정의된다. 이때, Prefix는 var
키워드로 한정된다. Gettable과 Settable Properties는 {get set}
으로 해당 type이 정해진 이후에 작성된다. 만약, Gettable 또는 Settable만 가능하다면, {get}
또는 {set}
으로 작성한다
protocol SomeProtocol {
var mustBeSettable: Int { get set }
var doesNotNeedToBeSettable: Int { get }
}
Protocol은 특정 기능을 수행하는 Instance method
와 Type method
를 요구할 수 있다. Type method
는 func 키워드 앞에, static
을 붙여준다.
protocol SomeProtocol { // instance method
func random() -> Double
}
protocol RandomNumberGenerator { // type method
static func random() -> Double
}