[swift] 런타임에서의 타입 캐스팅
프로그래밍에서 타입 캐스팅은 변수나 상수의 타입을 다른 타입으로 변환하는 프로세스를 말합니다. Swift에서는 두 가지 형태의 타입 캐스팅이 있습니다: 런타임에서의 타입 캐스팅과 컴파일 타임에서의 타입 캐스팅입니다. 이번 포스트에서는 런타임에서의 타입 캐스팅에 대해 살펴보겠습니다.
런타임에서의 타입 캐스팅
Swift에서는 is
와 as?
그리고 as!
연산자를 사용하여 런타임에서의 타입 캐스팅을 수행할 수 있습니다.
타입 확인 (Type Checking) - is
is
연산자는 인스턴스가 해당 타입에 속하는지 확인하는데 사용됩니다. 다음은 is
연산자를 사용한 예제입니다.
class Vehicle {
var numberOfWheels = 0
}
class Bicycle: Vehicle {
var hasBasket = false
}
class Car: Vehicle {
var numberOfDoors = 0
}
let bicycle = Bicycle()
let car = Car()
print(bicycle is Bicycle) // true
print(car is Bicycle) // false
다운캐스팅 (Downcasting) - as?
와 as!
다운캐스팅은 슈퍼클래스의 인스턴스를 서브클래스의 인스턴스로 변환하는 것을 말합니다. as?
와 as!
연산자를 사용하여 다운캐스팅을 수행할 수 있습니다. as?
연산자를 사용하면 옵셔널 값으로 반환되며, 다운캐스팅에 실패할 경우 nil
을 반환합니다. 반면 as!
연산자는 강제로 다운캐스팅을 시도하며, 다운캐스팅에 실패할 경우 런타임 에러가 발생합니다.
let vehicle: Vehicle = Bicycle()
if let bicycle = vehicle as? Bicycle {
print("Success: Converted to Bicycle")
} else {
print("Failure: Not a Bicycle")
}
let vehicle = Vehicle()
let car = vehicle as! Car // 런타임 에러가 발생합니다.
런타임에서의 타입 캐스팅은 클래스의 계층 구조에서 유용하게 사용됩니다. 이를 통해 인스턴스의 타입을 확인하거나 다운 캐스팅하여 해당하는 메서드나 프로퍼티에 접근할 수 있습니다.
런타임에서의 타입 캐스팅은 Swift에서 강력한 도구로, 유연하고 안전한 코드를 작성하는 데 도움이 됩니다.