멍하니 보다 벌써 한주가 끝나가는 중이다
오늘도 달려보자
TypeCasting
인스턴스 타입을 확인하거나 자신의 인스턴스 타입을 다른 타입의 인스턴스인 것 처럼 사용할 때 활용되는 개념
타입 캐스팅 했을 때 실제 인스턴스 타입은 메모리에 남아있다
is는 어떤 클래스의 인스턴스 타입인지 어떤 데이터 타입인지 확인 가능하다
is 예시를 보면 부모는 자식을 포함하지만 자식은 다른 자식을 포함하지 않는 관계를 볼 수 있다
*DownCasting
부모 클래스 타입을 자식 클래스 타입으로 다운캐스팅 하는 것을 의미
as? 는 옵셔널 반환 타입 다운캐스팅 성공시 인스턴스 반환, 실패할 경우 nil 반환
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 |