새소식

iOS/Swift

[Swift] 타입캐스팅

  • -

 

참조 :  Swift 스위프트 프로그래밍 3판 Swift 5, 저자 야곰 (한빛미디어)
인프런 강의 (iOS 최신 앱 개발 강의 - 기초부터 핵심 요소, 간단한 포폴까지 제작)

 

타입캐스팅이란?


- Swift의 타입캐스팅은 인스턴스의 타입을 확인하거나 자신을 다른 타입의 인스턴스 인양 행세할 수 있는 방법으로 사용

- is 와 as 연산자로 구현, 두 연산자로 값의 타입을 확인하거나 다른 타입으로 전환(Cast)할 수 있음

- 자식 클래스는 부모 클래스가 갖고 있는 특성들을 모두 포함

 

 

 

 

데이터 타입 확인


- 타입 확인 연산자인 is를 사용하여 인스턴스가 어떤 클래스의 인스턴스인지 타입 확인 가능

- is 연산자 외에도 메타 타입(Meta Type)을 이용하여 타입 확인 가능

- 메타 타입 타입은 타입의 타입을 뜻함

- 타입의 이름 뒤에 .Type을 붙이면 이는 메타 타입을 나타냄

- .self를 사용하여 타입을 값처럼 표현

19-6 메타 타입

- 프로그램 실행 중에 인스턴스의 타입을 표현한 값을 알아보고자 하면 type(of:) 함수를 사용

※ 인스턴스 self와 타입 self

- .self표현은 값 뒤에 쓰면 그 값 자신을, 타입 이름 뒤에 써주면 타입을 표현하는 값을 반환

 

 

다운캐스팅


- 클래스의 상속 모식도에서 자식클래스보다 더 상위에 있는 부모클래스의 타입을 자식클래스의 타입으로 캐스팅하는 것

- 타입캐스트 연산자(Type Cast Operator)는 as? 와 as!가 있음

- 타입캐스트 연산자를 사용하여 자식클래스 타입으로 다운캐스팅할 수 있음

- as?와 as!

  1. 다운캐스팅에 실패할 가능성이 있다면 as?를 사용하고 만약 다운캐스팅이 실패할 경우 nil을 반환(반환타입이 옵셔널)
  2. as!를 사용하여 다운캐스팅에 실패할 경우 런타임 오류 발생

- 컴파일러가 다운캐스팅을 확신할 수 있는 경우 as? 나 as! 대신 as를 이용하여 사용

- 항상 성공하는 경우를 아는 경우는 캐스팅하려는 타입이 같은 타입이거나 부모클래스 타입이라는 것을 알고 있는 경우

 

 

 

Any, AnyObject의 타입캐스팅


- Any : 함수 타입을 포함한 모든 타입(옵셔널 타입도 표현)

- AnyObject : 클래스 타입만

- AnyObject는 클래스의 인스턴스만 취할 수 있고, Any는 모든 타입의 인스턴스를 취할 수 있음

728x90

'iOS > Swift' 카테고리의 다른 글

[iOS] PHAsset을 UIImage로 변환하기  (0) 2022.08.24
[Swift] 프로토콜  (0) 2022.07.03
[Swift] 옵셔널 체이닝  (0) 2022.07.01
[Swift] Enum(열거형)  (0) 2022.05.14
[Swift] Dictionary 와 Set  (0) 2022.05.14
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.