상속을 공부하는데 어려움이 항상 많았는데 좋은 포스팅이 있길래 이 글을 토대로 공부를 해보고자 한다.
클래스(Class)는 상속이 가능하며, 오직 하나의 상속만이 가능하다. 또한 메섣, 프로퍼티 등을 상속할 수 있다.
Base Class(기반 클래스)란?
다른 어떤 클래스로부터도 상속받지 않은 클래스를 기반 클래스라고 한다.
class Vehicle {
var currentSpeed: Double = 0.0
var description: String {
return "현재 속도는 \(currentSpeed)입니다. "
}
func makeNoise() {
}
}
let bike = Vehicle()
print(bike.description)
간단하게 Class를 만들어봤다.
Vehicle이라는 Class를 보면 "어떤 클래스"도 상속받지 않았기 때문에 Base Class(기반 클래스)라고 할 수 있다.
Subclassing(서브클래싱)이란?
이제 여기서 오늘의 주제인 "상속"이 나온다.
상속(서브클래싱)을 하면 부모로 부터 성격을 상속받고 자기 자신 고유의 특성도 추가할 수 있다.
Base Class(기반 클래스)를 기반으로 새로운 클래스를 만드는 것이라고 할 수 있다.
역시 예제 코드를 보겠다.
class Vehicle {
var currentSpeed: Double = 0.0
var description: String {
return "현재 속도는 \(currentSpeed)입니다. "
}
func makeNoise() {
}
}
class Bike :Vehicle {
var hasBasket = false
}
let bike = Bike()
bike.currentSpeed = 60.0
print(bike.description) //현재 속도는 60.0입니다.
Bike라는 클래스를 선언하고 Vehicle이라는 클래스를 상속받고 있다.
이미지를 보면 Bike클래스가 Vehicle이 가지고 있던 프로퍼티에 접근할 수 있는 것을 알 수 있다.
이처럼 실제론 상속받은 Vehicle 인스턴스의 멤버들을 포함하고 있다.
Bike란 클래스가 Vehicle이라는 클래스를 "상속"받고
Bike란 클래스가 Vehicle이라는 클래스를 상속받은 것을 "서브클래싱"했다고 한다.
또한 이때
상속 받은 Bike를 서브 클래스(Sub Class), 상속 받고자 하는 Vehicle를 슈퍼 클래스(Super Class)라고 한다.
Final 키워드란?
개발 공부를 하다보면 다른 분들이 Final Class를 만든 것을 적지 않게 보게 된다.
당시에는 무슨 내용인지 몰랐지만 이렇게 공부하고 보면 간단하다.
"현재 이 클래스는 상속 받을 수 없다."
방금 만든 Vehicle 클래스에 Final을 입력해보면 쉽게 이해할 수 있을 것이다.
바로 에러가 나타난다.
에러 내용을 보면 Vehicle 클래스으로는 상속을 받을 수 없다. 라고 적혀있다.
개발을 하면서 해당 클래스가 상속을 받을 일이 없다고 명시한다면 좀 더 이해하기 쉬운 코드가 될 것 같다.
오늘은 상속의 기초에 대해서 공부해보았는데 이렇게 공부를 하면 이해는 되지만 막상 적용하려고 보면 어려운 점이 많다.
때문에 좀 더 기초를 탄탄히 해야겠다는 생각을 가지게 되는 것 같다.
https://babbab2.tistory.com/125
https://jusung.gitbook.io/the-swift-language-guide/language-guide/13-inheritance
'swift 기본 문법' 카테고리의 다른 글
swift 기본 문법) 연산 프로퍼티(get, set) 알아보기 (0) | 2022.09.28 |
---|---|
swift 기본문법) if let, guard let의 목적과 의미 알아보기 (0) | 2022.09.25 |
Swift 고차함수) flatMap, compactMap 알아보기 (1) | 2022.09.15 |
Swift lazy 알아보기 (0) | 2022.08.31 |
swift 고차함수 알아보기1(map, filter, reduce) (0) | 2022.08.12 |