Burninghering's Blog
article thumbnail

1. 다운 캐스팅(downcasting)

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

 

1->에러발생->2 실행->3과 같은 에러 발생(Gold이니 VIP로는 할 수 없다)

 

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

instanceof : 원래 인스턴스의 형이 맞는지 확인해주는 키워드 맞으면 true 아니면 false를 반환 함

 

아무런 결과도 나오지 않는다

 

오우~ YES

 

animal을 ArrayList에 다 넣어놨는데,ArrayList를 매개변수로 주면서 다운캐스팅 하는 메소드 구현해보기

		//메인 메소드 안에 Test 코드 구현
		AnimalTest test = new AnimalTest();
		test.testDownCasting(animalList);
	}
		//목표 메소드 구현
		
		public void testDownCasting(ArrayList<Animal> list) {
			for(int i=0;i<list.size();i++) {
				Animal animal=list.get(i);
				
				if (animal instanceof Human) {
					Human human = (Human)animal;
					human.readBook();
				}
				else if (animal instanceof Tiger) {
					Tiger tiger = (Tiger)animal;
					tiger.hunting();
				}
				else if (animal instanceof Eagle) {
					Eagle eagle =(Eagle)animal;
					eagle.flying();
				}			
				else { //만약 다른 형이 온다면
					System.out.println("unsupported Type");
				}
			}
		}

위 결과는 다형성 결과 / 아래는 다운캐스팅(원래의 타입으로 돌아감) 결과

 

 

3. 결론 

다운캐스팅을 하면 

위 코드와 같이 코드가 많이 지저분해지고, 각 타입으로 되돌려야 하고

할 수 있다면 다형성으로 오버라이딩 하는 것이 깔끔하지만,

반드시 원래 타입으로 되돌려야 한다면 instanceof를 사용하자

profile

Burninghering's Blog

@개발자 김혜린

안녕하세요! 반갑습니다.