코드에서 상호작용을 할 때
소스 파일 간 또는 모듈 간 접근을 제한할 수 있는 기능을 말한다.
⭐특정 코드의 세부적인 구현을 숨기거나, 허용된 기능만 사용하는 인터페이스를 제공할 수 있다.⭐
✅ 모듈: 배포할 코드의 묶음 단위로 "import" 를 통해 불러오는 것을 말한다.
✅ 소스파일: Swift 코드 파일 1개를 의미한다.
✅ 파일 간 또는 모듈 간에 접근 제한하는 목적은 "은닉화"에 있다.
접근 레벨의 종류
open - 개방 접근수준
- 가장 넓은 범위
- 지정된 요소는 어디서든 사용 가능하다.
- Open은 클래스에만 사용 가능하다.
- Open에서만 클래스가 정의된 모듈 외부에서도 subclassing할 수 있다.
- Open에서만 클래스가 정의된 모듈 외부에서 override 할 수 있다.
public - 공개 접근수준
- public 키워드로 접근 수준이 지정된 요소는 어디서든 쓰일 수 있다.
- 자신이 구현된 소스파일은 물론, 그 소스파일이 속해 있는 모듈, 그 모듈을 가져다 쓰는 모듈 등 모든 곳에서 사용 가능하다
- 공개 접근 수준은 주로 프레임워크에서 외부와 연결될 인터페이스를 구현하는데 많이 쓰인다.
- 우리가 사용하는 스위프트이 기본 요소는 모두 공개 접근수준으로 구현되어 있다.
internal - 내부 접근수준
- internal 키워드로 지정하는 내부 접근수준은 기본적으로 모든 요소에 암묵적으로 지정하는 기본 접근수준이다.
- 내부 접근수준으로 지정된 요소는 소스파일이 속해있는 모듈 어디에서든 쓰일 수 있다.
- 단, 그 모듈을 갖다 쓰는 외무 모듈에서는 접근할 수 없다.
- 외부에서 사용할 클래스나 구조체가 아니고, 모듈 내부에서 사용할 경우 내부 접근수준으로 지정한다.
fileprivate - 파일 외부 비공개 접근수준
- fileprivate 키워드로 지정된 요소는 그 요소가 구현된 소스파일 내부에서만 사용할 수 있다.
- 해당 소스파일 외부에서 값이 변경되거나 함수를 호출함면 부작용이 생길 수 있다.
private - 비공개 접근수준
- 가장 한정적인 범위이다.
- private으로 지정된 요소는 그 기능을 정의하고, 구현한 범위 내에서만 사용할 수 있다.
- 또한, 같은 소스파일 안에 구현한 다른 타입이나 기능에서도 사용할 수 없다.
✅ 싱글톤을 사용할 때 쓰인다.
class UserInfo {
static let shared = UserInfo() // 이때 단 한번만 생성된다.
var id: String?
var password: String?
var name: String?
private init() { }
}
⭐ 주의할 점 ⭐
상위 요소보다 하위 요소가 더 높은 접근 수준을 가지면 안된다.
private class EClass{
public func method(){} // private 내부에 public 키워드를 사용해도 소용없다.
}
public func eMethod(_ : EClass){ // private 클래스를 인자로 받을 수 없다.
print("get Eclass")
}
'Swift > 기본' 카테고리의 다른 글
ARC 1편 - ARC 란? (0) | 2024.04.19 |
---|---|
메모리 구조 (Code, Data, Stack, Heap) (1) | 2024.04.18 |
서브스크립트 (1) | 2024.04.16 |
제네릭 (제네릭 제약, 제네릭 확장, 제네릭 함수와 오버로딩) (0) | 2024.04.16 |
제네릭 (0) | 2024.04.15 |