본문 바로가기
Swift

[Swift] 16. 상속

by CodingKwon 2021. 10. 14.

1. 상속

  • 클래스, 프로토콜 등 상속 가능
  • 열거형, 구조체 상속 불가
  • 다중 상속 불가능
class 이름: 상속받을 클래스 이름 {
    /* 구현부 */
}

 

// 기반 클래스 Person
class Person {
    var name: String = ""
    
    func selfIntroduce() {
        print("저는 \(name)입니다")
    }
    
    // final 키워드를 사용하여 재정의를 방지할 수 있습니다
    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 finalCalssMethod() {
        print("type method - final class")
    }
}

// Person을 상속받는 Student
class Student: Person {
    var major: String = ""
    
    override func selfIntroduce() {
        print("저는 \(name)이고, 전공은 \(major)입니다")
    }
    
    override class func classMethod() {
        print("overriden type method - class")
    }
    
    // static을 사용한 타입 메서드는 재정의 할 수 없습니다
//    override static func typeMethod() {    }
    
    // final 키워드를 사용한 메서드, 프로퍼티는 재정의 할 수 없습니다
//    override func sayHello() {    }
//    override class func finalClassMethod() {    }

}

 

  • final을 사용하면 자식 클래스에서 재정의 불가능
  • static 타입을 사용하면 재정의 불가능
  • class 타입은 재정의 가능
  • class 타입을 사용하더라도 final을 붙이면 재정의 불가능 (static == final class)

 

'Swift' 카테고리의 다른 글

[Swift] 18. 옵셔널 체이닝, nil 병합 연산자  (0) 2021.11.15
[Swift] 17. 인스턴스  (0) 2021.10.14
[Swift] 15. 프로퍼티 Property  (0) 2021.10.07
[Swift] 14. 클로저  (0) 2021.10.07
[Swift] 13. 값 타입, 참조 타입  (0) 2021.10.07

댓글