CHAPTER 19 타입캐스팅
스위프트는 데이터 타입 안전을 위하여 각기 다른 타입끼리의 값 교환을 엄격히 제한
__19.1 기존 언어의 타입 변환과 스위프트의 타입 변환
__19.2 스위프트 타입캐스팅
스위프트에서는 다른 언어의 타입 변환 혹은 타입캐스팅을 이니셜라이저로 단순화
스위프트 타입캐스팅은 인스턴스의 타입을 확인하거나 자신을 다른 타입의 인스턴스인양 행세할 수 있는 방법으로 사용할 수 있습니다.
값의 타입을 확인하거나 다른 타입으로 전환
타입캐스팅을 통해 프로토콜을 준수하는지도 확인
스위프트와 타입캐스팅은 실제로 참조 타입에서 주로 사용
Coffee는 Latte나 Americano인 척할 수 없지만, Latte나 Americano는 Coffee인 척할 수 있다
Latte나 Americano는 Coffee가 갖는 특성을 모두 갖기 때문
__19.3 데이터 타입 확인
메타 타입
클래스, 구조체, 열거형의 이름은 타입의 이름입니다. 그 타입의 이름 뒤에 .Type을 붙인다.
SomeClass.self라고 표현하면 SomeClass의 인스턴스가 아니라 SomeClass 타입을 값으로 표현한 값을 반환
SomeProtocol.self라고 표현하면 SomeProtocol을 준수하는 타입의 이스턴스가 아니라 SomeProtocol 프로토콜을 값으로 표현한 값을 반환
프로그램 실행 중에 인스턴스의 타입을 표현한 값을 알아보고자 한다면 type(of:) 함수를 사용
인스턴스 self와 타입 self의 의미
.self 표현은 값 뒤에 써주면 그 값 자신, 타입 이름 뒤에 써주면 타입을 표현하는 값을 반환
__19.4 다운캐스팅
클래스의 상속 모식도에서 자식클래스보다 더 상위에 있는 부모클래스의 타입을 자식클래스의 타입으로 캐스팅한다고 해서 다운캐스팅
타입캐스트 연산자
다운캐스팅은 실패의 여지가 충분히 있기 때문에 ?가 붙은 연산자와 !가 붙은 연산자 두 종류
as? 연산자
다운캐스팅을 시도해보는 조건부 연산자
실패했을 경우 nil을 반환
반환타입이 옵셔널
성공할 경우 옵셔널 타입으로 인스턴스를 반환
as! 연산자
다운캐스팅을 강제
실패할 경우 런타임 오류
반환타입이 옵셔널이 아니다.
as! 연산자를 사용하여 다운캐스팅이 성공할 경우 옵셔널이 아닌 인스턴스가 반환
다운캐스팅에 실패할 가능성이 있다면 조건부 연산자인 as?를 사용
컴파일러가 다운캐스팅을 확신할 수 있는 경우에는 as?나 as! 대신 as를 사용할 수도 있습니다.
타입캐스팅의 의미
인스턴스를 사용할 때 어떤 타입으로 다루고 어떤 타입으로 접근해야 할지 판단할 수 있도록 컴퓨터에 힌트를 주는 것
__19.5 Any, AnyObject의 타입캐스팅
Any
함수 타입을 포함한 모든 타입
AnyObject
클래스 타입만
참고
야곰의 스위프트 프로그래밍 https://book.naver.com/bookdb/book_detail.nhn?bid=12571019
댓글