Java - 매개변수의 다형성, 여러 종류의 객체를 배열로 다루기

춤추는개발자·2022년 11월 23일
0

Java 정리

목록 보기
16/59

매개변수의 다형성

  • 참조형 매개변수는 메서드 호출시에 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.

여러 종류의 객체를 배열로 다루기

  • 조상타입의 배열에 자손들의 객체를 담을 수 있다.

매개변수의 다형성과 여러 종류의 객체를 배열로 다루는 예시 코드 만들어보기

class Product{                                                                                                         
    int price;                                                                                                         
    int bonusPoint;                                                                                                    
                                                                                                                       
    Product(int price){                                                                                                
        this.price = price;                                                                                            
        this.bonusPoint = (int)(price/5.0); // this 생략 가능 , 보너스 포인트 가격의 5퍼센트 주기                                        
                                                                                                                       
    }                                                                                                                  
}                                                                                                                      
class TvPro extends Product {                                                                                          
    TvPro() {                                                                                                          
        super(300);                                                                                                    
    }                                                                                                                  
                                                                                                                       
    @Override                                                                                                          
    public String toString() {                                                                                         
        return "tv";                                                                                                   
    }                                                                                                                  
}                                                                                                                      
class ComputerPro extends Product{                                                                                     
    ComputerPro() {                                                                                                    
        super(500);                                                                                                    
    }                                                                                                                  
                                                                                                                       
    @Override                                                                                                          
    public String toString(){                                                                                          
        return "computer";                                                                                             
    }                                                                                                                  
}                                                                                                                      
class Buyer{                                                                                                           
    private int money = 1000;                                                                                          
    private int point = 0;                                                                                             
                                                                                                                       
    Product[] cart = new Product[10]; // 구입한 물건을 저장하기 위한 배열                                                            
    int i = 0;                                                                                                         
    void buy(Product p){                                                                                               
        if(p.price > money){                                                                                           
            System.out.println("가지고 있는 금액이 부족해 물건을 구매할 수 없습니다.");                                                      
        }else if(p.price <= money) {                                                                                   
            money -= p.price;                                                                                          
            point += p.bonusPoint;                                                                                     
            cart[i++] = p;                                                                                             
            System.out.println("구매하신 제품은 " + p.toString() + "입니다.");                                                   
            System.out.println("현재 남은 금액은 " + money + "원 입니다.");                                                       
            System.out.println("현재 포인트는 " + point + "점 입니다.");                                                         
        }                                                                                                              
    }                                                                                                                  
    void cartList(){                                                                                                   
        int sum = 0;                                                                                                   
        String productList = ""; //  구매 리스트                                                                            
        for(int i=0; i< cart.length; i++){                                                                             
            if(cart[i]!= null){                                                                                        
                productList+=cart[i].toString()+",";                                                                   
                sum+= cart[i].price;                                                                                   
            }else if(cart[i]==null){ // null 이면 cart에 물건이 안담겨 있으니까 break 한다.                                           
                break;                                                                                                 
            }                                                                                                          
        }                                                                                                              
        productList = productList.substring(0,productList.length()-1); // 마지막 구매 리스트 문자열에서 "," 제거하기                    
        System.out.println("구입한 물건의 리스트는 "+productList+" 입니다.");                                                       
        System.out.println("구입한 물건의 총 가격 합계는 : "+sum+"원 입니다.");                                                        
    }                                                                                                                  
                                                                                                                       
}                                                                                                                      
                                                                                                                       
public class JavaExercise_37 { // 매개변수의 다형성, 여러 종류의 객체를 배열로 다루기                                                        
    public static void main(String[] args) {                                                                           
        Buyer buyer = new Buyer();                                                                                     
      //  Product p = new TvPro();                                                                                     
      //  buyer.buy(p);     이 두 코드가 아래의  buyer.buy(new TvPro()); 코드와 같다.                                               
        buyer.buy(new TvPro());                                                                                        
        buyer.cartList();                                                                                              
        buyer.buy(new ComputerPro());                                                                                  
        buyer.cartList();                                                                                              
        buyer.buy(new ComputerPro());                                                                                  
        buyer.cartList();                                                                                              
    }                                                                                                                  
}                                                         

출력 결과 : 
구매하신 제품은 tv입니다.
현재 남은 금액은 700원 입니다.
현재 포인트는 60점 입니다.
구입한 물건의 리스트는 tv 입니다.
구입한 물건의 총 가격 합계는 : 300원 입니다.
구매하신 제품은 computer입니다.
현재 남은 금액은 200원 입니다.
현재 포인트는 160점 입니다.
구입한 물건의 리스트는 tv,computer 입니다.
구입한 물건의 총 가격 합계는 : 800원 입니다.
가지고 있는 금액이 부족해 물건을 구매할 수 없습니다.
구입한 물건의 리스트는 tv,computer 입니다.
구입한 물건의 총 가격 합계는 : 800원 입니다.

위 코드는 매개변수의 다형성을 이용해 Buyer 클래스에 buy 메서드의 입력 매개변수에 다형성을 이용하여 Product 클래스의 자손 객체들을 입력으로 넣어 입력 객체에 따라서 구입하는 품목과 거스름돈,포인트를 계산하는 프로그램 입니다. 그리고 Buyer 클래스 내에 Prouduct 타입의 배열을 만들어 구입한 객체를 저장해 cartList() 메서드를 이용해 현재까지 구매한 제품과 제품의 총 가격을 출력하는 프로그램을 만들었습니다.

0개의 댓글