접근제어란?
정보의 은닉화를 구현하기 위한 핵심 기능이 접근제어 입니다.
접근제어는 말그대로 접근을 제한할 수 있는 기능입니다.
이를통해 상세 구현은 숨기고, 허용된 기능만 사용하는 인터페이스를 제공할 수 있죠.
외부에서 보거나 접근하면 안되는 코드를 숨길 수 있고, 불필요한 접근으로
의도하지 않는 결과가 나올 수 있는 경우에 접근제어를 이용합니다.
스위프트의 접근제어는 모듈과 소스파일을 기반으로 설계됩니다.
모듈
모듈은 코드를 배포하는 단일 단위의 하나로,
프레임워크나 앱이 이 단위로 배포되고 import 키워드로 import할 수 있습니다.
소스파일
소스파일은 모듈안에 있는 소스파일을 의미합니다.
접근레벨
스위프트에서는 4개의 접근레벨을 제공합니다.
1. open & public
다른 모듈에서도 사용가능합니다. open은 다른 모듈에서 override와 상속이 가능하지만
public접근자로서 선언된 것은 orverride와 상속이 불가능합니다.
2. Internal
접근레벨의 기본값입니다. 외부 모듈에선 접근할 수 없지만,
해당 모듈 전체에서 사용가능합니다.
3. file-private
특정 엔티티를 선언한 파일 안에서만 가능합니다.
4. private
특정 엔터티가 선언된 괄호 안 ( {} )에서만 사용이 가능합니다.
접근제어 설정시, 하위요소는 상위 요소보다 높은 접근수준을 가질 수 없습니다.
클래스가 private로 설정되있는데 프로퍼티가 open일 수는 없습니다.
private으로 접근제어가 되어있는 요소는 같은 파일 내부에
다른 타입의 코드가 있더라도 접근이 불가능하지만,
extension 코드가 같은 파일의 존재하는 경우, 접근할 수 있습니다.
만약, 접근제어가 open이나 public으로 높은 수준을 가진 클래스의
내부 프로퍼티에 대한 접근만을 제한하고 싶다면 어떻게 해야할까요?
이경우 setter만 더 낮은 접근수준을 같도록 제한할 수 있습니다.
public struct sample {
public var count = 0
private(set) var counted : Int{
get { return count }
set { count += 1 }
}
'Language > Swift' 카테고리의 다른 글
Swift 제네릭 (Generic) (0) | 2021.03.19 |
---|---|
Swift 프로토콜 지향 프로그래밍 (POP) (0) | 2021.03.17 |
Swift 고차함수 (0) | 2021.03.15 |
Swift 오류처리 (0) | 2021.03.15 |
Swift 익스텐션 (Extensions) (0) | 2021.03.15 |