8.4.1 서브클래싱
클래스 A를 상속받아 새로운 클래스를 정의해 보겠습니다. 이것을 서브클래싱이라고 합니다. 즉 서브클래싱이란 기존에 있는 클래스를 기반으로 하여 새로운 클래스를 작성하는 과정을 의미합니다.
class <클래스 이름>: <부모 클래스> {
// 추가로 구현할 내용
}
주의할 점은 스위프트는 단일 상속만 가능합니다. 즉 하나의 클래스만 상속받을 수 있습니다. 앞에서 작성한 클래스 A를 사용하여 클래스 B를 서브클래싱하겠습니다.
class B: A {
var prop = "Class B"
func boo() -> String {
return "Class B prop = \(self.prop)"
}
}
let b = B()
b.prop // "Class B"
b.boo() // Class B prop = Class B
다음 구문을 봅시다.
b.name // "Class A"
b.foo() // "Class A's method foo is called"
b.name = "Class C"
b.foo() // "Class C's method foo is called"
클래스 B에는 분명 name 프로퍼티와 foo 메서드가 정의되어 있지 않음에도 불구하고, 인스턴스 b는 이들을 사용하고 있습니다. 심지어 프로퍼티에 값을 대입합니다. 이는 클래스 B가 A를 상속받음으로써 모든 프로퍼티와 메서드를 물려받았기 때문입니다. 현재 B의 상태는 다음과 같습니다.
class B {
var name = "Class A"
var prop = "Class B"
var description: String {
return "This class name is \(self.name)"
}
func foo() {
print("\(self.name)'s method foo is called")
}
func boo() -> String {
return "Class B prop = \(self.prop)"
}
}
이 중 name, description 프로퍼티와 foo 메서드는 직접 정의한 것이 아닙니다. 클래스 A로부터 물려받은 것입니다. 이처럼 상속을 이용하면 기능을 직접 구현하지 않고도 이미 만들어진 기존 클래스를 통해 기능을 확장할 수 있습니다. 이때 클래스 A를 B의 부모 클래스 또는 슈퍼 클래스라고 하고, 클래스 B를 A의 자식 클래스 또는 서브 클래스라고 합니다.
Last updated