[swift] 다운캐스팅과 엉클 캐스팅의 차이

프로그래밍에서 캐스팅은 하나의 자료형을 다른 자료형으로 변환하는 것을 의미합니다. 스위프트에서는 다운캐스팅업캐스팅 두 가지 유형의 캐스팅이 있습니다.

업캐스팅

업캐스팅은 부모 클래스로의 변환을 의미합니다. 예를 들어, 자식 클래스의 인스턴스를 부모 클래스의 자료형으로 변환하는 것을 말합니다. 업캐스팅은 보통 자동으로 이루어지며, 자식 클래스의 객체를 부모 클래스의 변수에 할당하는 것과 같이 간단하게 처리됩니다.

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

class Dog: Animal {
    override func makeSound() {
        print("Bark!")
    }
}

let myDog = Dog()
let myAnimal: Animal = myDog // 업캐스팅

다운캐스팅

다운캐스팅은 반대로 부모 클래스에서 자식 클래스로의 변환을 의미합니다. 다운캐스팅은 일반적으로 as? 또는 as! 키워드를 사용하여 수행됩니다.

예를 들어, 다운캐스팅을 통해 자식 클래스의 메서드를 호출할 수 있습니다.

if let myRealDog = myAnimal as? Dog {
    myRealDog.makeSound() // 다운캐스팅 성공
} else {
    print("myAnimal cannot be downcast to Dog")
}

결론

업캐스팅과 다운캐스팅은 상속 관계에 있는 클래스들 간의 유연한 형 변환을 가능하게 합니다. 안전하고 올바른 캐스팅을 위해 옵셔널 바인딩을 사용하는 것이 좋으며, 런타임 시 유효성을 검사하고 캐스팅을 수행해야 합니다.

내용 참고: Swift.org - Type Casting