[swift] 타입 캐스팅을 이용한 클래스 계층 구조 분석
Swift 언어에서는 타입 캐스팅을 이용하여 클래스 계층 구조를 분석하고 객체의 타입을 확인할 수 있습니다. 타입 캐스팅을 통해 동적인 인스턴스의 타입 지정과 형 변환을 할 수 있습니다.
클래스 계층 구조
먼저, 예제로 사용될 클래스 계층 구조를 정의해보겠습니다.
class Animal {
func makeSound() {
print("Some generic sound")
}
}
class Dog: Animal {
override func makeSound() {
print("Woof!")
}
}
class Cat: Animal {
override func makeSound() {
print("Meow!")
}
}
위의 예제에서 Animal
클래스는 makeSound
메서드를 가지고 있습니다. Dog
와 Cat
클래스는 각각 Animal
클래스를 상속받아 makeSound
메서드를 오버라이딩 하고 있습니다.
타입 캐스팅
인스턴스의 타입 확인하기
다음으로, 타입 캐스팅을 이용하여 객체의 타입을 확인하는 방법에 대해 알아보겠습니다.
let someAnimal: Animal = Dog()
if someAnimal is Dog {
print("It's a dog!")
} else if someAnimal is Cat {
print("It's a cat!")
} else {
print("It's something else")
}
위의 예제에서 someAnimal
은 Animal
타입이지만, 실제로는 Dog
클래스의 인스턴스를 가리키고 있습니다. is
키워드를 사용하여 객체의 타입을 확인할 수 있습니다.
다운캐스팅
이제, 다운캐스팅을 통해 객체의 타입을 변환해보겠습니다.
if let dog = someAnimal as? Dog {
dog.makeSound() // 출력: "Woof!"
} else if let cat = someAnimal as? Cat {
cat.makeSound() // 출력: "Meow!"
}
위의 예제에서 as?
키워드를 사용하여 someAnimal
을 Dog
또는 Cat
으로 다운캐스팅하고, 성공적으로 다운캐스팅 되었을 때 해당 클래스의 메서드를 호출할 수 있습니다. 만약 다운캐스팅에 실패할 경우 nil
이 반환됩니다.
타입 캐스팅을 통해 클래스 계층 구조를 분석하고, 동적으로 객체의 타입을 확인하고 변환하는 방법에 대해 알아보았습니다. Swift에서의 타입 캐스팅은 다양한 상황에서 유용하게 활용될 수 있습니다.
참고 자료: The Swift Programming Language - Type Casting