해석)
기본 멤버이니셜라이저는 구조체타입을 위한 것이다. 이는 구조체의 저장된 프로퍼티가 어느하나라도 private일 경우 Memberwise initialzer 자체를 private인 것으로 간주한다. 만약 어느한 프로퍼티가 filprivate이면 initialzer자체를 filprivate으로 간주한다는 것이다. 접근제어자가 별도로 설정이 되어있지않으면 기본 범위인 internal로 지정이된다.
위와 마찬가지로 만약에 멤버와이즈 이니셜라이저를 다른 모듈에서 사용하고자 한다면 public으로 선언해야한다.
# struct내에서 수기로 init()을 생성한 경우와 멤버와이즈 이니셜라이저를 사용한 경우에 차이점을 확인해보자
! 첫번째 컴파일 오류만 확인하면 되는데 잘 안보일 수 있으니 글로 확인해보자
[오류메세지] - 'CoffeeShop' initializer is inaccessible due to 'private' protection level
상황)
멤버와이즈 이니셜라이저 사용했을 경우에만 오류가 발생할것을 확인해볼 수 있다. 심지어 'yagombucks'라는 인스턴스를 생성하여 private과 연관이 없는데도 private 수준으로 인해 CoffeeShop에 접근할 수 없다. 라고 나와 황당한것이다. 하지만 위에 공식문서를 확인해보면 이해할 수 있을것이다.
Point)
struct에서 직접 수기로 init을 생성해주게된다면 접근제어자의 영향을 받지 않는다. 이부분을 잘 인지하고 활용하면 좋을것같다.
Reference
- https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html#ID19
Access Control — The Swift Programming Language (Swift 5.5)
Access Control Access control restricts access to parts of your code from code in other source files and modules. This feature enables you to hide the implementation details of your code, and to specify a preferred interface through which that code can be
docs.swift.org