728x90
|
타입캐스팅 (Type casting)
- 스위프트는 다른 타입끼리의 값 교환을 엄격히 제한한다.
- 암시적 데이터 타입 변환 지원 x
생성자를 통해 새로운 인스턴스 생성
- Int(실수형) 처럼 생성자를 통해 다른 타입의 인스턴스를 새로 생성할 수 있다.
- 타입 캐스팅, 타입 변환과는 다른 개념이다.
import Foundation
var number_integer : Int = 5
var number_double : Double = Double(number_integer)
print(number_double)
/* 결과
5.0
*/
스위프트의 타입 캐스팅
- 인스턴스의 타입을 확인 or 자신을 다른 타입의 인스턴스인양 행세할 수 있는 방법으로 사용 가능
- is, as 연산자 사용
1. is 연산자
- 인스턴스의 타입을 확인할 수 있다.
- '인스턴스 is 타입 클래스' 형태로 사용해서 해당 클래스의 인스턴스 혹은 해당 클래스의 자식 클래스의 인스턴스라면 true 반환
- '메타 타입' 타입을 이용해서도 타입을 확인할 수 있다.
- type(of:) 메서드를 통해서 타입 확인 가능
import Foundation
var number_integer : Int = 5
print(number_integer is Int)
print(type(of: number_integer))
/* 결과 :
true
Int
*/
2. as 연산자
- 다운캐스팅 : 부모클래스의 타입을 자식클래스로 캐스팅하는 것
- 항상 실패의 여지가 따르기에 as?, as! 두가지 타입캐스팅 연산자가 존재한다.
- 다운캐스팅은 항상 가능한 것이 아닌 업캐스팅한 것을 다시 다운캐스팅하는 경우에 사용하는 것
- as? : 다운캐스팅에 실패한 경우 nil을 반환한다.
- 조건부 연산자
- 반환타입 : 옵셔널 o
- as! : 다운캐스팅에 실패할 경우 런타임 오류 발생
- 다운캐스팅을 강제한다.
- 반환타입 : 옵셔널 x
- 컴파일러가 항상 다운캐스팅을 확신할 수 있는 경우라면 as를 사용할 수 있다.
- 같은 타입으로 캐스팅하는 경우
- 부모클래스 타입으로 캐스팅하는 경우
import Foundation
class Job {
var name : String
init(name : String) {
self.name = name
}
}
class Programmer : Job {
}
var p1 = Programmer(name: "p1")
guard let j1 = p1 as? Job else {
fatalError()
}
print("업캐스팅 : "+j1.name)
guard let p2 = j1 as? Programmer else {
fatalError()
}
print("다운캐스팅 : "+p2.name)
/* 결과 :
p1
p1
*/
728x90
'Swift' 카테고리의 다른 글
[Swift] 구조체와 클래스 (0) | 2020.12.28 |
---|---|
[Swift] 범위 연산자 (0) | 2020.12.28 |
[Swift] 메서드 (Method) (0) | 2020.12.26 |
[Swift] 프로퍼티 (Property) (0) | 2020.12.26 |
[Swift] Extension (0) | 2020.12.26 |
댓글