[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
클래스의 internalVar
를 fileprivate
로 변경하려고 시도하면 에러가 발생합니다. 또한, display
메소드를 오버라이드 할 때 internal
을 fileprivate
로 변경하려고 시도하면 마찬가지로 에러가 발생합니다.
정리
Swift에서는 기본적으로 상속을 통해 접근 제어를 제어하는데 있어 몇 가지 제약사항이 있습니다. 이를 잘 이해하고 활용하여 안전하고 구조화된 코드를 작성할 수 있습니다.
더 많은 정보는 Swift 공식문서를 참고하세요.