Swift에서 상속은 다른 언어들의 상속과 비슷하다.
상속이란? 클래스가 다른 클래스로부터 메서드나 프로퍼티 등을 사용하기 위해 사용하는 방법이다.
class Vehicle {
func horn() {
print("경적소리~")
}
}
class Car: Vehicle{
var speed: Int = 0
override func horn() {
super.horn()
print("빵빵!!")
}
}
위 코드에서 보면 Vehicle
클래스와 Car
클래스가 있다. 여기서 상속은class Car: Vehicle
부분에서 알 수 있다. 자식클래스는 상속을 받는 Car
클래스고 부모클래스는 상속을 하는 Vehicle
클래스다.
재정의도 다른 언어와 같이 override
키워드를 사용한다.
위 코드에서도 부모클래스 Vehicle
의 horn()
메소드를 상속받은 자식클래스 Car
에서 재정의해서 사용한 모습을 볼 수 있다. 만약, 부모클래스의 특성을 자식클래스에서 사용하고 싶을 땐 super
프로퍼티를 사용하면 된다.
위의 예제에서 자식클래스의 horn()
메서드를 호출하면 부모 클래스의 horn()
메서드가 먼저 호출되고 자식클래스의 horn()
가 호출된다.
메서드 뿐만 아니라 프로퍼티, 프로퍼티 감시자, 서브스크립트도 재정의할 수 있다. 다만, 프로퍼티 접근자와 프로퍼티 감시자는 동시에 재정의할 수 없다.
서브스크립트를 재정의할 때에도 주의해야 할 점이 있다. 재정의할 때 부모클래스의 서브스크립트의 매개변수와 반환 타입이 같아야 한다. 그래야만 재정의할 수 있다.
부모클래스에서 상속받는 자식클래스의 특성을 재정의하는 것을 금지하고 싶다면 재정의를 방지하고 싶은 특성에 final
키워드를 명시하면 된다. 그럼 이 특성을 재정의하려고 하면 컴파일 오류가 발생하게 된다.