참조변수의 다형적인 특징은 메서드의 매개변수에도 적용된다.
class Product {
int price;
int bonusPoint;
}
class Phone extends Product {}
class Computer extends Product {}
class Buyer {
int money = 1000;
int bonusPoint = 0;
void buy(Phone p) {
money = money - p.price;
bonusPoint = bonusPoint + p.bonusPoint;
}
void buy(Computer c) {
money = money - c.price;
bonusPoint = bonusPoint + c.bonusPoint;
}
}
위의 코드에서 Product 클래스는 Phone과 Computer 클래스의 조상이며 Buyer 클래스는 Product를 구입하는 사람을 클래스로 표현한 것이다.
Buyer 클래스에 물건을 구입하는 기능의 메서드를 추가해보자면 구입할 대상을 매개변수로 받아서 그 제품에 대한 price를 빼고 bonusPoint를 추가한다.
여기서 문제는 제품이 늘어날수록 buy 메서드 또한 늘어나게 되는 것이다.
위 문제를 해결하기 위해 메서드의 매개변수에 다형성을 적용하면 buy 메서드를 아래 코드와 같이 처리할 수 있다.
void buy(Product p) {
money = money - p.price;
bonusPoint = bonusPoint + p.bonusPoint;
}
매개변수가 Product타입의 참조변수라는 것은 메서드의 매개변수로 Product클래스의 자손타입의 참조변수면 어느 것이나 매개변수로 받아들일 수 있다는 뜻이다.
때문에 매개변수로 Phone인스턴스와 Computer인스턴스를 제공하는 것이 가능하다.
'Java의 정석' 카테고리의 다른 글
추상 클래스(abstract class) (0) | 2022.04.14 |
---|---|
객체를 배열로 다루기 (0) | 2022.04.13 |
instanceof 연산자 (0) | 2022.04.11 |
참조변수의 형변환 (0) | 2022.04.08 |
다형성(polymorphism) (0) | 2022.04.07 |