03. 접근제한자
코드 요소에 대한 외부 접근을 제한하여 모듈 간의 접근성과 보안을 조절하는 접근 제한자에 대해 학습
1) 접근 제한자 // playground상에서 완벽하게 하기는 힘들다..
- 접근 제한자는 다른 소스 파일이나 모듈의 코드에서 코드 일부에 대한 접근을 제한
- [제약이 적음] open < public < internal < fileprivate < private [제약이 많음]
- open : 모든 소스 파일에서 해당 level 접근 가능 + 모든 곳에서 서브클래싱 가능(모든곳에서 상속 가능)
- public : 모든 소스 파일에서 해당 level 접근 가능 + 같은 모듈 내에서만 서브클래싱 가능(같은 모듈 내에서만 상속 가능)
- internal : 같은 모듈 내에서만 접근 가능 // 디폴트로 인터널 수준 적용 타이핑할일이 없다
- fileprivate : 같은 소스파일 내에서만 접근 가능
- private : 클래스 내부에서만 접근 가능
- 접근 제한자를 작성하지 않으면 internal로 판단합니다
- 상위 요소보다 하위 요소가 더 높은 접근 수준을 가질 수 없습니다.
- 모듈과 소스파일
- 모듈(module)
- 배포할 코드의 묶음 단위입니다.
- 하나의 프레임워크/ 라이브러리/ 어플리케이션이 모듈 단위가 될 수 있습니다.
- import 키워드를 통해 불러올 수 있습니다.
- 소스파일 (각각의 파일들)
- 하나의 swift 소스 코드 파일을 의미합니다.
- 모듈(module)
- public, open
- 둘 다 모듈 외부까지 접근할 수 있습니다.
- open은 클래스와 클래스 맴버에서만 사용할 수 있고 다른 모듈에서 서브클래싱이 가능하지만 public은 그렇지 않습니다.
- open으로 클래스를 개방 접근 수준으로 명시하는 것은 그 클래스를 다른 모듈에서도 수퍼클래스로 사용하겠다는 의미로 해당 클래스를 설계하고 만들었다는 것을 의미합니다(다른 모듈에서 상속을 허용함)
- public은 주로 프레임워크에서 외부와 연결될 인터페이스를 구현하는데 많이 사용합니다.
- internal
- 모든 요소에 암묵적으로 지정하는 디폴트 접근 제어자입니다.
- 소스 파일이 속해있는 모듈 어디에든 접근할 수 있지만 외부 모듈에서는 접근할 수 없습니다.
- fileprivate
- 소스 파일 내부에서만 접근할 수 있습니다.
- 서로 다른 클래스가 같은 하나의 소스 파일에 정의되어있고 fileprivate로 선언되어 있다면 두 클래스는 서로 접근할 수 있습니다.
- private
- 가장 제한적인 접근제어자입니다.
- fileprivate과 달리 같은 파일 안에 있어도 서로 다른 클래스이고 private로 선언되어 있다면 두 요소는 서로 접근할 수 없습니다. // 클래스 뿐만 아니라 struct, enum 모두
'iOS (스파르타) > Swift 문법' 카테고리의 다른 글
문법 심화 - 고차함수, 예외처리 (0) | 2024.06.11 |
---|---|
문법 심화 - 클로저04 (0) | 2024.06.11 |
문법 심화 - 프로퍼티 옵저버, 타입 캐스팅 (0) | 2024.06.10 |
Swift 문법 학습 자료 공부중 ~Chapter 04 까지 (0) | 2024.06.07 |
기초 문법 - 초기화 (0) | 2024.06.07 |