java/객체지향

[객체지향]여러 종류의 객체를 배열로 다루기

각시탈코더 2021. 7. 16. 15:26

 다형성의 개념을 통해 조상타입의 참조변수로 자손타입의 객체를 참조하는 게 가능하단 걸 배웠다.

 

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 + "을/를 구입하셨습니다.");
     }
}

 

 

출처: 자바의 정석 기초편(저자: 남궁성, 출판사: 도우출판)