아래의 내용은 야곰님의 SWIFT 프로그래밍의 내용을 정리한 것입니다.
Swift에서 접근제어(Access Control)는 접근제어 키워드를 사용해서 구현할 수 있다.
타입(클래스, 구조체, 열거형,...)에 접근 수준을 지정할 수 있다.
타입 내부의 프로퍼티, 메서드, 이니셜라이저, 서브 스크립트 에도 접근 수준을 지정할 수 있다.
접근 수준을 나타내는 키워드로는 open, public internal, fileprivate, private 다섯 가지가 있다.
접근수준 | 키워드 | 접근도 | 범위 | 비고 |
개방 접근수준 | open | 위로 올라갈 수록 접근도가 높음 |
모듈 외부까지 | 클래스에서만 사용 |
공개 접근수준 | public | 모듈 외부까지 | ||
내부 접근수준 | internal | 모듈 내부 | ||
파일외부비공개 접근수준 | fileprivate | 파일 내부 | ||
비공개 접근수준 | private | 기능 정의 내부 |
공개 접근수준 - public
public 키워드로 접근 수준이 지정된 요소는 어디서든 쓰일 수 있다.
구현된 소스파일, 소스파일에 속해 있는 모듈, 모듈을 쓰는 모든 곳에서 사용할 수 있다.
프레임워크와 외부와 연결될 인터페이스를 구현하는데 많이 쓰인다.
우리가 사용하는 스위프트의 기본요소는 모두 공개접근 수준으로 구현되어 있다.
개방 접근수준 - open
open 키워드로 지정하는 개방 접근 수준은 공개 접근 수준 이상의 높은 접근 수준이다.
클래스와 클래스의 멤버에서만 사용할 수 있다.
공개 접근수준과는 다음과 같은 차이가 있다.
- 개방 접근수준을 제외한 다른 모든 접근 수준의 클래스는 그 클래스가 정의된 모듈 안에서만 상속할 수 있다.
- 개방 접근수준을 제외한 다른 모든 접근 수준의 클래스 멤버는 해당 멤버가 정의된 모듈 안에서만 재정의 할 수 있다.
- 개방 접근수준의 클래스는 그 클래스가 정의된 모듈 밖의 다른 모듈에서도 상속할 수 있다.
- 개방 접근수준의 클래스 멤버는 해당 멤버가 정의된 모듈 밖의 다른 모듈에서도 재정의 할 수 있다.
클래스를 개방 수준으로 정의했다? 그러면 다른 모듈에서도 그 클래스를 상속할 수 있도록 하는 의도가 담겨있는 것이다.
내부 접근수준 - internal
internal 키워드로 지정하는 내부 접근수준은 기본적으로 모든 요소에 암묵적으로 지정하는 기본 접근 수준이다.
내부 접근 수준을 지정되면 소스파일이 속해있는 모듈 어디에서도 사용될 수 있다. 하지만 외부 모듈에서는 접근할 수 없다.
보통 내부에서 광역적으로 사용할 경우 내부 접근수준을 지정한다.
파일 외부 비공개 접근 수준 - fileprivate
그 요소가 구현된 소스파일 내부에서만 사용할 수 있도록 하는 접근 수준이다.
소스파일 외부에서 수정이 일어나면 문제가 발생할 수 있을 때 사용하면 좋다.
비공개 접근 수준 - private
접근수준 중에서 가장 한정적인 접근 수준이다.
비공개 접근 수준으로 지정된 요소는 기능을 정의하고 구현한 범위 내에서만 사용할 수 있다.
같은 소스파일 안에 구현한 다른 타입이나 기능에서도 사용할 수 없다.
'Swift' 카테고리의 다른 글
Swift: private과 fileprivate (0) | 2022.02.21 |
---|---|
Swift: 접근제어 구현 규칙 (0) | 2022.02.15 |
Swift: 접근제어의 필요성 (0) | 2022.02.14 |
Swift: 인스턴스 생성1 (0) | 2022.02.12 |
Swift: 타입 메서드(Type Method) (0) | 2022.02.12 |