목차
1. 접근 제어(Access Control)란?
2. 접근제어의 종류
2.1. internal
2.2. public, open
2.3. private, fileprivate
'모듈(module)'이란?
- 하나의 코드 배포 단위이다.
- 프레임워크, 라이브러리, 어플리케이션이 모두 모듈 단위가 될 수 있다.
- 프레임워크와 같이 다른 모듈에서 가져다 쓸 때 import 키워드를 쓴다.
- 반대로 이야기해보면 import 키워드로 추가되는 것은 모두 module이라고 할 수 있다. ex) UIKit, Foundation 등 모두 module이다.
private(Type) > fileprivate(.swift) > internal(모듈 내부) > public(모듈 외부에서 상속 및 오버라이딩 불가능) > open(모듈 외부에서 상속 및 오버라이딩 가능)
- internal
- public, open
- private, fileprivate
open
- open은 참조 타입인 class에만(클래스 내에 선언된 메서드, 프로퍼티도 가능) 접근 제어 선언이 가능하다.
- 선언된 모듈의 외부에서 '접근(access)' 뿐만 아니라 '상속(subclassing)', '재정의(overriding)' 가능하다.
public
- public은 참조 타입인 class 뿐만 아니라 값 타입인 struct, enum에도 선언 가능하다.
- 선언된 모듈의 외부에서 '접근'만 가능하고 '상속'과 '재정의'는 불가능하다.