스위프트에서의 open은 접근 제어 수준 중 하나로, 클래스와 클래스 멤버를 상속받는 모듈 외부에서도 접근할 수 있도록 해주는 키워드입니다.
open 접근 제어 수준은 가장 높은 접근 권한을 제공하며, 외부 모듈에서 클래스를 상속하고 해당 클래스의 메서드와 프로퍼티를 오버라이드할 수 있도록 허용합니다.
open class Vehicle {
open var speed: Double
public init(speed: Double) {
self.speed = speed
}
open func startEngine() {
print("Engine started")
}
open func stopEngine() {
print("Engine stopped")
}
}
// Vehicle 클래스를 상속받는 Car 클래스
open class Car: Vehicle {
open var brand: String
public init(speed: Double, brand: String) {
self.brand = brand
super.init(speed: speed)
}
open override func startEngine() {
print("Car engine started")
}
open override func stopEngine() {
print("Car engine stopped")
}
}
Vehicle 클래스와 Car 클래스는 모두 open 접근 제어 수준으로 선언되었습니다.
선언된 클래스들은 다른 모듈에서 상속하거나 해당 클래스의 메서드와 프로퍼티를 오버라이드 할 수 있습니다.
open 접근 제어 수준은 상속과 오버라이딩을 위해 사용되므로, 프로젝트의 모듈을 정의할 때 신중하게 사용해야 합니다. 대부분의 경우에는 public 접근 제어 수준으로도 충분하며, 필요한 경우에만 open을 사용하여 접근 범위를 확장하는 것이 좋습니다.
참고(출처) : 개발하는 정대리, 야곰(Swift5)