코드의 관리는 중요하다. 위계 질서를 가지고 구분하지 않으면 혼란을 초래한다. 접근 제어는 특히 SDK 작업을 하는 경우 인터페이스 역할을 하기 때문에 잘 알아두는 것이 좋다.
Module & Source file
- 접근 제어는 module과 source file 단위로 이뤄짐
- Module
- code 배포의 단위
- App, Framework, Library
- code 배포의 단위
- Source file
- 하나의 source file
- Module
- 다른 module의 code를 참조하려 하면 import 해야함
- 같은 module안에서는 다른 source file을 import할 필요 없음
Access Control Levels (ACL)

종류
Open
-
module 외부에서 접근 가능
-
class에서만 사용
-
정의된 모듈 밖에서도 상속 가능
Public
- module 외부에서 접근 가능
Internal
- 같은 module 안에서 접근 가능
- access modifier를 지정하지 않으면 default임
fileprivate
- 같은 source file안에서 접근 가능
private
- 기능 정의 내부 또는 동일 파일내 extension에서만 접근 가능
알아둘 점
- 별도 지정하지 않으면 default internal
- Framework의 경우, 외부 제공 interface를 open/public으로 만들어야 함
- Unit Test에서
@testable attribute를 써주면 해당 framework의 internal에도 접근 가능
주의할 점
- 모든 entity와 그것이 사용하는 entity는 access level이 맞아야 함
- public function은 parameter로 internal, private level 못 받음
- public class의 super class가 internal이나 private일 수 없음
- 어차피 컴파일러가 에러내 줌!