타입 캐스팅이란?

타입 캐스팅은 인스턴스의 타입을 확인하거나, 해당 인스턴스를 슈퍼클래스 or 하위 클래스로 취급하는 방법이다.

is: Checking Type

표현식 is Type

타입을 체크하는 연산자로, 런타임 시점에 실제 체크가 이루어진다.
표현식이 Type과 동일하거나, 표현식이 Type의 서브 클래스인 경우에만 true를 리턴한다.

as: Type Casting

표현식 as 변환Type
표현식 as? 변환Type
표현식 as! 변환Type

표현식의 타입이 변환활 Type과 호환된다면, 변환할 Type으로 캐스팅된 인스턴스를 리턴한다.
종류에는 업캐스팅과 다운캐스팅이 있으며 Any와 AnyObject 타입을 사용할 경우, 상속관계가 아니어도 예외적으로 사용이 가능하다.

Upcasting

  • 서브클래스 인스턴스를 슈퍼클래스의 타입 으로 참조
  • 업캐스팅은 반드시 성공
  • 업캐스팅에 성공하면 슈퍼클래스의 멤버에는 접근이 가능하지만, 서브클래스의 멤버에는 접근이 불가
  • as를 사용하는 방법이외에도 직접 타입을 명시하는 방법도 존재

Downcasting

  • 슈퍼클래스 인스턴스를 서브클래스의 타입 으로 참조
  • 업캐스팅된 인스턴스를 다시 서브클래스 타입으로 참조할 때 사용
  • 다운 캐스팅은 실패할 수 있기 떄문에 as?, as! 연산자 사용

참고

  • as : 컴파일 시점에 업캐스팅을 하며, 실패할 경우 에러가 발생
  • as? : 런타임 시점에 다운캐스팅을 하며, 실패할 경우 nil을 리턴
  • as! : 런타임 시점에 다운캐스팅을 하며, 실패할 경우 에러 발생

댓글남기기