as? as! (type cast operator)를 이해하기 위해서
예제 문구 작성 중, 타입 전환이 되지 않는 문제를 확인함.
class Mom {
var home = true
var family = true
var car = true
}
class Daughter : Mom {
var youth = true
}
let instenceMom = Mom()
if let mommy = instenceMom as? Daughter {
let checkGetType = mommy.youth
print(checkGetType)
} else {
print("Type 전환 안됨")
}
관련 내용을 확인하니, 인스턴스가 Daughter()로 생성되었어야 한다고 어드바이스 받음.
let instenceMom : Mom = Daughter()
① let instenceMom = Mom() 를 Daughter()로 변경 할 수있어야 타입캐스팅이지 않나 ?
② let instenceMom:Mom = Daughter() 에서 Mom 타입을 지우면, Daughter으로 추론 될텐데, 일부러 Mom으로 지정 후, Daughter로 타입캐스팅을 하는 이유는 뭘까 ?
다운캐스팅타입캐스팅은 상속과 함께 다형성과도 밀접한 관련이 있다.
다형성은 객체지향의 4대 특징 중 하나로
하나의 인스턴스가 여러가지 형태로 저장 될 수 있음을 의미한다.
Daughter 로 생성된 인스턴스가 그대로 Daughter의 타입을 취할 수도 있고
업캐스팅을 통해서 Mom 타입을 취할 수도 있다.