[swift] 자식 클래스 타입으로의 다운캐스팅
다운캐스팅은 수퍼클래스 타입을 서브클래스 타입으로 캐스팅하는 과정을 의미합니다. 만약 부모 클래스의 인스턴스를 자식 클래스의 타입으로 사용해야 할 때에는 다운캐스팅이 필요합니다. Swift에서는 as?
나 as!
를 사용하여 안전하거나 강제로 다운캐스팅을 수행할 수 있습니다.
안전한 다운캐스팅 (Safe Downcasting)
as?
를 사용하여 안전하게 다운캐스팅을 수행할 수 있습니다. 안전한 다운캐스팅은 캐스팅에 실패하는 경우 nil
을 반환합니다.
class Vehicle {
var currentSpeed = 0
}
class Car: Vehicle {
var gear = 1
func drive() {
print("Driving at \(currentSpeed) km/h")
}
}
let myVehicle = Car()
let myCar = myVehicle as? Car // Safe downcasting
if let car = myCar {
car.drive()
} else {
print("Downcasting failed")
}
강제 다운캐스팅 (Forced Downcasting)
as!
를 사용하여 강제로 다운캐스팅을 수행할 수 있습니다. 강제 다운캐스팅은 캐스팅에 실패하는 경우 런타임 에러가 발생합니다.
let vehicle = Vehicle()
let forcedCar = vehicle as! Car // Forced downcasting
forcedCar.drive() // Runtime error: Could not cast value of type 'Vehicle' to 'Car'
다운캐스팅을 사용할 때에는 가능한 안전한 다운캐스팅을 우선적으로 고려하는 것이 좋습니다. 이를 통해 런타임 에러를 방지하고 안정성을 유지할 수 있습니다.
자세한 내용은 Swift 공식 문서에서 확인할 수 있습니다.
위의 과정을 통해, 자식 클래스 타입으로의 다운캐스팅에 대해 알아보았습니다. 안전한 다운캐스팅과 강제 다운캐스팅을 통해 다양한 상황에 대비할 수 있습니다.