[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 공식 문서에서 확인할 수 있습니다.

위의 과정을 통해, 자식 클래스 타입으로의 다운캐스팅에 대해 알아보았습니다. 안전한 다운캐스팅과 강제 다운캐스팅을 통해 다양한 상황에 대비할 수 있습니다.