상품 구매 및 반품 프로그램을 위한 class 작업을 통해 배운 것을 익혀보자
Product, SmartTV, Notebook, HandPhone, Buyer, Order 총 6개의 클래스를 만들고 SmartTV, Notebook, HandPhone 클래스는 Product 클래스를 상속 받게 할 것이다.
각 클래스에는 가격과 보너스포인트, 상품명의 정보를 담을 것이다.
Product.java
package oop0919;
public class Product extends Object { //extends Object 생략가능
public int price; //상품 가격
public int bonusPoint; //마일리지
public Product() {} //default constructor
public Product(int price) {
this.price = price; //this.멤버변수 = 지역변수
//상품가격의 10%를 보너스 점수 책정
this.bonusPoint = (int)(price*0.1);
}//end
}//class end
class SmartTV extends Product {
public SmartTV() {
super(100); //상품가격 price = 100 bonusPoint = 10
}
@Override
public String toString() {
return "스마트TV"; //상품명
}
}//class end
class Notebook extends Product {
public Notebook() {
super(200); //상품가격 price = 200 bonusPoint = 20
}
@Override
public String toString() {
return "노트북"; //상품명
}
}//class end
class HandPhone extends Product {
public HandPhone() {
super(150); //상품가격 price = 150 bonusPoint = 15
}
@Override
public String toString() {
return "핸드폰"; //상품명
}
}//class end
Test01_buyer.java
package oop0919;
public class Test01_buyer {
public static void main(String[] args) {
// 상품 구매 및 반품 프로그램
//1)상품 만들기
//-> Product 클래스
//-> SmartTV 클래스
//-> Notebook 클래스
//-> HandPhone 클래스
//2)상품 진열하기
SmartTV tv = new SmartTV();
Notebook note = new Notebook();
HandPhone phone = new HandPhone();
//3)상품 구매하기
//->Buyer 클래스
Buyer kim = new Buyer();
kim.buy(tv);
kim.buy(note);
kim.buy(phone);
}//main() end
}//class end
이제 상품 구매를 위한 Buyer 클래스를 만들어보자
Buyer.java
package oop0919;
//상품 구매 관련 클래스
public class Buyer {
private int myMoney = 1000; //나의 총 재산
private int myMileage = 0; //나의 마일리지 점수(bonusPoint 누적)
private int i = 0;
//상품을 구매했을 때 어떤 상품을 구매했는지 저장(나의 구매상품 목록)
}//class end
이제 상품을 구매했을 때 어떤 상품을 구매했는지 배열에 저장하고자 한다. 이때 배열의 자료형을 Product로 하면 나머지 상품 클래스들이 Product의 상속을 받기 때문에 모두 배열에 저장할 수 있다.
package oop0919;
//상품 구매 관련 클래스
public class Buyer {
private int myMoney = 1000; //나의 총 재산
private int myMileage = 0; //나의 마일리지 점수(bonusPoint 누적)
private int i = 0;
//상품을 구매했을 때 어떤 상품을 구매했는지 저장(나의 구매상품 목록)
Product[] item = new Product[10];
/*
Product
+------------+-------------+-------------+--
| SmartTV | Notebook | Handphone | ~~
+------------+-------------+-------------+--
item[0] item[1] item[2] ~~
*/
public Buyer() {}
/*
메소드 오버로딩(함수명 중복 정의)
public void buy(SmartTV a) {}
public void buy(Notebook a) {}
public void buy(HandPhone a) {}
*/
public void buy(Product p) { //다형성
if (p.price>this.myMoney) {
System.out.println("잔액이 부족합니다!!");
return;
}//if end
//Product -> SmartTV, Notebook, HandPhone 클래스의 부모 클래스
item[i++] = p; //구매상품 저장
this.myMoney = this.myMoney - p.price; //나의 재산은 감소
this.myMileage = this.myMileage + p.bonusPoint; //나의 마일리지는 증가
}//buy() end
public void disp() {
System.out.println("나의 남은 재산 : " + this.myMoney);
System.out.println("나의 마일리지 : " + this.myMileage);
}//disp() end
}//class end
이어서 반품에 관려된 클래스도 만든다.
Order.java
package oop0919;
import java.util.Vector;
//상품 구매 관련 클래스
public class Order {
private int myMoney = 1000; //나의 총 재산
private int myMileage = 0; //나의 마일리지 점수(bonusPoint 누적)
//상품을 구매했을 때 어떤 상품을 구매했는지 저장(나의 구매상품 목록)
private Vector<Product> item = new Vector<>();
public Order() {}
public void buy(Product p) {
if (p.price>this.myMoney) {
System.out.println("잔액이 부족합니다!!");
return;
}//if end
item.add(p); //구매상품 저장
this.myMoney = this.myMoney - p.price; //나의 재산은 감소
this.myMileage = this.myMileage + p.bonusPoint; //나의 마일리지는 증가
}//buy() end
public void disp() {
if(item.isEmpty()) {
System.out.println("구매상품 없음!!");
return;
}//if end
//구매한 상품 목록
StringBuilder shoplist = new StringBuilder();
//사용금액
int hap = 0;
for(int n=0; n<item.size(); n++) {
Product p = item.get(n); //상품 하나씩 가져오기
shoplist.append(p.toString() + " "); //상품명
hap = hap + p.price;
}//for end
System.out.println("구매 상품 목록 : " + shoplist);
System.out.println("사용 금액 : " + hap);
System.out.println("나의 남은 재산 : " + this.myMoney);
System.out.println("나의 마일리지 : " + this.myMileage);
}//disp() end
public void refund(Product p) {
if(item.remove(p)) {
System.out.println(p.toString() + "반품되었습니다~");
this.myMoney = this.myMoney + p.price;
this.myMileage = this.myMileage - p.bonusPoint;
} else {
System.out.println("구매내역에 상품이 없습니다!!");
}//if end
}//refund() end
}//class end
Test01_buyer.java
//4)반품하기
//->Order 클래스
//->(Buyer 클래스 복사해서 수정)
//->상품을 중복해서 구매하지 않았다는 전제
Order lee = new Order();
lee.buy(tv);
lee.buy(note);
lee.buy(phone);
lee.disp();
System.out.println("<<<<<반품");
lee.refund(note);
System.out.println("<<<<<결과");
lee.disp();
}//main() end
}//class end
'웹개발 교육 > Java' 카테고리의 다른 글
[37일] Java (49) - File 클래스 (0) | 2022.09.19 |
---|---|
[37일] Java (48) - Thread (0) | 2022.09.19 |
[36일] Java (46) - generic (0) | 2022.09.16 |
[36일] Java (45) - Set, Map (0) | 2022.09.16 |
[36일] Java (44) - List (0) | 2022.09.16 |