2022. 9. 2. 02:54ㆍ🍏/Swift
오버라이드(Override)
override 키워드는 부모 클래스나 그 이상의 상위 클래스에서 반드시 선언되어 있고, 이를 재정의할 때만 붙일 수 있는 키워드.
프로퍼티를 오버라이딩할 때는 상위 클래스에서 저장 프로퍼티였건, 연산프로퍼티였건 관계없이 연산 프로퍼티의 형태로 오버라이딩해야 합니다.
저장 프로퍼티를 저장 프로퍼티로 오버라이딩하거나 연산 프로퍼티를 저장 프로퍼티로 오버라이딩하는것은 허용되지 않습니다. 저장 프로퍼티를 저장프로퍼티로 오버라이딩하는 것은 아무런 의미가 없으면(오버라이딩 대신 값만 다시 할당하는것으로 충분) 연산 프로퍼티를 저장 프로퍼티로 오버라이딩하는 것은 연산 프로퍼티 자체를 오버라이딩하는 것으로도 충분히 가능.
저장 프로퍼티는 읽고 쓰기가 모두 허용되는 만큼, 연산 프로퍼티로 오버라이딩할 경우 get, set 구문 필수.
프로퍼티 오버라이딩 시 허용되는 것
- 저장 프로퍼티를 get, set 구문이 모두 있는 연산 프로퍼티로 오버라이딩 하는 것.
- get 구문만 제공되는 연산 프로퍼티를 get 구문만 제공되는 연산 프로퍼티로 오버라이딩 하는 것.
프로퍼티 오버라이딩 시 허용되지 않는 것
1. 저장 프로퍼티를 저장 프로퍼티로 오버라이딩하는 것.
2. get, set 구문과 관계없이 연산 프로퍼티를 저장 프로퍼티로 오버라이딩하는 것.
3. 저장 프로퍼티를 get 구문만 제공되는 연산 프로퍼티(=읽기 전용)로 오버라이딩 하는 것.
4. get, set 구문 모두 제공하는 연산 프로퍼티를 get 구문만 제공되는 연산 프로퍼티로 오버라이딩하는 것.
> 결론적으로 프로퍼티 오버라이딩은 상위 클래스의 기능을 하위 클래스가 확장, 또는 변경하는 방식으로 진행되어야 하지.
제한하는 방식으로 진행되어서는 안된다는 것.
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "시간당 \(self.currentSpeed)의 속도로 이동하고 있습니다."
}
}
class Car: Vehicle {
var gear = 0
var engineLevel = 0
override var currentSpeed: Double {
get {
return Double(self.engineLevel * 50)
}
set {
}
}
override var description: String {
get {
return "Car: engine=\(self.engineLevel), currentSpeed=\(self.currentSpeed)"
}
set {
print("new value is \(newValue)")
}
}
}
super
- 상속받은 부모 클래스의 인스턴스를 참조할 수 있도록 해주는 객체.
- 오버라이딩 되기 전 본래의 프로퍼티나 메소드 사용 가능.
final
- 하위 클래스에서 오버라이딩되는 것을 차단할 수 있도록 해주는 키워드.
- var, func 키워드 앞에 final 작성 상수적인 성격이 되므로 하위 클래스에서 오버라이드 불가능.
'🍏 > Swift' 카테고리의 다른 글
[Swift] 소수점 표현 올림(ceil), 반올림(round), 내림(floor), 포맷(format) (0) | 2023.03.03 |
---|---|
[Swift] 타입 캐스팅 / Type Casting / Up casting / Down Casting (0) | 2022.09.02 |
[Swift] 캡쳐 / Capture (0) | 2022.09.01 |
[Swift] 딕셔너리 / Dictionary (0) | 2022.09.01 |
[Swift] 세트 / Set (0) | 2022.09.01 |