본문 바로가기

Java의 정석

매개변수의 다형성

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

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