애플 공식문서에 정의된 프로토콜의 정의
"A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality."
-> "protocol은 특정 작업 혹은 기능들을 구현하기 위한 메소드, 프로퍼티 그리고 기타 다른 요구사항들의 청사진이다."
-> 청사진(靑寫眞) 또는 블루프린트(영어: blueprint)는 아키텍처 또는 공학 설계를 문서화한 기술 도면을 인화로 복사하거나 복사한 도면을 말한다. 은유적으로 "청사진"이라는 용어는 어떠한 자세한 계획을 일컫는 데에 쓰인다.
- 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜를 "준수한다" (conform) 라고 표현한다.
protocol someProtocol { init(value: Int) } class someClass: someProtocol { required init(value: Int) { print(value) } } struct someStruct: someProtocol { init(value: Int) { print(value) } } let class1 = someClass(value: 100) let struct1 = someStruct(value: 200)
클래스에서 프로토콜의 요구사항 init을 충족시키려면 required 키워드를 붙여줘야 하지만,
구조체의 프로토콜 요구사항을 충족시키려면 required 키워드를 붙이지 않아야 한다.
- is 로 프로토콜 준수 체크
protocol someProtocol2 { init(value: Int) } struct someStruct2: someProtocol2 { init(value: Int) {} } let struct2 = someStruct2(value: 1) var someAny: Any = class1 someAny is someProtocol // true someAny is someProtocol2 // false
- as로 프로토콜 준수 체크
var someAny2: Any = struct2 if let result = someAny2 as? someProtocol { print("프로토콜을 준수합니다.") } else{ print("프로토콜을 준수하지 않습니다.") } func check(target: Any?) { guard let result = target as? someProtocol else { print("프로토콜을 준수하지 않습니다.") return } print("프로토콜을 준수합니다.") } check(target: someAny2)