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

다운캐스팅과 업캐스팅은 Swift에서 중요한 개념입니다. 이 두 용어는 객체 지향 프로그래밍에서 상위 클래스와 하위 클래스 간의 관계에서 사용됩니다. 이 포스트에서는 다운캐스팅과 업캐스팅의 차이점을 설명하고 Swift에서의 활용에 대해 알아보겠습니다.

업캐스팅

업캐스팅은 하위 클래스의 인스턴스를 상위 클래스 타입으로 변환하는 것을 말합니다. 이때 실제로는 인스턴스의 내용이 변하지 않고, 단지 타입 정보만 변하는 것에 불과합니다. 업캐스팅은 보통 상위 클래스 타입으로 선언된 변수나 상수에 하위 클래스의 인스턴스를 할당하는 과정에서 발생합니다.

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

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

let myDog: Animal = Dog()

위 코드에서 let myDogDog 클래스의 인스턴스를 Animal 타입으로 업캐스팅한 예시입니다.

다운캐스팅

다운캐스팅은 상위 클래스 타입으로 선언된 인스턴스를 다시 하위 클래스 타입으로 변환하는 것을 말합니다. 이는 런타임 시 안전한 형 변환을 위해 주로 인스턴스의 원래 타입을 확인하고 캐스팅합니다.

if let myDog = myDog as? Dog {
    myDog.makeSound()
} else {
    print("The instance is not of type Dog")
}

위 코드에서 as? 키워드를 사용하여 Animal 타입의 myDog 인스턴스를 Dog 타입으로 다운캐스팅한 예시입니다.

이렇게 다운캐스팅과 업캐스팅은 Swift에서 상속과 다형성을 활용할 때 매우 유용하게 사용됩니다.

이상으로 다운캐스팅과 업캐스팅에 대해 간단히 알아보았습니다. Swift에서의 클래스 상속과 다형성을 이해하는 데에 도움이 되었기를 바랍니다.

참고 자료: Swift 공식 문서