티스토리 뷰

[시작]


- Swift는 데이터 타입 안전을 위하여 서로 다른 타입끼리의 값 교환을 엄격하게 제한함

- 암시적 데이터 타입 변환을 지원하지 않음

 : C언어에서의 (int)10.4f와 Swift에서의 Int(10.4)는 서로 같지 않음



[기존 언어의 타입 변환과 스위프트의 타입 변환]


- Swift에서는 기존 값을 전달인자로 받은 생성자를 통해 새로운 타입의 인스턴스를 생성함

- 이를 타입 변환 또는 타입캐스팅이라고 칭하지 않음

- 생성자를 통해 새로운 인스턴스를 생성하는 과정일 뿐임



[스위프트 타입캐스팅]


- Swift의 타입캐스팅은 인스턴스의 타입을 확인하거나 자신을 다른 타입의 인스턴스인 것처럼 가장할 수 있는 방법으로 사용 가능함

- isas 연산자로 구현


- 자식 클래스는 부모 클래스인 것처럼 행할 수 있지만, 부모 클래스는 자식 클래스인 것처럼 행할 수 없다.

 : 부모 클래스의 타입을 갖는 변수에 자식 클래스의 인스턴스를 할당할 수 있음



[데이터 타입 확인]


- 타입 확인 연산자 is를 사용하여 인스턴스가 어떤 클래스 또는 어떤 클래스의 자식 클래스의 인스턴스인지 타입을 확인해볼 수 있음

- 모든 데이터 타입에 사용할 수 있음

1
2
print("Swift" is Int)   //false
print(1234 is Int)      //true
cs


- 메타 타입 타입을 이용하여 타입을 확인할 수도 있음

 : 메타 타입 타입 : 타입의 타입


- 타입의 이름 뒤에 .Type를 붙이면 클래스, 구조체, 열거형의 이름의 메타 타입을 나타냄

- 프로토콜의 이름 뒤에 .Protocol을 붙이면 프로토콜의 이름의 메타 타입을 나타냄


- self를 사용해서 타입을 값처럼 표현할 수 있음

 : 클래스 이름 뒤에 .self를 붙이면 클래스의 인스턴스가 아니라 클래스의 타입을 값으로 표현한 값을 반환함

 : 프로토콜 이름 뒤에 .self를 붙이면 프로토콜을 준수하는 타입의 인스턴스가 아니라 프로토콜을 값으로 표현한 값을 반환함

1
2
let a = 3
type(of: a) == Int.self //true
cs




[다운캐스팅]



1
let actingConstant: Coffee = Latte(flavor: "vanilla", shot: 2)
cs


위의 코드에서 변수는 Coffee 인스턴스를 참조하도록 선언되었으나 Coffee 타입인 척 하는 Latte 타입의 인스턴스를 참조하고 있음.

이 상황에서 변수가 참조하는 인스턴스를 진짜 타입인 Latte 타입으로 사용해야 할 때가 있음

(Latte 타입에 정의되어 있는 프로퍼티나 메서드에 접근하려 할 때)

이 경우 다운캐스팅을 해주어야 함


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

- Any, AnyObject 등에서 다른 타입을 캐스팅 할때도 사용


- 타입캐스트 연산자 as?, as! 

 : as? : 다운캐스팅이 실패하면 nil을 반환, 성공하면 옵셔널 타입으로 인스턴스를 반환

 : as! : 다운캐스팅이 실패하면 런타임 오류 발생, 성공하면 다운캐스팅된 타입의 인스턴스를 반환

 : as : 컴파일러가 다운캐스팅을 확신할 수 있는 경우 사용 가능



[Any, AnyObject의 타입 캐스팅]


- Swift에는 특정 타입을 지정하지 않고 여러 타입의 값을 할당할 수 있는 AnyAnyObject라는 타입이 있음

- Any : 함수 타입을 포함한 모든 타입

- AnyObject : 클래스 타입만


- 프레임워크를 사용할 때 AnyAnyObject로 값이 반환된다면 전달받은 데이터가 어떤 타입인지 확인하고 타입캐스팅을 명시적으로 해주어야 함

'Swift > 야곰의 스위프트' 카테고리의 다른 글

21장 익스텐션  (0) 2018.03.07
20장 프로토콜  (0) 2018.03.01
18장 상속  (0) 2018.02.28
17장 서브스크립트  (0) 2018.02.28
16장 모나드  (0) 2018.02.12
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함