코드의 관리는 중요하다. 위계 질서를 가지고 구분하지 않으면 혼란을 초래한다. 접근 제어는 특히 SDK 작업을 하는 경우 인터페이스 역할을 하기 때문에 잘 알아두는 것이 좋다.
Module & Source file
- 접근 제어는 module과 source file 단위로 이뤄짐
- 다른 module의 code를 참조하려 하면 import 해야함
- 같은 module안에서는 다른 source file을 import할 필요 없음
Access Levels
- 종류
- Open
- module 외부에서 접근 가능
- class에서만 사용
- 정의된 모듈 밖에서도 상속 가능
- Public
- Internal
- 같은 module 안에서 접근 가능
- access modifier를 지정하지 않으면 default임
- fileprivate
- 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일 수 없음
- 어차피 컴파일러가 에러내 줌!