Swift

Swift: private과 fileprivate

소재훈 2022. 2. 21. 21:42

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