🦜 Swift

[Swift] 상속

ji-hyun 2022. 11. 20. 17:21

상속


스위프트의 상속은 클래스, 프로토콜 등에서 가능하다
열거형, 구조체는 상속이 불가능하다
스위프트는 다중상속을 지원하지 않다
이번 파트에서는 클래스의 상속에 대해서 알아보자

 

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