티스토리 뷰
Swift 또한 다른 언어와 마찬가지로 여러 접근제어자를 제공하여 특정 코드의 접근을 다른 소스파일이나 모듈에서 제한할 수 있다.
접근 제어는 클래스, 구조체 , 열거형 등 개별 타입에도 적용할 수 있고, 그 타입에 속한 프로퍼티, 메서드, 생성자, 서브스크립트에도 적용할 수 있다.
바로 알아보도록 하자.
Swift의 접근 제어는 모듈과 소스파일에 기반을 두고 있다. 모듈은 코드를 배포하는 단일 단위로 하나의 프레임워크나 앱이 이 단위로 배포되고 다른 모듈에서 Swift의 Import 키워드를 사용하여 import 될 수 있다.
1. 접근 레벨
Swift에서는 5개의 접근 레벨을 제공한다.
1) Open & Public: Open과 Public 접근자 모두 선언한 모듈이 아닌 다른 모듈에서 사용 가능하다. 두 접근자의 차이점은 Open은 다른 모듈에서 오버라이드와 서브 클래싱이 불가능 하다는 점이다.
2) Internal: 기본 접근레벨로 아무 접근 레벨을 선언하지 않으면 Internal로 간주된다. Internal 로 선언된 코드는 해당 모듈 전체에서 사용이 가능하다.
3) File-private: 특정 엔티티를 선언한 파일 안에서만 사용 가능하다.
4) Private: 특정 엔티티가 선언된 괄호 안에서만 사용이 가능하다.
2. 접근제어 문법
각 접근자를 사용하여 클래스와 변수, 상수를 선언한 예는 다음과 같다.
public class SomePublicClass {}
internal class SomeInternalClass {} // internal 은 생략 가능
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}
public var somePublicVariable = 0
internal let someInternalConstant = 0 // internal 은 생략 가능
fileprivate func someFilePrivateFunction() {}
private func somePrivateFunction() {}
public class SomePublicClass { // explicitly public class
public var somePublicProperty = 0 // explicitly public class member
var someInternalProperty = 0 // implicitly internal class member
fileprivate func someFilePrivateMethod() {} // explicitly file-private class member
private func somePrivateMethod() {} // explicitly private class member
}
class SomeInternalClass { // implicitly internal class
var someInternalProperty = 0 // implicitly internal class member
fileprivate func someFilePrivateMethod() {} // explicitly file-private class member
private func somePrivateMethod() {} // explicitly private class member
}
fileprivate class SomeFilePrivateClass { // explicitly file-private class
func someFilePrivateMethod() {} // implicitly file-private class member
private func somePrivateMethod() {} // explicitly private class member
}
private class SomePrivateClass { // explicitly private class
func somePrivateMethod() {} // implicitly private class member
}
만약, 튜플이나 중첩 타입과 같이 2가지 접근 제어를 선언한 엔티티가 존재하는 경우는 둘 중 더 낮은 접근 제어자를 적용한다.
그 밖에 함수나 초기자 등 여러 타입, 변수에 대한 접근 제어 조건이 있긴 하지만, 기본적으로 접근 제어는 접근 가능 레벨을 확인하는 것이 가장 중요하기 때문에 따로 서술하지는 않겠다.
References: https://jusung.gitbook.io/the-swift-language-guide/language-guide/25-access-control
'Mobile > ios' 카테고리의 다른 글
[ios] ios 2: ImageView (0) | 2022.12.12 |
---|---|
[ios] ios 1: Hello, Swift! (0) | 2022.12.12 |
[ios] swift 기본 문법 정리 20: Generics (0) | 2022.12.09 |
[ios] swift 기본 문법 정리 19: Extensions (0) | 2022.12.09 |
[ios] swift 기본 문법 정리 18: Protocols (0) | 2022.12.08 |
- redux
- Promise
- 인천 구월동 맛집
- 인천 구월동 이탈리안 맛집
- await
- 파니노구스토
- Async
- javascript
- react-native
- 이탈리안 레스토랑
- redux-thunk
- react
- AsyncStorage
- 맛집
- 정보보안기사 #실기 #정리
- Total
- Today
- Yesterday