본문 바로가기
Programming Language/Java

[자바] 다형성 - (2) 다형성의 활용과 다운 캐스팅, instanceof

by ggyongi 2021. 10. 23.
반응형

- 다형성 활용

일반 고객과 VIP 고객 사이의 중간 등급 만들기

 

GOLD 고객의 조건

- 제품을 살 때 10% 할인

- 보너스 포인트를 2% 적립

- 담당 전문 상담원 없음

 

결과는 다음과 같다.

package first_project;

public class GoldCustomer extends Customer{

	double saleRatio;
	
	public GoldCustomer(int customerId, String customerName) {
		super(customerId, customerName);
		customerGrade = "GOLD";
		bonusRatio = 0.02;
		saleRatio = 0.1;
				
	}

	@Override
	public int calcPrice(int price) {
		bonusPoint += price * bonusRatio;
		return price - (int)(price*saleRatio);
	}
	
}

 

 

- 다운 캐스팅

우리는 앞서 상위 클래스로 형 변환이 묵시적으로 이루어지는 것을 배웠다. 

Animal ani = new Human();의 경우 인스턴스 Human은 Animal로 형 변환이 이루어지기 때문에

Animal 클래스에서 선언한 메서드와 멤버 변수만 사용 가능하다. 

필요에 따라 다시 원래의 인스턴스형 Human형으로 돌아가 더 많은 기능을 사용할 필요가 있을 수 있다.

이렇게 상위 클래스로 형 변환 되었던 하위 클래스를 원래 자료형으로 형 변환하는 것을 다운 캐스팅이라고 한다. 

 

- instanceof

모든 인간은 동물이지만, 모든 동물이 인간인 것은 아니다.

따라서 다운 캐스팅을 하기 전에 상위 클래스로 형 변환된 인스턴스의 원래 자료형을 확인해야 오류를 막을 수 있다.

이를 위한 예약어가 instanceof이다.

 

- instanof 사용법

instanceof는 왼쪽에 있는 변수의 원래 인스턴스형이 오른쪽 클래스 자료형인가를 확인한다. true or false를 반환.

Animal hAnimal = new Human();
if(hAnimal instanceof Human){  //hAnimal 인스턴스 자료형이 Human형이라면
    Human human = (Human) hAnimal; //인스턴스 hAnimal을 Human형으로 다운 캐스팅
}

다운 캐스팅된 이후에는 각각의 클래스에 선언된 메서드를 호출 가능해짐.

 

 

- 사용 예시

package first_project;

class Animal{
	public void move() {
		System.out.println("animal moves.");
	}
}

class Human extends Animal{
	public void move() {
		System.out.println("A man walks.");
	}
	
	public void readBook() {
		System.out.println("A man read a book.");
	}
}

public class AnimalTest {

	public static void main(String[] args) {

		Animal ani = new Human();  // 상위 클래스로 형 변환. 
		ani.move();                // 오버라이딩된 move가 호출됨.
		
		if(ani instanceof Human) {
			Human h = (Human) ani;  // Human형으로 다운 캐스팅
			h.readBook();			// 이제 Human 클래스 안의 readBook() 메서드를 실행할 수 있게 됨
		}else{
			System.out.println("지원되지 않는 형입니다.");
		}		
	}
}

결과

A man walks.
A man read a book.
 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글