[Swift] 타입캐스팅
참조 : Swift 스위프트 프로그래밍 3판 Swift 5, 저자 야곰 (한빛미디어)
인프런 강의 (iOS 최신 앱 개발 강의 - 기초부터 핵심 요소, 간단한 포폴까지 제작)
타입캐스팅이란?
- Swift의 타입캐스팅은 인스턴스의 타입을 확인하거나 자신을 다른 타입의 인스턴스 인양 행세할 수 있는 방법으로 사용
- is 와 as 연산자로 구현, 두 연산자로 값의 타입을 확인하거나 다른 타입으로 전환(Cast)할 수 있음
- 자식 클래스는 부모 클래스가 갖고 있는 특성들을 모두 포함
데이터 타입 확인
- 타입 확인 연산자인 is를 사용하여 인스턴스가 어떤 클래스의 인스턴스인지 타입 확인 가능
- is 연산자 외에도 메타 타입(Meta Type)을 이용하여 타입 확인 가능
- 메타 타입 타입은 타입의 타입을 뜻함
- 타입의 이름 뒤에 .Type을 붙이면 이는 메타 타입을 나타냄
- .self를 사용하여 타입을 값처럼 표현
- 프로그램 실행 중에 인스턴스의 타입을 표현한 값을 알아보고자 하면 type(of:) 함수를 사용
※ 인스턴스 self와 타입 self
- .self표현은 값 뒤에 쓰면 그 값 자신을, 타입 이름 뒤에 써주면 타입을 표현하는 값을 반환
다운캐스팅
- 클래스의 상속 모식도에서 자식클래스보다 더 상위에 있는 부모클래스의 타입을 자식클래스의 타입으로 캐스팅하는 것
- 타입캐스트 연산자(Type Cast Operator)는 as? 와 as!가 있음
- 타입캐스트 연산자를 사용하여 자식클래스 타입으로 다운캐스팅할 수 있음
- as?와 as!
- 다운캐스팅에 실패할 가능성이 있다면 as?를 사용하고 만약 다운캐스팅이 실패할 경우 nil을 반환(반환타입이 옵셔널)
- as!를 사용하여 다운캐스팅에 실패할 경우 런타임 오류 발생
- 컴파일러가 다운캐스팅을 확신할 수 있는 경우 as? 나 as! 대신 as를 이용하여 사용
- 항상 성공하는 경우를 아는 경우는 캐스팅하려는 타입이 같은 타입이거나 부모클래스 타입이라는 것을 알고 있는 경우
Any, AnyObject의 타입캐스팅
- Any : 함수 타입을 포함한 모든 타입(옵셔널 타입도 표현)
- AnyObject : 클래스 타입만
- AnyObject는 클래스의 인스턴스만 취할 수 있고, Any는 모든 타입의 인스턴스를 취할 수 있음
'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 |