상속(inheritance)

Swift/문법 2021. 1. 28. 23:56

상속

- 스위프트의 상속은 클래스, 프로토콜 등에서 가능함

- 열거형, 구조체는 상속이 불가능

- 스위프트는 다중 상속을 지원하지 않음

 

 

클래스의 상속과 재정의

class 이름: 부모 클래스 이름 {   // 부모 클래스로부터 상속을 받음

구현부

}

 

import Foundation

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 finalClassMethod() {
        print("type method - final class")
    }
    
    class Student: Person {
        // var name: String = "" 상속 받음
        var major: String = ""
        
        // 위에서 정의한 selfIntroduce를 새롭게 동작하게 하고 싶을땐 override 키워드를 앞에 붙여준 다음에 메서드를 구현해 주면됨
        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() {}
    }
    
    let khon: Person = Person()
    let khon01: Student = Student()
    
    khon.name = "khon"
    khon01.name = "khon01"
    jhon01.major = "Swift"
    
    khon.selfIntroduce()
    // 저는 khon입니다 - Person 클래스의 selfIntroduce
    
    khon01.selfIntroduce()
    // 저는 khon01이고, 전공은 Swift입니다 - Student 클래스의 selfIntroduce
    
    Person.classmethod()
    // type method - class
    
    Person.typemethod()
    // type method - static
    
    Person.finalClassMthod()
    // type mthod - final class
    
    
    // 재정의를 해줬던 메소드만 바뀐 상태로 호출
    Student.classMethod()
    // overriden type mthod - class
    
    Student.typeMethod()
    // type method - static
    
    Student.finalClassMethod()
    // type method - final class
}

'Swift > 문법' 카테고리의 다른 글

옵셔널 체이닝 / nil 병합 연산자  (0) 2021.01.29
인스턴스의 생성과 소멸(init / deinit)  (0) 2021.01.29
프로퍼티 감시자(property observer)  (0) 2021.01.28
프로퍼티(property)  (0) 2021.01.28
클로저 고급  (0) 2021.01.28
Posted by khon98
,