상속
스위프트의 상속은 클래스, 프로토콜 등에서 가능하다
열거형, 구조체는 상속이 불가능하다
스위프트는 다중상속을 지원하지 않다
이번 파트에서는 클래스의 상속에 대해서 알아보자
class 이름: 상속받을 클래스 이름 {
구현부
}
class Person {
var name: String = ""
func selfIntroduce() {
print("저는 \(name)입니다")
}
// final 키워드를 사용하여 재정의를 방지할 수 있습니다
// 즉 자식 클래스에서 상속 받았을때 override 방지
final func sayHello() {
print("hello")
}
// 타입 메서드
// 재정의 불가 타입 메서드 - static
// 자식 클래스에서 재정의 불가
static func typeMethod() {
print("type method - static")
}
// 재정의 가능 타입 메서드 - class
class func classMethod() {
print("type method - class")
}
// 재정의 가능한 class 메서드라도
// final 키워드를 사용하면 재정의할 수 없습니다
// 메서드 앞의 `static` 과 `final class` 는 똑같은 역할을 합니다
final class func finalClassMethod() {
print("type method - final class")
}
}
final 키워드는 상속될 때 재정의를 방지한다.
class 메서드라도 final 키워드가 붙을 시 static 메서드와 동일한 역할을 하게 된다.
이제 위의 Person 클래스를 아래 Student 클래스에 상속시켜 한번 확인해보겠다.
class Student: Person {
// var name: String = "" // error : 저장 프로퍼티는 override 불가
var major: String = ""
override func selfIntroduce() {
print("저는 \(name)이고, 전공은 \(major)입니다")
// super.selftIntroduce() // 부모 메서드 호출
}
override class func classMethod(){
print("overriden type method - class")
}
// static을 사용한 타입 메서드는 재정의할 수 없습니다
// override static func typeMethod() {}
// final 키워드를 사용한 메서드, 프로퍼티는 재정의할 수 없습니다
// override func sayHello() {}
// override class func finalClassMethod() {}
}
사용예시
'🦜 Swift' 카테고리의 다른 글
[iOS] weak var (0) | 2023.05.04 |
---|---|
[Swift] 인스턴스의 생성과 소멸 (0) | 2022.11.20 |
[Swift] 프로퍼티 감시자 (0) | 2022.11.20 |
[Swift] 프로퍼티 (0) | 2022.11.20 |
[Swift] 클로저 (0) | 2022.11.20 |