- 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등을 정의 해놓은 "규약" 혹은 "약속"
- 프로토콜은 설계된 조건만 정의를 하고 제시를 할 뿐 스스로 기능을 구현하지 않는다
- 프로토콜에는 이름, 타입, gettable, settable 을 명시한다
- 프로퍼티는 항상 var로 선언해야 한다
- 메서드를 정의할 때 메서드 이름과 리턴값을 지정할 수 있고, {} 구현 코드는 적지 않는다
- 상속과 유사하다고 볼 수도 있겠지만 class 이외에 struct나 enukm도 프로토콜을 채택할 수 있다
- 상속은 다중 상속이 불가능하지만 프로토콜은 다중 상속이 가능하다 ( 확장성이 높다 )
protocol Student {
var studentID: Int { get set }
var name: String { get }
func printInfo() -> String
}
struct UnderGraduateStudent: Student {
var studentId: Int
var name: String
var major: String
func printInfo() -> String {
return "\(name), whose student id is \(studentId), is major in \(major)"
}