프로그래밍/JAVA

[ JAVA ] 다형성 - 매개변수의 다형성, 여러 종류의 객체 배열

리신 2022. 10. 27. 20:53
반응형

1. 매개변수의 다형성

참조변수의 다형적인 특징은 메서드의 매개변수에도 적용된다.

예제로 알아보자!

 

💎예제💎

class Product {
	int price;
    int bonusPoint;
}

class TV extends Product{}
class Computer extends Product{}
class Audio extends Product{}

class Buyer {
	int money = 1000;
    int bonusPoint = 0;
}

위 코드를 보면 Product클래스는 TC,Audio,Computer클래스의 부모클래스이며,

Buyer 클래스는 제품을 구입하는 사람을 클래스로 표현한 것이다.

 

여기서 Buyer 클래스에 물건을 구입하는 기능의 메서드를 추가해보자!

구입할 대상이 필요하므로 매개변수로 구입하 제품을 넘겨받아야 한다.

 

만약 TV를 살 수 있도록 매개변수를 TV타입으로 한다면!

void buy(TV t){
	// Buyer가 가진 돈에서 제품의 가격을 뺸다
	money = money - t.price;
    
    // Buyer이 가진 포인트에서 제품의 포인트를 더한다.
    bonusPoint = bonusPoint+ t.bonusPoint
}

위 코드를 작성하면 이제 물건을 구입하는 기능을 실행 할 수 있다.

하지만! TV 밖에 사지 못하니..

난 Computer도 Audio도 사고 싶은데..

void buy(Computer c){
	// Buyer가 가진 돈에서 제품의 가격을 뺸다
	money = money - c.price;
    
    // Buyer이 가진 포인트에서 제품의 포인트를 더한다.
    bonusPoint = bonusPoint+ c.bonusPoint
}

 

🙄매개변수만 바꿔서 computer도 살 수 있게 기능이 같은 매소드를 만들면 될까?

→ 절대 안됨!!

왜? 이렇게 코드를 짜면 제품의 종류가 늘어날 때마다 같은 기능을 하는 메소드를 계속적으로 만들어야한다.

코드의 중복은  절대 용납 못행~

 

😅그러면 어떻게 하라구❗❔

void buy (Product p) {
	// Buyer가 가진 돈에서 제품의 가격을 뺸다
	money = money - p.price;
    
    // Buyer이 가진 포인트에서 제품의 포인트를 더한다.
    bonusPoint = bonusPoint + p.bonusPoint
}

이렇게 하나의 메서드로 간단히 처리 할 수 있다!

 


2. 여러 종류의 객체 배열 다루기

부모 타입의 참조변수로 자식타입의 객체를 참조하는 것이 가능하므로,

Product클래스가 TV, Computer, Audio 클래스의 부모일 때, 다음과 같이 할 수 있다는 것을 배웠다!

 

Product p1 = new TV();
Product p2 = new Computer();
Product p3 = new Audio();

위 코드를 Product타입의 참조변수 배열로 처리하면 아래 코드와 같다.

Product p[] = new Product[3];
p[0] = new TV();
p[1] = new Computer();
p[2] = new Audio();

 

* 참고 : Java의 정석

 

반응형