안녕하세요:)
오늘은 클래스에서 구현하는 특별한 생성자에 대해서 알아보도록 하겠습니다 +..+
class Position {
var x: Double
var y: Double
init(x: Double, y: Double) {
self.x = x
self.y = y
}
}
// Designated Initializer의 핵심은 하나입니다. 모든 속성을 초기화 해야합니다.
// Convenience Initializer
class Position {
var x: Double
var y: Double
init(x: Double, y: Double) {
self.x = x
self.y = y
}
convenience init(x: Double) {
self.init(x: x, y: 0.0) // y에는 기본값을 전달
}
}
class Figure {
var name: String
init(name: String) {
self.name = name
}
func draw() {
print("draw \(name)")
}
}
class Rectangle: Figure {
var width: Double
var height: Double // 0.0으로 초기화
}
// 이니셜라이저는 다른 멤버와 마찬가지로 서브클래스로 상속됩니다.
// 다른 멤버는 조건없이 상속되지만 이니셜라이저는 상속 조건이 까다롭습니다. 기본적으로 슈퍼클래스에서 구현된 이니셜라이저는 서브클래스로 상속되지 않습니다.
class Figure {
var name: String
init(name: String) {
self.name = name
}
func draw() {
print("draw \(name)")
}
convenience init() {
self.init(name: "unknown")
}
}
class Rectangle: Figure {
var width: Double = 0.0
var height: Double = 0.0// 0.0으로 초기화
init(name: String, width: Double, height: Double) {
self.width = width
self.height = height
super.init(name: name)
}
override init(name: String) {
width = 0
height = 0
super.init(name: name)
}
convenience init() {
self.init(name: "unknown")
} // 항상 동일한 클래스에 있는 다른 이니셜라이저를 호출합니다. 그리고 슈퍼클래스에 있는 이니셜라이저를 호출하는 것은 불가능합니다. 그래서 오버라이딩이라는 개념이 적용되지 않습니다.
}