Class에 memberwise가 없는 이유

J.Noma·2021년 11월 3일
0

Swift : 가벼운 주제

목록 보기
4/9

우선.. 배경지식이 필요한데 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를 지원함으로써 얻는 장점보다 언어 복잡성 증가 측면이 더 크기 때문이지 않을까 싶다

  1. 내가 나름대로 생각해본 이유는 위에서 설명한 자식이 부모의 프로퍼티를 직접 초기화할 수 없다는 rule을 지키기 위함인데

  2. 사람들 사이에서 유명한(?) 글이 있어 이것도 링크를 남긴다
    (이 글을 정확히 이해하진 못했는데, 상속과 initializer 얘기를 하는 걸로 보아 비슷한 나와 맥락이지 않을까싶다)

profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe

0개의 댓글