1. 접근 제어의 암무적인 룰

1-1. 전반적인 guiding principle

더 낮은(더 제한적인) 접근 수준을 갖는 다른 엔티티에 대해 엔티티를 정의할 수 없다.

private struct Car {
  // error
  public var engine: String
}

1-2. Default Access Levels

기본 접근 수준은 internal입니다.

class SomeInternalClass {}              // implicitly internal

let someInternalConstant = 0            // implicitly internal

2. 커스텀 타입들의 접근 제어

타입의 접근 제어 수준은 해당 타입의 구성원(프로퍼티, 메소드, 이니셜라이저, 서브스크립트)의 기본 접근 수준에도 영향을 준다.

아래와 같은 코드에서는 아무 접근 수준을 지정해주지 않았다고 해서 internal이구나~ 가 아니라

class를 fileprivate으로 지정했기 때문에 메소드의 접근 수준도 fileprivate가 되는 것이다!

fileprivate class FileprivateClass {
     func someMethod() {}
}

타입 구성원의 기본 접근 수준은 internal!

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
}

2-1. 튜플, 함수