Java

[예제] 객체 간 협력

hs_developer 2022. 3. 23. 16:53

 

출근 길 커피 사기

 

아침 출근 길에 A씨는 4000원을 내고 별 다방에서 아메리카노를 사마셨다.

B씨는 콩 다방에서 4500원을 내고 라떼를 사 마셨다.

객체 지향 방법으로 구현해보자.

 

// StarCoffee.java

package cooperation;

public class StarCoffee {

	// 1
	public int price;
	public int income;
	
	// 2
	public StarCoffee() {}
	
	// 3
	public String sellStarCoffee(int price) {
		
		income += (price);
		
		if (price == 4000) {
			return "별 다방 아메리카노를 구입했습니다.";
		} else if (price == 4300) {
			return "별 다방 라떼를 구입했습니다.";
		} else {
			return null;
		}
	}
}

 

1. StarCoffee 클래스를 만들고 필요한 멤버 변수를 선언한다.

 

2. StarCoffee 생성자를 만드는데 내용이 빈 기본 생성자이니 생략한다.

 

3.

StarCoffee를 파는 작업으로 sellStarCoffee 메소드를 작성한다.

income을 price만큼 증가시키고,

price에 따라 아메리카노 혹은 라떼를 구입했다는 String 값을 return한다.

 

 

 

// BeanCoffee.java

package cooperation;

public class BeanCoffee {

	public String shopName;
	public int price;
	public int income;
	
	public BeanCoffee() {
		
		shopName = "콩 다방";
	}
	
	public String sellBeanCoffee(int price) {
		
		income += (price);
		
		if (price == 4200) {
			return "콩 다방 아메리카노를 구입했습니다.";
		} else if (price == 4500) {
			return "콩 다방 라떼를 구입했습니다.";
		} else {
			return null;
		}
	}
}

 

BeanCoffee 클래스를 만들고 BeanCoffee와 동일한 역할을 하는 변수와 메소드를 작성한다.

 

 

package cooperation;

public class Person {
	
	// 1
	public String name;
	public int money;
	
	// 2
	public Person(String name) {
		this.name = name;
		money = 10000;
	}
	
	// 3
	public void buyStarCoffee(StarCoffee starcoffee, int price) {
		String message = starcoffee.sellStarCoffee(price);
		if(message != null) {
			money -= price;
			System.out.println(name + "님이 " + price + "원으로 " + message);
			
		}
	}
	
	// 4
	public void buyBeanCoffee(BeanCoffee beancoffee, int price) {
		String message = beancoffee.sellBeanCoffee(price);
		if (message != null) {
			money -= price;
			System.out.println(name + "님이 " + price + "원으로 " + message);
		}
		
	}
	
}

 

1. 커피는 사는 사람인 Person 클래스를 생성하고 멤버 변수로 name과 money를 선언한다.

 

2. Person 생성자를 생성해 name을 입력하게 하고, money는 동일하게 10,000원씩 동일하게 소지함으로서 입력받지 않고 바로 값을 대입한다.

 

3.

buyStarCoffee 메소드를 생성하고 매개 변수로 starcoffee와 price를 선언한다.

sellStarCoffee 메소드로 price에 따라 나오는 return 값을 String message에 대입하고,

조건문을 통해 message가 null이 아닌 경우 money에서 price만큼 빠져나가고 조건에 맞는 메세지가 출력된다.

 

 

 

 

 

// CoffeeTest.java

package cooperation;

public class CoffeeTest {

	public static void main(String[] args) {
		
		// 1
		Person Lee = new Person("Lee");
		Person Kim = new Person("Kim");

		// 2
		StarCoffee starcoffee = new StarCoffee();
		BeanCoffee beancoffee = new BeanCoffee();
		
		// 3
		Lee.buyStarCoffee(starcoffee, 4000); 
		// Lee님이 4000원으로 별 다방 아메리카노를 구입했습니다.
		
		Kim.buyBeanCoffee(beancoffee, 4500); 
		// Kim님이 4500원으로 콩 다방 라떼를 구입했습니다.
	}

}

 

 

1. CoffeeTest 클래스를 만들고 Person 인스턴스 2개 생성한다.

 

2. 각각 커피의 메소드를 사용하기 위해 Coffee 인스턴스도 각각 생성한다.

 

3. Person 클래스의 buyCoffee를 사용하고 매개변수로 각 coffee와 price를 넣으면 결과 값이 산출된다.

 

 

 

'Java' 카테고리의 다른 글

연산자, Args, printIn/printf, 형 변환  (0) 2022.05.01
Scanner 클래스  (0) 2022.05.01
SET, GET 사용 이유와 예제  (0) 2022.03.29
StringBuffer  (0) 2022.03.21
생성자 Constructor  (0) 2022.03.19