[swift] 타입 캐스팅

타입 캐스팅은 Swift에서 인스턴스의 타입을 확인하거나 해당 인스턴스를 부모 클래스나 자식 클래스의 타입으로 다루는 것을 말합니다.

1. 업 캐스팅(Upcasting)

업 캐스팅은 하위 클래스의 인스턴스를 상위 클래스 타입으로 변환하는 것을 의미합니다. 이를 통해 부모 클래스의 메소드와 프로퍼티에 접근할 수 있게 됩니다.

class Animal {
    func makeSound() {
        print("Some generic sound")
    }
}

class Dog: Animal {
    func bark() {
        print("Woof!")
    }
}

let myDog = Dog()
let myAnimal: Animal = myDog // Upcasting
myAnimal.makeSound() // "Some generic sound"

2. 다운 캐스팅(Downcasting)

다운 캐스팅은 상위 클래스 타입의 인스턴스를 하위 클래스 타입으로 변환하는 것을 말합니다. 이때 옵셔널 다운 캐스팅 연산자(as?)나 강제 다운 캐스팅 연산자(as!)를 사용할 수 있습니다.

let myAnimal = Animal()
if let myDog = myAnimal as? Dog { // Downcasting with 'as?'
    myDog.bark()
} else {
    print("This animal is not a dog")
}

3. 타입 확인 및 변환

is 연산자를 사용하여 인스턴스의 타입을 확인할 수 있습니다. 또한, as 연산자를 이용하여 타입을 변환할 수도 있습니다.

let someAnimal: Animal = Dog()
if someAnimal is Dog { // Type check
    let someDog = someAnimal as! Dog // Forced downcast
    print("It's a dog!")
    someDog.bark()
}

결론

타입 캐스팅은 Swift에서 인스턴스의 동적인 타입 변환을 허용하여 유연한 프로그래밍을 가능하게 합니다. 그러나 안전한 캐스팅을 위해 옵셔널 다운 캐스팅을 유용하게 활용해야 합니다.