코드 작성
package ex_polymorphism; public class Test { public static void main(String[] args) { Tv tv = new Tv(); Computer com = new Computer(); Buyer b = new Buyer(); System.out.println("현재 잔액은 " + b.getMoney() + " 원 입니다!"); System.out.println("현재 보너스 포인트는 " + b.getBonusPoint() + " 점 입니다!"); System.out.println("============================================================"); b.cart(com); b.cart(com); b.cart(com); b.cart(com); b.cart(com); b.payment(); } } /* * Buyer 클래스 - 현재 잔액 : 1000 - 보너스 포인트 : 제품을 살 때 마다 제품 금액의 10%를 적립 => 잔액 및 보너스 * 포인트는 Getter 메서드를 사용하여 리턴! - cart() 메서드 => 전달받은 제품을 장바구니에 저장 => 장바구니에는 10개의 * 제품만 담을 수 있도록 설정 만약에 제품이 10개가 담겨 있을 경우 "장바구니가 가득 찾습니다!"를 출력(장바구니 X) 아닐 경우 * 장바구니에 담고, "XXX을/를 장바구니에 담았습니다." 출력 - payment() 메서드 => 장바구니에 품목을 확인하여 잔액에서 가능한 * 만큼만 계산 => "장바구니의 품목은 XXX, XXX, XXX 입니다!" 출력 => 만약에 장바구니의 전체 품목 금액이 현재 잔약보다 많을 * 경우 "현재 잔액으로는 장바구니 품목을 다 살 수 없습니다!" 출력하고 현재 잔액으로 살 수 있는 품목만 출력. ex) * "구입 가능한 품목은 XXX,XXX 입니다!" 구입 가능한 품목의 총 금액을 출력. ex) "품목의 총 금액은 XXX 원 입니다!" => * 구입 가능한 품목만큼 현재 잔액에서 제외 => 장바구니 초기화 * * Tv 금액 : 100 Computer 금액 : 200 * */ class Product { int price; // 품목 금액 String name; // 품목 이름 int bonusPoint; // 품목에 대한 보너스 포인트 public Product(int price, String name) { this.price = price; this.name = name; bonusPoint = price / 10; // 금액의 10% } } class Tv extends Product { public Tv() { super(100, "TV"); } } class Computer extends Product { public Computer() { super(200, "Computer"); } } class Buyer{ // 현재 잔액 private int money = 1000; // 보너스 포인트 // => 바이어에 적립된 변수 private int bonusPoint; // 장바구니에 담을 상품을 저장할 변수 Product[] items = new Product[10]; // => Tv / Computer 담을 수 있는 변수 선언 // items 배열에 사용된 Index int index = 0; // 상품이 새로 추가될 때마다 중복되는 메서드를 작성하지 않기 위해 // 매개변수의 다형성을 적용하여 슈퍼클래스인 Product 클래스를 사용! public void cart(Product product) { // 장바구니가 찼는지 확인 if (index == 10) { System.out.println("장바구니가 가득 찼습니다!"); // 메서드 종료 return; } // items[index] = product; // // 전달받은 품목 저장 // index++; // 위의 문장을 한문장으로 작성 items[index++] = product; money -= product.price; System.out.println(product.name + "을/를 장바구니에 담았습니다." + "남은 공간 : " + (items.length - index) + "칸" + "남은 잔액 : " + money); } public void payment() { // 목록 리스트를 저장할 변수 String itemList = ""; // 품목의 총 금액을 저장할 변수 int sum = 0; money = 1000; // 장바구니의 목록 출력 for (int i = 0; i < index; i++) { itemList += i == 0 ? items[i].name : ", " + items[i].name; } System.out.println("장바구니의 품목은 " + itemList + " 입니다!"); // 구매할 목록 저장할 변수 itemList = ""; // 구매 가능한 품목 확인 및 계산 for (int i = 0; i < index; i++) { // 현재잔액 비교 구매 유무 확인 if (money - items[i].price < 0) { System.out.println("현재 잔액으로는 장바구니 품목을 다 살 수 없습니다!"); break; } sum += items[i].price; // 구매할 품목 금액 누적 // 구매할 품목 리스트 누적 itemList += i == 0 ? items[i].name : ", " + items[i].name; // 현재잔액 - 품목금액 // money -= items[i].price; bonusPoint += items[i].bonusPoint; // 보너스 포인트 누적 } money -= sum; System.out.println("구입 가능한 품목은 " + itemList + " 입니다!"); System.out.println("품목의 총 금액은 " + sum + "원 입니다!"); index = 0; // 장바구니 초기화 } public int getMoney() { return money; } public int getBonusPoint() { return bonusPoint; } }
상속(Polymorphism)을 활용한 연습(유사 쇼핑몰)
출력 결과
현재 잔액은 1000 원 입니다!
현재 보너스 포인트는 0 점 입니다!
============================================================
Computer을/를 장바구니에 담았습니다.남은 공간 : 9칸남은 잔액 : 800
Computer을/를 장바구니에 담았습니다.남은 공간 : 8칸남은 잔액 : 600
Computer을/를 장바구니에 담았습니다.남은 공간 : 7칸남은 잔액 : 400
Computer을/를 장바구니에 담았습니다.남은 공간 : 6칸남은 잔액 : 200
Computer을/를 장바구니에 담았습니다.남은 공간 : 5칸남은 잔액 : 0
장바구니의 품목은 Computer, Computer, Computer, Computer, Computer 입니다!
구입 가능한 품목은 Computer, Computer, Computer, Computer, Computer 입니다!
품목의 총 금액은 1000원 입니다!
나의 소감
이거 완벽하게 구현하는데 반나절 걸렸다....ㅠㅠ
확실히 코드 작성하는 능력도 중요하긴 하나 언어능력 또한 적지않게 필요하다는것을 절실히 느낀 문제였다
다음에 또 연습삼아 만들어 봐야지!
살길은 반복연습밖에 없다!!
'JAVA' 카테고리의 다른 글
final | 22/01/03 (0) | 2022.01.11 |
---|---|
싱글톤(Singleton) 활용 | 21/12/30 (0) | 2022.01.11 |
싱글톤(Singleton) 디자인 패턴 | 21/12/29 (0) | 2022.01.11 |
static, main, instance 생성 시점 차이 | 21/12/29 (0) | 2022.01.11 |
정적(Static) 메서드 | 21/12/29 (0) | 2022.01.11 |