giggs 2022. 1. 4. 11:26

다운 캐스팅(downcasting)

  • 업 캐스팅된 클래스를 다시 원래의 타입으로 형 변환
  • 하위 클래스로의 형 변환은 명시적으로 해야 함
Customer vc = new VIPCustomer();              //묵시적
VIPCustomer vCustomer = (VIPCustomer)vc;      //명시적

 

명시적으로 할 때 직접적으로 변환 방법 X,

instanceof를 이용하여 체크한 후 변환 O

 


 

instanceof를 이용하여 인스턴스의 형 체크

 

  • 원래 인스턴스의 형이 맞는지 여부를 체크하는 키워드 맞으면 true 아니면 false를 반환함

 

44번 라인 - 오류 표시는 변수 vc 2번 정의했다는 오류 

40번 라인 - 컴파일 오류는 안남, 하지만 작동 시 오류

 


 

 

실습 ----

 

arraylist로 입력된 값들 불러다가

instanceof로 인스턴스 형 확인 후 변형

출력 값 확인

 

  

 

 

 


 

 

 

 

review
다운 캐스팅 / instanceof 체크 후 형 변환
다운 캐스팅을 왜 하느냐?
상위 클래스의 타입형으로 선언되면 상위 클래스에 있는 속성과 메서드만 사용 가능하다.
타입형이 아닌 인스턴스 형의 메서드가 적용되는 개념이 계속 적용!
직접 형 변환을 해주면 오류 발생 가능성 커짐, instanceof로 체크 후 형 변환!

다운 캐스팅을 할 경우가 안 생기도록 하는게 제일 best라는 생각이 들었다. 
어쩔 수 없는 상황이 생기겠지?ㅎㅎ
상위 클래스 타입형으로 핸들링하는 게 편해서 묶은 다음에
따로 다운 캐스팅을 해서 인스턴스의 메서드를 사용하는 것이라고 이해
형 변환 시에도 잘 입력하면 될 거 같은데
굳이 instanceof와 if를 써서 하는 부분에서는
java가 안정성을 중요시하는구나를 느꼈고,
화면에 보이는 컴파일 오류가 없어도 실행 과정에서 오류가 날 수 있구나도 알았다.
체크해서 오류를 방지할 수 있다면 해야지
프로그램 다운될 수 있는 상황이 발생한다면 Oh NOOO