더 낮은(더 제한적인) 접근 수준을 갖는 다른 엔티티에 대해 엔티티를 정의할 수 없다.
private struct Car {
// error
public var engine: String
}
기본 접근 수준은 internal입니다.
class SomeInternalClass {} // implicitly internal
let someInternalConstant = 0 // implicitly internal
타입의 접근 제어 수준은 해당 타입의 구성원(프로퍼티, 메소드, 이니셜라이저, 서브스크립트)의 기본 접근 수준에도 영향을 준다.
아래와 같은 코드에서는 아무 접근 수준을 지정해주지 않았다고 해서 internal이구나~ 가 아니라
class를 fileprivate으로 지정했기 때문에 메소드의 접근 수준도 fileprivate가 되는 것이다!
fileprivate class FileprivateClass {
func someMethod() {}
}
internal, file-private, private로 접근 수준을 지정해 놓으면 ⇒ 해당 타입의 접근 수준
public과 open의 경우 → 명시하지 않으면 internal!
public class PublicClass {
init(){} // internal
func someMethod() {} // internal
}
let instance = PublicClass() // error남, internal이기 때문에
// 아래와 같이 코드를 수정하면 수행이 된다!
public class PublicClass {
public init(){} // internal
func someMethod() {} // internal
}