[swift] 타입 캐스팅을 활용한 객체 변환
Swift에서는 객체의 타입을 확인하거나 다른 타입으로 변환하는 타입 캐스팅을 제공합니다. 이 기능을 사용하면 안전하게 객체를 변환하고, 실행 시간에 타입 안정성을 보장할 수 있습니다.
1. 타입 캐스팅이란 무엇인가요?
타입 캐스팅은 객체의 타입을 확인하거나, 서로 다른 클래스 계층 구조 사이에서 상속 관계를 가진 객체로 변환하는 프로세스를 말합니다. 타입 캐스팅은 다음 두 가지 방법으로 수행할 수 있습니다.
- is 연산자: 객체의 타입을 확인하는데 사용됩니다. 특정 클래스의 인스턴스인지 확인하여 불리언 값으로 반환합니다.
- as 연산자: 상위 클래스에서 하위 클래스로의 타입 변환 또는 인터페이스를 준수하는 클래스로의 타입 변환에 사용됩니다.
2. 타입 캐스팅의 활용 예시
아래 예제는 Vehicle
클래스를 상속받은 Car
클래스와 Bicycle
클래스가 있습니다.
class Vehicle {
var currentSpeed = 0
func makeNoise() {
// Vehicle의 기본 구현
}
}
class Car: Vehicle {
var gear = 1
override func makeNoise() {
// Car의 특정한 구현
}
}
class Bicycle: Vehicle {
var hasBasket = false
}
이제 Vehicle
타입의 객체를 만든 후, 이를 Car
또는 Bicycle
타입의 객체로 변환해 보겠습니다.
let someVehicle = Vehicle()
someVehicle.makeNoise() // Vehicle의 makeNoise() 호출
// Vehicle 타입의 객체를 Car 타입의 객체로 변환
if let car = someVehicle as? Car {
car.makeNoise() // 오버라이드된 Car의 makeNoise() 호출
print("This is a Car")
} else {
print("This is not a Car")
}
// Vehicle 타입의 객체를 Bicycle 타입의 객체로 변환
if let bicycle = someVehicle as? Bicycle {
bicycle.makeNoise() // Vehicle 기본 구현의 makeNoise() 호출
print("This is a Bicycle")
} else {
print("This is not a Bicycle")
}
위 예제에서는 as?
연산자를 사용하여 Vehicle
타입의 객체를 Car
또는 Bicycle
타입의 객체로 안전하게 변환하고 실행 결과를 확인하고 있습니다.
타입 캐스팅은 코드의 유연성 및 안전성을 높이는 데 도움이 됩니다. 안전하게 타입을 변환하고 해당 타입의 메서드나 프로퍼티에 접근할 수 있도록 해주기 때문에 리팩터링이나 확장성 측면에서 유용하게 활용될 수 있습니다.
결론
타입 캐스팅은 Swift에서 객체 간의 변환을 쉽게 해주는 강력한 도구입니다. 이를 통해 객체의 타입을 확인하고 안전하게 변환하여 원하는 동작을 수행할 수 있습니다. 타입 캐스팅은 코드의 유연성을 높이고, 실행 시간에 안전성을 확보하는 데 도움이 됩니다.
참고 자료: The Swift Programming Language - Type Casting