Swift 상속(2020.10.30)

K S Michael·2020년 10월 30일

swift TIL

목록 보기
13/29

클래스의 상속과 재정의

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")
    }
}

class Student: Person {
//	var name: String = ""  // 상속을 받았기 때문에 정의하지 않아도 이미 가지고 있기 때문에 Student에서 name를 사용할수 있다., 저장프로퍼티는 override(재정의) 할수 없다. 
	var major: String = ""
    
    override func selfIntroduce(){
    	print("저는 \(name)이고, 전공은\(major)입니다")
        // super.selfIntroduce() // 부모클래스의 메서드를 호출할때
    }
    // Person에서 정의한 selfIntroduce를 재정의 하고 싶으면 override키워드를 추가해서 재정의 할수 있다.
    
    override class func classMethod(){
    	print("overriden type method - class")
    }
    // class 메서드는 재정의 할수 있다.
    
    
    
    // static을 사용한 타입 메서드는 재정의 할 수 없습니다.
    // override static func typeMethod(){    }
    
    // final 키워드를 사용한 메서드, 프로퍼티는 재정의 할 수 없습니다.
//    override func sayHello(){ }
//    override class func finalClassMethod(){  }
}

let yagom: Person = Person()
let hana: Student = Student()


yagom.name = "yagom"
hana.name = "hana"
hana.major = "Swift"
// yagom.major // yagom은 major 프로퍼티가 없는 Person을 상속받아서 Student의 major를 사용할수 없다.

// 아래 두개의 selfIntroduce 는 다른 부모를 상속받아서 
---------------------------
yagom.selfIntroduce()
// 저는 yagom입니다

hana.selfIntoroduce()
//저는 hana이고, 전공은 Swift입니다.

--------------------------

Person.classMethod()
// type method - class

Person.typeMethod()
// type method - static

Person.finalClassMethod()
// type method - final class


Student.classMethod()
// overriden type method - class

Student.typeMethod()
// type method - static

Student.finalclassMethod()
// type method - final class

출처 : 유튜브 "yagom"

profile
차근차근

0개의 댓글