다형성의 개념을 통해 조상타입의 참조변수로 자손타입의 객체를 참조하는 게 가능하단 걸 배웠다.
Product p1 = new Tv();
Product p2 = new Computer();
Product p3 = new Audio();
Product클래스가 Tv, Computer, Audio클래스의 조상클래스 즉, 서로가 상속관계일 때 위와같은 코드 작성이 가능하다. 위의 코드를 그림으로 나타내면 다음과 같다. 그림을 보면 코드를 이해하기 쉽다.
위의 코드를 Product타입의 참조변수 배열로 처리하면 다음과 같다.
Product p[] = new Product[3];
p[0] = new Tv();
p[1] = new Computer();
p[2] = new Audio();
코드만 봐서는 와닿지가 않는다. 아까와 같은 방식으로 그림을 그려보자.
위의 두 코드를 단순히 배열이 쓰였다는 것에 시선을 맞추면 둘의 차이를 이해하기 쉽지 않다. 하지만 코드를 그림을 통해 나타내면 같은 배열을 사용했지만 확실하게 다른 코드란 걸 알 수 있다. 이처럼 조상타입의 참조변수 배열을 사용하면, 공통의 조상을 가진 서로 다른 종류의 객체를 배열로 묶어서 다룰 수 있다. 코드의 예시를 통해 개념을 익혀보도록 하겠다.
class Buyer {
int money = 1000;
int bonusPoint = 0;
Product[] cart = new Product[10]; // 구입한 제품을 저장하기 위한 배열(카트)
int i = 0; // Product배열 cart에 사용될 index
void buy(Product p) {
if(money < p.price) {
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money -= p.price; //가진 돈에서 제품가격을 뺀다.
bonusPoint += p.bonusPoint; // 제품의 보너스포인트를 더한다.
cart[i++] = p; // 제품을 Product[] cart에 저장한다.
System.out.prinln(p + "을/를 구입하셨습니다.");
}
}
출처: 자바의 정석 기초편(저자: 남궁성, 출판사: 도우출판)
'java > 객체지향' 카테고리의 다른 글
[객체지향] 인터페이스 (0) | 2021.07.19 |
---|---|
[객체지향] 추상 클래스 (0) | 2021.07.16 |
[객체지향] 다형성(polymorphism) (0) | 2021.07.15 |
[객체지향] 제어자 (0) | 2021.07.14 |
[객체지향] super와 super() (0) | 2021.07.14 |