0103 - 재정의, 초기화의 과정
이번 2022년.. 에는 제가 감히 갓생을 살아보도록 하겠습니다..! 다짐합니다..
TODO
오버라이딩(overriding) - 재정의: 클래스의 상속에서 상위클래스의 속성 및 메서드를 재정의 하는 것 입니다. 쉽게 말해 서브클래스에서 슈퍼클래스의 동일한 멤버를 변형하여 구현하는 것 입니다.
재정의가 가능한 대상은 속성, 매서드가 가능하지만 쉽게 되어버리면 재미없겠죠? 조건
이 있습니다!
- 속성: 저장 속성에 대한 재정의는 어떠한 경우에도 불가능!
- 매서드: 매서드, 서브스크립트, 생성자 모두 가능합니다!
아래 코드를 보며 같이 이해해봅시다잉
class Aclass {
func doSomething() {
print("Do something")
}
}
위와 같이 Aclass
인 클래스가 있습니다.
class Bclass: Aclass {
override func doSomething() {
print("Do another job, Do something") // 재정의도 할 수 있다 .
}
}
var b = Bclass()
b.doSomething
Bclass
는 Aclass
를 상속받아, doSomething
이란 함수를 사용할 수 있습니다 !
여기서 주의깊게 봐야할 건
Aclass
의 doSomething
은 Do something
을 출력하게 되는데,
Bclass
의 doSomething
은 Do another job, Do something
을 출력하게 됩니다.
이렇듯, 상위클래스의 매서드를 재정의하여 사용할 수 있습니다!
class Bclass: Aclass {
override func doSomething() {
super.doSomething() // 이렇듯 호출을 할 수 있고
print("Do another job, Do something") // 재정의도 할 수 있다 .
}
}
super.doSomething()
을 통해 상위클래스의 함수값을 호출할 수도 있습니다!
class SomeSuperclass {
// 저장속성
var aValue = 0
// 메서드
func doSomething() {
print("Do something")
}
}
위 함수와 같이 저장속성이 나오고, 새로운 class 가 상속을 받을 때! 저장속성 재정의를 어떻게 할 수 있을까요?
아! 계산속성은 메서드로 이루어져있었지 !?
그럼 저장속성을 계산속성으로 변환해보면 되려나?
class SomeSubclass: SomeSuperclass {
override var aValue: Int {
get {
return 1
}
set {
super.aValue = newValue
}
}
override func doSomething() {
super.doSomething()
print("Do something 2")
}
}
생성자 구현의 기본은
class Color {
let red: Double
let green: Double
let blue: Double
init() { // 1
red = 0.0
green = 0.0
blue = 0.0
}
init(white: Double) { // 2
red = white
green = white
blue = white
}
init(red: Double, green: Double, blue: Double) { // 3
self.red = red
self.green = green
self.blue = blue
}
}
위와 같이 구현할 수 있습니다!
그런데, class 가 아닌 struct 에선 약간 다른 모습을 볼 수가 있음 ..
말투는 내가 갑자기 쓰고 싶은 말투를 쓸거임 ..
struct Color1 {
var red: Double = 1.0
var green: Double = 1.0
var blue: Double
}
어라? class 는 이렇게만 쓰면 오류가 뜨는데, struct 는 오류가 안뜨네?
알아보니.. 구조체는 저장 속성들이 기본값을 가지고 있더라도, Memberwise 이니셜라이저
를 자동으로 제공하고 있다고 하네요? -> 편의적인 기능을 위해서 있는 것 같습니다..! 잘 몰라요 저도 ㅎㅎ 아마, 클래스 같은 경우에는 생성자가 상속하고 관련이 있기 때문에 일부러 복잡하게 유도하는게 아닐까 싶습니다 ㅎㅋ; 좀 더 알아보고 피드백 하겠습니다!
학습 키워드
- 재정의
- 생성자 기본
문제 점 / 고민한 점
- 저장속성을 계산속성으로 변화하며 재정의를 해줬는데,
속성 감시자
같은 것도 재정의가 가능한가 ? 찾아봐야겠다. - 재정의는
override
인데,overloading
은 또 뭐였더라? 이것 또한 찾아봐야겠다 ..
TIL 시리즈는 막연히 제가 배운 걸 기록하는 공간입니다.
Author And Source
이 문제에 관하여(0103 - 재정의, 초기화의 과정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ian/TIL-0103저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)