[swift] 조건부 다운캐스팅을 이용한 타입 변환
스위프트에서는 클래스 타입뿐만 아니라 프로토콜과 같은 다양한 타입을 선언하고 사용할 수 있습니다. 때때로 한 타입을 다른 타입으로 변환해야 하는데, 이때 조건부 다운캐스팅을 사용할 수 있습니다.
조건부 다운캐스팅은 as?
키워드를 사용하여 수행됩니다. 만약 다운캐스팅에 실패하면 nil
을 반환하게 됩니다. 조건부 다운캐스팅에는 다음과 같은 형태가 있습니다.
if let convertedInstance = instance as? DesiredType {
// 조건부 다운캐스팅에 성공한 경우
// convertedInstance를 사용하여 작업을 수행합니다
} else {
// 조건부 다운캐스팅에 실패한 경우
// 원하는 작업을 수행합니다
}
예를 들어, 다음과 같이 프로토콜을 사용하는 상황을 가정해 보겠습니다.
protocol Animal {
func makeSound()
}
class Dog: Animal {
func makeSound() {
print("멍멍")
}
}
class Cat: Animal {
func makeSound() {
print("야옹")
}
}
let animals: [Any] = [Dog(), Cat()]
for animal in animals {
if let soundMakingAnimal = animal as? Animal {
soundMakingAnimal.makeSound()
} else {
print("소리를 낼 수 없는 동물입니다.")
}
}
이 예제에서는 다운캐스팅을 통해 Animal
프로토콜을 준수하는 인스턴스인지 확인하고, 만약 그렇다면 해당 메소드를 호출합니다. 그렇지 않다면 해당 동물은 소리를 낼 수 없다는 메시지를 출력합니다.
조건부 다운캐스팅을 통해 타입의 안전한 변환을 수행할 수 있으며, 코드의 유연성을 높일 수 있는 강력한 도구입니다.
참고 자료: