[swift] 상속을 통한 데이터 접근 제어

이번에는 Swift에서 상속과 데이터 접근 제어에 대해 알아보겠습니다. 상속을 사용하여 부모 클래스로부터 속성 및 메소드를 상속받을 수 있습니다. 하지만, 이를 통해 데이터 접근 제어를 어떻게 할 수 있는지에 대해서도 알아봅시다.

기본적인 상속

class Parent {
    fileprivate var privateVar = 10
    internal var internalVar = 20
}

class Child: Parent {
    func display() {
        print(internalVar)  // 20
        print(privateVar)   // 에러 - 'privateVar' is inaccessible
    }
}

위의 예시에서 Child 클래스가 Parent 클래스를 상속받았습니다. display 함수에서 internalVar는 접근 가능하지만, privateVar는 접근할 수 없습니다. 이는 fileprivate로 선언된 속성이 상속되더라도 외부 클래스에서 접근할 수 없음을 보여줍니다.

재정의와 접근 제어

상속받은 속성이나 메소드를 재정의할 때, 접근 제어 수준을 더 느슨하게 변경할 수 없습니다. 이는 재정의된 버전이 부모 클래스의 버전보다 더 덜 제한적이면 안 되기 때문입니다.

class Parent {
    fileprivate var privateVar = 10
    func display() {
        print("Parent's display")
    }
}

class Child: Parent {
    fileprivate var internalVar = 20  // 에러 - 'internalVar' cannot override protected property 'internalVar' in class 'Parent'
    override func display() {
        super.display()
        print("Child's display")
    }
}

위 예시에서 Child 클래스의 internalVarfileprivate로 변경하려고 시도하면 에러가 발생합니다. 또한, display 메소드를 오버라이드 할 때 internalfileprivate로 변경하려고 시도하면 마찬가지로 에러가 발생합니다.

정리

Swift에서는 기본적으로 상속을 통해 접근 제어를 제어하는데 있어 몇 가지 제약사항이 있습니다. 이를 잘 이해하고 활용하여 안전하고 구조화된 코드를 작성할 수 있습니다.

더 많은 정보는 Swift 공식문서를 참고하세요.