Swift | 타입캐스팅

일어나 개발해야지·2023년 12월 12일

Swift

목록 보기
3/21
post-thumbnail

상속과 타입

class Mom {
 var home = true
 var family = true
 var car = true
}

class Daughter : Mom {
var youth = true
}

let mommy = Mom()
let me = Daughter()
  • 상속에 의한 관계라면, 자식은 부모의 인스턴스를 가질 수 있지만
  • 부모는 자식의 인스턴스를 가질 수 없음

타입캐스팅

타입캐스팅에는 두가지 종류가 있다. 업캐스팅과 다운캐스팅이다.
위의 코드처럼 Mom을 상속받는 Daughter라는 클래스가 있을때,
Daughter의 붕어빵을 찍어냈으나, 현재 Mom 타입을 취하고 있는 인스턴스가 있다면
다시 Daughter의 타입을 취할 수 있도록 다운캐스팅을 통해서 확장이 가능하다.

let instenceMom : Mom = Daughter()

반대로 현재 Daughter 타입인 인스턴스가, 상위 클래스인 Mom 타입을 취하게 하는것은 업캐스팅이다.

let instenceDaughter = Daughter()

1. 다운캐스팅

두가지 방법이 존재.

as? : type 전환이 가능한지 체크한 후 전환, 실패시 nil을 반환
as! : 강제 전환, 실패하면 런타임 에러 발생


if let mommy = instenceMom as? Daughter {
   mommy.youth
} else {
   print("Type 전환 안됨")
}

let mommy2 = instenceMom as! Daughter
mommy2.youth

2. 업캐스팅

반대로 현재 Daughter 타입인 인스턴스가, 상위 클래스인 Mom 타입을 취하게 하는것을 의미한다.
하위 클래스가 상위클래스의 타입으로 축소하는 것이기 때문에 항상 성공하며, as 를 사용한다.

let instenceDaughter = Daughter()

let me = instenceDaughter as Mom

0개의 댓글