스위프트에서 접근 제어는 다른 모듈이나 소스파일에서 특정 코드에 대한 접근을 제한하는 것을 뜻합니다.
객체지향 프로그래밍에서 접근 제어를 통해 객체의 내부 상태와 구현을 숨기고 , 정보를 은닉할 수 있기 때문에 보안을 강화할 수 있습니다.
접근제어는 접근수준 키워드를 통해 구현할 수 있습니다.
각 타입 (클래스, 구조체, 열거형 등)에 지정할 수 있으며, 타입 내부의 프로퍼티, 메서드, 이니셜라이저, 서브스크립트에도 적용이 가능합니다.
접근수준
접근 수준은 다섯 가지로 분류됩니다.
- Open : 가장 높은 접근 수준으로, 모듈 외부에서도 접근이 가능합니다. Open 은 클래스에서만 사용 가능하며, Open 접근 수준을 가진 클래스와 맴버는 다른 모듈에서 해당 클래스를 상속 받아 재정의(Override)하거나 서브클래싱(Subclassing)이 가능합니다.
- Public: Public 접근 수준으로 지정된 요소는 어디서든 사용이 가능합니다. 자신이 구현된 소스파일, 자신이 속한 모듈, 외부 모듈 등 모든 곳에서 사용이 가능합니다. 공개 접근수준은 주로 프레임워크에서 외부와 연결될 인터페이스를 구현하는데 많이 쓰입니다.
- Internal: Internal 키워드는 기본 접근수준으로 접근수준을 선언하지 않으면 Internal로 간주됩니다. Internal 레벨로 선언되면 해당 모듈 내부에서만 사용 가능하고, 외부에서는 접근이 불가능합니다.
- File-private: 파일외부 비공개 접근수준으로 지정된 요소는 해당 요소가 구현된 소스파일 내부에서만 사용 가능합니다. 소스파일 외부에서 값이 변경되거나 함수를 호출하면 문제가 생길 수 있는 경우에 사용됩니다.
- Private: 가장 한정적인 접근수준입니다. 비공개 접근수준으로 지정된 요소는 해당 요소가 구현된 범위 내에서만 사용 가능합니다. 같은 소스파일 안에 구현된 다른 타입이나 기능에서도 사용이 불가능합니다.
public class PublicClass {}
internal class InternalClass {} // Internal은 접근수준을 생략할 수 있습니다.
fileprivate class FilePrivateClass {}
private class PrivateClass {}
public var PublicVariable = 0
internal var InternalVariable = 0 // Internal은 접근수준을 생략할 수 있습니다.
fileprivate func FilePrivateFunction() {}
private func PrivateFunction() {}
접근수준 원칙
Swift에서 모든 타입은 상위 요소보다 하위 요소가 더 높은 접근수준을 가질 없다는 접근수준 원칙을 따릅니다.
- 예를 들어, Public 변수는 자기보다 낮은 수준인 Internal, File-private, Private에서 정의 될 수 없습니다.
- 함수는 그 함수의 파라미터 타입이나 리턴 타입 값보다 더 높은 접근수준을 가질 수 없습니다. 왜냐하면 함수에는 접근 가능하지만 파라미터에 접근이 불가능하거나 반환 값 타입보다 접근수준이 낮아서 함수를 이용하지 못할 수 있기 때문입니다.
수정 예정입니다..
'iOS \ Swift' 카테고리의 다른 글
[Swift] 클로저(Closure)에 대해 알아보자! (0) | 2023.06.27 |
---|---|
[Swift] if let vs guard let 에 대해 알아보자 (0) | 2023.06.19 |
[Swift] http request를 통해 data 불러오기 및 사진 업데이트 (0) | 2023.06.18 |
[Swift] UI를 업데이트 하는 방법 (State, ObservedObject) (0) | 2023.06.18 |
[Swift] 데이터 타입 (0) | 2023.06.17 |