📖 상속
📌 상속 (Inheritance)
상속 이란 부모한테 자식이 물려받는 것처럼, 어떠한 클래스의 프로퍼티와 메소드를 다른 클래스에게 그대로 물려주는 것입니다.
클래스에서는 저장된 프로퍼티와 계산된 프로퍼티와 상관없이 상속받은 프로퍼티에 프로퍼티 옵저버를 설정해서 값 설정에 반응할 수 있습니다.
💬 위에서 아래로 내려오는 것
💬 이브이에 여러 속성이 더해져, 다양한 모습으로 진화하는것이 하나의 예시입니다.
📌 클래스 생성
class Friend {
var name : String
init(_ name : String) {
self.name = name
}
func sayHi() {
print("안녕? 나는 \(self.name)라고 해")
}
}
📌 오버라이딩 (Overriding)
서브클래스(부모로 부터 성격을 상속받고 자기 자신 고유의 특성도 추가한것)에서는
부모클래스에서 상속받은 것을 재정의 할 수 있습니다.
이것을overriding이라 부르는데, 오버라이딩은 인스턴스 메소드, 타입 메소드, 인스턴스 프로퍼티, 타입 프로퍼티, 서브스크립트 모두에 대해 가능합니다. 오버라이드를 위해서는 다른 선언 앞에 override
키워드를 붙여줍니다. Swift에서는 이 override 키워드를 보면 부모에 그 정의가 있는지 확인합니다.
class BestFriend : Friend {
// var name : String을 이미 가지고 있음
// override로 부모의 메소드를 가져왔다.
override init (_ name : String) {
// super로 부모의 메소드 사용
super.init("베프 " + name)
// friend가 가지고 있는 init에 추가로 더하는 것
}
override func sayHi() {
super.sayHi()
}
}
💬 부모 클래스를 활용할 때, init나 func를 입력하고 enter를 치면 자동으로 override 가 뜹니다!
💬 부모 클래스의 메소드를 활용할 때, super 를 꼭 써줘야 합니다.
📌 활용
let myFriend = Friend("코더")
myFriend.sayHi()
let myBestFriend = BestFriend("후니")
myBestFriend.sayHi()
>>> 안녕? 나는 코더라고 해
안녕? 나는 후니라고 해
myBestFriend.name
>>> 후니
💬 부모가 가지고 있는 name라는 변수를 그대로 따와, 그 위에 새로운 내용을 덮어 썼음을 알 수 있습니다.
📌 Preventing Overrides(Final Class)
특정 메소드, 프로퍼티, 서브스크립트가 오버라이드 되는 것을 방지하려면 final키워드를 사용합니다.
다시말해, final로 선언되면 override되는 것을 막을 수 있습니다.
https://jusung.gitbook.io/the-swift-language-guide/language-guide/13-inheritance
'IOS - Swift' 카테고리의 다른 글
Swift 기초문법 - In-out Parameters (0) | 2022.09.15 |
---|---|
Swift 기본문법 - Dictionary (0) | 2022.09.15 |
Swift 기초문법 - Closure (0) | 2022.09.14 |
Swift 기초문법 - Generic (0) | 2022.09.14 |
Swift 기초문법- struct와 class의 차이 (0) | 2022.09.14 |