Swift | 타입캐스팅과 인스턴스

일어나 개발해야지·2024년 1월 24일

Swift

목록 보기
8/21

Intro

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로 타입캐스팅을 하는 이유는 뭘까 ?

이해

  • 인스턴스를 생성할때 , Daughter()만큼의 메모리를 생성
  • Mom 타입으로 저장한다는건, Mom 타입의 속성에만 접근이 가능하도록 제한하는 것
  • Mom 으로 저장된 인스턴스를 Daughter 확장하는 개념이 다운캐스팅
  • 초기인스턴스가 Mom()으로 생성 된거라면, Daughter()로 확장은 불가능

다형성과 타입캐스팅

타입캐스팅은 상속과 함께 다형성과도 밀접한 관련이 있다.
다형성은 객체지향의 4대 특징 중 하나로
하나의 인스턴스가 여러가지 형태로 저장 될 수 있음을 의미한다.
Daughter 로 생성된 인스턴스가 그대로 Daughter의 타입을 취할 수도 있고
업캐스팅을 통해서 Mom 타입을 취할 수도 있다.

0개의 댓글