본 내용은 '스위프트 프로그래밍' 책을 학습한 후 이를 바탕으로 작성한 글입니다.
- 접근제어는 코드끼리 상호작용을 할 때 파일 간 또는 모듈 간에 접근을 제한할 수 있는 기능이다.
- 불필요한 접근으로 의도치 않은 결과를 초래하거나 꼭 필요한 부분만 제공을 해야하는데 전체 코드가 노출될 가능성이 있을 때 접근제어를 이용한다.
- 접근제어는 접근수준 키워드를 통해 구현할 수 있다.
- 각 타입에 특정 접근수준을 지정할 수 있고, 타입 내부의 프로퍼티, 메서드, 이니셜라이저에도 접근수준을 지정할 수 있다.
- 접근수준을 명시할 수 있는 키워드는 open, public, internal, fileprivate, private 가 있다.
open - 개방 접근수준
public - 공개 접근수준
public
키워드로 접근수준이 지정된 요소는 어디서든 쓰일 수 있다.internal - 내부 접근수준
internal
은 기본 접근수준이므로 굳이 표기하지 않아도 된다.fileprivate - 파일외부비공개 접근수준
private - 비공개 접근수준
이미지 출처 : https://dev-jiwon.github.io/swift-grammar-13/
API
로 사용할 기능을 공개 접근수준으로 지정해주어야 한다.private class AClass {
//AClass의 접근 수준이 비공개 접근수준이므로 이 메서드의 접근수준도 비공개 접근수준으로 취급
public func someMethod() {
// ...
}
}
//AClass의 접근수준이 비공개 접근수준이므로 공개 접근수준 함수의 매개변수나 반환 값 타입으로 사용할 수 없음
public func someFunction(a: AClass) -> AClass {
return a
}
//오류 발생
set
)처럼 표현하면 설정자의 접근수준만 더 낮도록 지정해줄 수 있다.public struct SomeType {
private var count: Int = 0
public var publicStoredProperty: Int = 0
//설정자는 비공개 접근수준
public private(set) var publicGetOnlyStoredProperty: Int = 0
internal var internalComputedProperty: Int {
get {
return count
}
set {
count += 1
}
}
//설정자는 비공개 접근수준
internal private(set) var internalGetOnlyComputedProperty: Int {
get {
return count
}
set {
count += 1
}
}
}
var someInstance: SomeType = SomeType()
print(someInstance.publicStoredProperty) //0
someInstance.publicStoredProperty = 100
print(someInstance.publicGetOnlyStoredProperty) //0
//someInstance.publicGetOnlyStoredProperty = 100 //오류 발생
print(someInstance.internalComputedProperty) //0
someInstance.internalComputedProperty = 100
print(someInstance.internalGetOnlyComputedProperty) //1
//someInstance.internalGetOnlyComputedProperty = 100 //오류 발생
잘 봤습니다!