본문 바로가기

Tech/iOS

[iOS]Day45 - TypeCasting

728x90

 

 

멍하니 보다 벌써 한주가 끝나가는 중이다

오늘도 달려보자


TypeCasting

인스턴스 타입을 확인하거나 자신의 인스턴스 타입을 다른 타입의 인스턴스인 것 처럼 사용할 때 활용되는 개념

타입 캐스팅 했을 때 실제 인스턴스 타입은 메모리에 남아있다

is는 어떤 클래스의 인스턴스 타입인지 어떤 데이터 타입인지 확인 가능하다

is 예시

is 예시를 보면 부모는 자식을 포함하지만 자식은 다른 자식을 포함하지 않는 관계를 볼 수 있다

 

*DownCasting

부모 클래스 타입을 자식 클래스 타입으로 다운캐스팅 하는 것을 의미

as? 는 옵셔널 반환 타입 다운캐스팅 성공시 인스턴스 반환, 실패할 경우 nil 반환

as! 옵셔널 반환을 하지 않는다 다운캐스팅 성공시 인스턴스 반환, 실패할 경우 런타입 오류 발생

as? 예시

as? 의 경우 다운캐스팅 성공시 인스턴스 반환하는 것을 볼 수 있고 실패시 nil 반환을 하는 것을 볼 수 있다

iphone as! Google 을 한다면 런타입 오류가 발생한다 => 옵셔널 바인딩이 중요한 것을 알 수 있다

 

*Upcasting

Compiler가 캐스팅에 대한 성공을 확신할 경우에 as를 사용한다

일반적으로 부모 클래스를 알고 있을 때 as를 사용

위에서 Class 생성시 부모 Class를 알고 있고 캐스팅에 대한 성공을 확신하기 때문에 as 사용이 가능하다

 

*Any, AnyObject

Any와 AnyObject는 타입을 특정하지 않고 여러 타입의 값을 할당할 수 있다

Any와 함수 타입을 포함한 모든 타입이 가능하다

AnyObject는 클래스 타입만 가능하다

Compile 시점에는 어떤 타입으로 된 멤버를 가지고 있는지 알 수 없다

런타임 시점에 타입이 결정되기 때문에 타입캐스팅을 하지 않으면 각 멤버에 대한 접근이 불가능

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

<FOOCA> 출시 회고  (1) 2022.10.04
[iOS]Day45 - Generic  (0) 2022.08.18
[iOS] Day44 - Storyboard 없이 코드로 UI 설정해보기(Feat. Snapkit)  (0) 2022.08.17
[iOS]Day43 - UIPageViewController  (0) 2022.08.16
[iOS]Day43 - Custom FrameWork  (0) 2022.08.16