클래스가 충족해야 하는 최소한의 요구사항을 정의하는 규칙들의 집합
protocol 키워드를 사용하여 선언함
클래스가 반드시 포함해야하는 매서드와 프로퍼티를 정의함
protocol EatSomething {
var food: String { get }
func eat() -> String
}
class Person: EatSomething {
// EatSomething 프로토콜을 채용한 Person 클래스 선언
// 프로토콜에 있는 프로퍼티와 메서드를 반드시 포함해야 함
var food: String // get 저장 프로퍼티
init(food: String) {
self.food = food
}
func eat() -> String {
"Eat " + food
}
}
protocol - 약속, extension - 약속+행동
클래스에 새로운 기능을 추가하는 방법 - extension
필요한 기능들을 만들어서 계속 써야할 때 (메인 색 지정, Double 타입에서의 제곱 값 계산 등)
extension Double {
var squared: Double {
get {
return self * self
}
}
var cubed: Double {
self * self * self
}
}
익스텐션에는 저장 프로퍼티를 포함할 수 없기 때문에 하위 클래스로 상속받는 경우도 잘 사용해야함
기존에 있는 타입에만 적용 가능, 새로운 기능(요구사항)을 추가하는 것
자주 쓸거같으면 새로 만들어서 반복해서 사용해야징~!
static 과 클래스 메서드는 새로운 클래스 인스턴스를 만들어서 사용하면 안됨
class Student {
static func function1 {
}
class func function2 {
}
}
let keen: Student = Student()
keen.function1 // 에러
keen.function2 // 에러
Student.function1
Student.function2 // static, class 메서드는 이렇게만 사용 가능
상속은 객체지향 프로그래밍에서 객체 재사용성 개념을 확장시켜줌