private과 fileprivate접근수준의 차이는
fileprivate 접근수준으로 지정한 요소는 같은 파일의 어떤 코드에서도 접근할 수 있지만,
private 접근수준으로 지정한 요소는 같은 파일이라도 다른 타입이라면 접근이 불가능하다.
하지만 extension으로 같은 타입을 확장하는 코드가 같은 파일에 존재하는 경우에는 사용할 수 있다.
public struct SomeType {
private var privateVariable = 0
fileprivate var fileprivateVariable = 0
}
// 같은 타입의 익스텐션에서는 private요소에 접근할 수 있다.
extension SomeType {
public func publicMethod() {
print("\(self.privateVariable), \(self.fileprivateVariable)")
}
private func privateMethod() {
print("\(self.privateVariable), \(self.fileprivateVariable)")
}
fileprivate func fileprivateMethod() {
print("\(self.privateVariable), \(self.fileprivateVariable)")
}
}
struct AnotherType {
var someInstance: SomeType = SomeType()
mutating func someMethod() {
// public 수준의 메서드는 어디에서든 사용할 수 있다.
self.someInstance.publicMethod() // 0, 0
// 같은 파일에 속해 있는 코드이므로 fileprivate 접근수준 요소에 접근 가능
self.someInstance.fileprivateVariable = 100
self.someInstance.fileprivateMethod() // 0, 100
// 다른 타입 내부의 코드이므로, private요소에 접근 할 수 없다.
// self.someInstance.privateVariable
// self.someInstance.privateMethod()
}
}
var anotherInstance = AnotherType()
anotherInstance.someMethod()
'Swift' 카테고리의 다른 글
Swift 공식문서로 공부하기: Protocols (0) | 2022.04.04 |
---|---|
Swift: 접근제어 구현 규칙 (0) | 2022.02.15 |
Swift: Swift의 접근 수준 (0) | 2022.02.15 |
Swift: 접근제어의 필요성 (0) | 2022.02.14 |
Swift: 인스턴스 생성1 (0) | 2022.02.12 |