tuter77

Java : 다운 캐스팅, instanceOf 본문

JavaStudy

Java : 다운 캐스팅, instanceOf

tuter77 2023. 1. 29. 20:23

▷DownCasting

- 업캐스팅 된 클래스를 다시 원래의 타입으로 형 변환

- 하위 클래스로의 형 변환은 명시적으로 해야한다.

 

예시) Customer vc  =  new VIPCustomer(); //묵시적

VIPCustomer vCustomer = (VIPCustomer)vc; //명시적

 

 instanceof 키워드

해당 instance의 타입을 확인해 인스턴의 형이 맞으면 true, 아니면 false를 반환한다.

 

예시) 

		
        Customer customerE = new GoldCustomer(10030, "Edward");
       
        if(customerE instanceof GoldCustomer) {
			GoldCustomer vc = (GoldCustomer)customerE;
			System.out.println(customerE.showCustomerInfo());
		}

위의 예시에서 보면 instanceof라는 키워드를 사용하여 customerE가 원래 GoldCustomer 인지를 확인한다.

 

다른 예시를 보면 아래와 같다.

//arraylist를 매개변수로 주어서 다운캐스팅하는 것 구현.
	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 변수가 animal 타입에서 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");
			}
		}
	}

 

기존의 animal 예제에서 각 하위클래스 인스턴스들이 업캐스팅 되어있었는데(상위클래스 animal로) instanceof 키워드를 활용하여 다운캐스팅을 명시적으로 해놓은 코드이다.

인스턴스의 타입이 변했기 때문에 각 하위 클래스의 고유 메서드도 잘 사용되는것을 확인할 수 있다.

 

위 내용은 2023.01.06에 공부한 내용입니다.

링크 : https://dudwls3278.tistory.com/37