개인 공부

Is와 As의 차이 ( feat. casting )

Machine_웅 2023. 3. 20. 21:19
728x90
반응형

 ① 업캐스팅(Upcasting) 

서브 클래스 인스턴스를 "슈퍼 클래스의 타입"으로 참조한다

업 캐스팅은 항상 성공한다

as 연산자를 사용해서 할 수도 있다 (컴파일 시점에 캐스팅 가능 여부를 결정한다)

 

 

 

as  : "컴파일 시점"에 타입 캐스팅(업캐스팅)을 하며, 실패할 경우 에러가 발생한다. 패턴 매칭(switch)에도 사용한다

 

서브 클래스의 인스턴스를 슈퍼 클래스의 타입으로 참조하는 것을 업캐스팅이라고 함

=> 사용할 수 있는 기능은 업캐스팅된 부분에 한정이됨,  teacher은 person이라는 것을 상속받는다고 할때

업캐스팅을 하면 person의 기능에 한정지어 사용하게됨.

 

 ② 다운캐스팅(Downcasting) 

슈퍼 클래스 인스턴스를 "서브 클래스의 타입"으로 참조한다

업캐스팅된 인스턴스를 다시 원래 서브 클래스 타입으로 참조할 때 사용한다

다운 캐스팅은 실패할 수있기에 as?, as! 연산자를 이용한다

 

 

 as?  : "런타임 시점"에 타입 캐스팅(다운 캐스팅)을 하며, 실패할 경우 nil을 리턴

 as!  : "런타임 시점"에 타입 캐스팅(다운 캐스팅)을 하며, 실패할 경우 에러 발생

 

 

 

C#에서  ( obj )  로 형변환을 하는경우 => 런타임시에러가 발생.

as를 이용하게되면, null을 반환하게 됨.

728x90
반응형