타입 캐스팅( is, as )

유재우·2023년 5월 2일
0

iOS Developer의 길!

목록 보기
12/15

타입 캐스팅이란?

인스턴스의 타입을 확인 하거나, 해당 인스턴스를 슈퍼 클래스나 하위 클래스로 취급하는 방법

Swift에서 타입 캐스팅은 is 나 as 연산자로 구현하고, 타입 캐스팅을 사용하여 타입이 프로토콜에 적합한지 여부도 확인할 수 있음


is: Checking Type

타입을 체크하는 연산자
런타임 시점에 실제 체크가 이루어짐

표현식이 Type과 동일하거나, 표현식이 Type의 서브 클래스인 경우 => true
이 외의 경우 => false

let string: String = "string"
string is String // => true
string is Int // => false

또한 Type의 서브 클래스인 경우에도 true를 반환

class Man { }
class Me: Man { }
let me: Me = .init()
me is Me // => true
me is Man // => true

as: Type Casting

표현식이 변환할 Type과 호환된다면, 변환될 Type으로 캐스팅된 인스턴스를 리턴한다.
상속관계인 업캐스팅(Up Casting)과 다운캐스팅(Down Casting)에서 사용한다.
Any와 AnyObject 타입을 사용할 경우, 상속관계가 아니어도 예외적으로 사용 가능하다.

업캐스팅 (Up Casting)

as를 사용하여 부모 클래스의 인스턴스로 사용할 수 있도록 컴파일러에게 타입정보를 전환해준다.
업 캐스팅은 항상 성공한다
  • Any 혹은 AnyObject로도 타입정보를 변환할 수 있다.
  • 암시적으로 처리되므로 꼭 필요한 경우가 아니면 생략가능하다.

다운캐스팅 (Down Casting)

as?(조건부), as!(강제)를 사용하여 자식 클래스의 인스턴스로 
사용할 수 있도록 컴파일러에게 타입 정보를 전환해준다.
  • 다운 캐스팅은 실패할 수 있다.

as? (조건부)

런타임 시점에 다운 캐스팅을 하며, 실패할 시에 nil을 리턴

as! (강제)

런타임 시점에 다운 캐스팅을 하며, 실패할 경우 에러 발생

참고한 블로그 링크

profile
끝없이 탐구하는 iOS 개발자 유재우입니다!

0개의 댓글