우선.. 배경지식이 필요한데 Swift공식문서-initializer를 안 읽었다면 먼저 보고오자
상속을 하는 자식 class의 initializer에서 부모 class에서 정의된 프로퍼티를 직접 초기화할 수 없다
예제로 보면
class parent {
var a: Int
init() {
self.a = 1
}
}
class child: parent {
let b: Int
init(a: Int, b: Int) {
self.b = b
self.a = a //Error!!
}
}
위와 같이 a
라는 부모의 프로퍼티를 자식이 직접 초기화할 수 없으므로 super
의 designated initializer를 호출하는 방식으로 초기화해야 한다
공식문서라던지 정확한 이유를 제시하는 곳은 없어서 추측을 해보자면,
상속이 가능하다는 점으로 인해 memberwise를 지원함으로써 얻는 장점보다 언어 복잡성 증가 측면이 더 크기 때문이지 않을까 싶다
내가 나름대로 생각해본 이유는 위에서 설명한 자식이 부모의 프로퍼티를 직접 초기화할 수 없다는 rule을 지키기 위함인데
사람들 사이에서 유명한(?) 글이 있어 이것도 링크를 남긴다
(이 글을 정확히 이해하진 못했는데, 상속과 initializer 얘기를 하는 걸로 보아 비슷한 나와 맥락이지 않을까싶다)