본문 바로가기

Java/본격 Java 클래스

[Java] 실습 - 사과 판매1

과일 판매자 : fruitSeller

 - 멤버 변수 : 사과개수(numOfApple), 매출액(myMoney), 가격(APPLE_PRICE)

 - 메소드 : 판매(saleApple()), 현황보기(showSaleResult())

 

과일 구매자 : fruitBuyer

 - 멤버 변수 : 사과개수(numOfApple), 사과 살 돈(myMoney)

 - 메소드 : 구매(buyApple()), 현황보기(showBuyResult())

 

제어 : FruitSaleMain1

 - fruitSeller와 fruitBuyer 클래스의 인스턴스를 생성하여 사과구매를 실행시킴

 - 구매 후 판매자와 구매자의 현황을 확인

.

.

예제

class FruitSeller
{
	int numOfApple = 20; // 보유 사과 개수
	int myMoney = 0; // 매출액
	final int APPLE_PRICE = 1000; // 사과 가격

	public int saleApple(int money){
		// 사과 판매 메소드 : 사과값을 매개변수로 가져옴
		int num = money / APPLE_PRICE;
		numOfApple -= num; // 판매되는 사과개수만큼 보유개수에서 차감.
		myMoney += money; // 사과값을 매출액에 추가
		return num; // 사과값에 해당하는 사과개수를 리턴
	}

	public void showSaleResult(){
		// 판매현황 보기 메소드
		System.out.println("남은 사과 : " + numOfApple);
		System.out.println("판매 수익 : " + myMoney);
	}
}

class FruitBuyer
{
	int numOfApple = 0; // 구매한 사과개수
	int myMoney =  5000; // 사과 구매 금액

	public void buyApple(FruitSeller seller, int money){
		// 사과 구매 메소드로 판매자(seller)와 구매금액(money)을 매개변수로 가짐
		numOfApple += seller.saleApple(money);
		// 지정한 판매자에게 money만큼의 사과를 구매하여 사과개수를 늘림
		// saleApple()메소드를 buyApple()메소드에서 실행 시키는 것은
		// 반드시 판매(saleApple())와 구매(buyApple())가 같이 동작해야 하므로
		myMoney -= money;
		// 사과를 구매한 만큼 금액 차감
	}

	public void showBuyResult(){
		// 구매 현황 보기 메소드
		System.out.println("사과 개수 : " + numOfApple);
		System.out.println("현재 잔액 : " + myMoney);
	}
}

class FruitSalesMain1 
{
	public static void main(String[] args) 
	{
		FruitSeller seller = new FruitSeller();
		// FruitSeller 형 인스턴스 seller 선언 및 생성
		// 사과 판매자 인스턴스를 1개 생성
		FruitBuyer buyer = new FruitBuyer();
		//FruitBuyer 형 인스턴스 buyer 선언 및 생성
		// 사과 구매자 인스턴스를 1개 생성

		buyer.buyApple(seller, 2000);
		// buyer 인스턴스의 buyApple() 메소드 실행.
		// 사과 구매액(2000)을 갖고 판매자(seller)에게 가서 사과 구매를 시도.

		System.out.println("과일 판매자 현황");
		seller.showSaleResult();
		System.out.println("과일 구매자 현황");
		buyer.showBuyResult();
	}
}


문제점
 - 판매자나 구매자의 인스턴스를 여러개 만들어도 모두 동일한 데이터를 갖게 됨.
  ex) 보유사과 20개에 단가 1000원인 판매자들이 생성됨.
  모든 인스턴스의 멤버변수 값이 동일하다는 것을 의미

해결책
 - 인스턴스의 멤버변수 값을 각기 다르게 지정할 수 있어야 함.

728x90
반응형