본문 바로가기
Coding

Swift Type Casting(형 변환)에 대해서

by BlissBless 2017. 11. 25.

git hub에서 오픈소스 구경다니다 WordPress for IOS의 Official repository를 봤다.

아직 초보지만 어떻게 되있나 봤다가 is, as가 코드에 유난히 눈에 보이길래 궁금해서 알아봄.

예제도 옮겨 적고 싶은데, 깔끔하게 코드를 가져 오는 방법을 몰라 생략.



● 스위프트의 타입 캐스팅 (형 변환)

스위프트는 데이터 타입 세이프한 언어라 다른 타입의 값 교환을 엄격하게 제한함.

타입 캐스팅이란 말이 다른 언어와 조금 다른 의미로 쓰이는데,


스위프트의 타입 개스팅은 인스턴스의 타입을 확인하거나 자신을 다른 타입의 인스턴스인양 행세 할 수 있는 방법으로 쓰임. (Yagom님 SWIFT 스위프트 프로그래밍 P.331)

is로 값의 타입을 확인 하거나 as로 다른 타입으로 전환 할 수 있음.

AND 

타입캐스팅을 통해 프로토콜을 준수하는지도 확인해 볼 수 있음.



● 2-1 스위프트의 타입 캐스팅 _ 데이터 타입 확인

is로 인스턴스가 어떤 클래스의 인스턴스인지 타입을 확인 해볼 수 있음. 기면 true, 아니면 false 반환.

is 연산자는 클래스의 인스턴스 뿐만 아니라 모든 데이터 타입에 사용할 수 있음.


또 다른 데이터 타입 확인 방법은 메타타입을 이용 하는 방법도 있음



● 2-2 스위프트의 타입 캐스팅 _ 다운 캐스팅

클래스의 상속 모식도에서 자식클래스 보다 더 상위에 있는 부모 클래스의 타입을 자식클래스의 타입으로 캐스팅 한다고 해서, 다운캐스팅이라고 부름.


다운 캐스팅 실패할 가능성이 있음 .as? 와 as! 두가지가 있음.


 

실패 하면?

성공 하면? 

as?

 nil 반환

옵셔널 타입의 인스턴스 반환 

 as!

런터임 오류 ㄱㄱ

(옵셔널 아닌) 인스턴스 반환 



● 타입 캐스팅의 의미.

실질적으로 인스턴스를 수정하거나 값을 변경하는 작업이 아님.

인스턴스는 메모리에서 똑같이 남아 있지만, 이 인스턴스를 사용할 때 어떤 타입으로 접근해야 할지 판단 할 수 있도록 컴퓨터에게 귓속말 해주는 것.


인스턴스를 사랑하는 마음이라고 해보면 (연인이든, 부부든 가족이든)

이 사랑을 표현할 때, 어떤 사람은 말로, 터치나 쓰담쓰담으로 등으로 표현하는 여러 방법이 있을 꺼다.

나는 이런 A를 좋아하지만 상대는 B를 좋아 하니,

B 형태로 내가 사랑을 표현하도록 확인하고 실제로 하는 거라고 생각이 듦.

이과가 아니라 생각나는데로 써봤는데 모르겠다. 맞는 비유(?) 인지는.




참고 출처

http://minsone.github.io/mac/ios/swift-type-casting-summary