[JAVA] 44. 컴퍼지션

문정준's avatar
Feb 17, 2025
[JAVA] 44. 컴퍼지션

롯데리아 앱

  • 버거, 음료수, 새우버거, 버거 세트를 주문하는 프로그램을 컴퍼지션을 활용하여 작성하시오.
 

문제 분석

  • 버거 : 클래스
  • 음료수 : 클래스
  • 새우버거 : 상속 클래스 (버거 - 부모 클래스)
  • 버거 세트 : 컴퍼지션 (has 버거, 음료수)
    • 버거 세트는 버거와 음료수가 먼저 생성되어야 생성 가능!
    • 버거 세트의 생성 책임을 잘 생각해볼 것
 

코드 작성

  • 버거
package comp; public class Burger { private String name; private int price; public Burger(String name, int price) { this.name = name; this.price = price; } public String getName() { return name; } public int getPrice() { return price; } }
  • 음료수
package comp; public class Coke { private String name; private int price; public Coke(String name, int price) { this.name = name; this.price = price; } public String getName() { return name; } public int getPrice() { return price; } }
  • 새우버거
package comp; public class ShrimpBurger extends Burger { private String material; public ShrimpBurger(String name, int price, String material) { super(name, price); this.material = material; } public String getMaterial() { return material; } }
  • 버거세트
package comp; // Composition // DI (Dependency Injection : 의존성 주입 (has)) public class BurgerSet { // DI : final(상수)로 선언 // why? final은 생성자로 초기화시켜야 값이 들어갈 수 있음. private final Burger burger; private final Coke coke; // 기본 생성자 : 오류 발생 // 1. final에 값을 넣을 수 없기 때문 // 2. 생성자 중복 /* public BurgerSet() { } */ // final로 인해 생성자를 만들면서 초기화해야 함 public BurgerSet(Burger burger, Coke coke) { this.burger = burger; this.coke = coke; } // 기본 getter는 만들어 두기 public Burger getBurger() { return burger; } public Coke getCoke() { return coke; } // 사용자를 위한 getter 추가 public String getAllNames() { return burger.getName() + " " + coke.getName(); } public int getTotalPrice() { return burger.getPrice() + coke.getPrice(); } }
  • main
package comp; public class LotteApp { public static void main(String[] args) { // 1. 버거만 주세요. (1000, 버거) Burger b1 = new Burger("버거", 1000); System.out.println("주문하신 제품 : " + b1.getName()); System.out.println("가격 : " + b1.getPrice()); System.out.println(); // 2. 콜라만 주세요. (500, 콜라) Coke c1 = new Coke("콜라", 500); System.out.println("주문하신 제품 : " + c1.getName()); System.out.println("가격 : " + c1.getPrice()); System.out.println(); // 3. 쉬림프 버거 주세요. (새우, 2000, 새우버거) ShrimpBurger sb1 = new ShrimpBurger("새우버거", 2000, "새우"); System.out.println("주문하신 제품 : " + sb1.getName()); System.out.println("제품 구성 : " + sb1.getMaterial()); System.out.println("가격 : " + sb1.getPrice()); System.out.println(); // 4. 버거 세트 주세요. (버거, 사이다) Burger b2 = new Burger("버거", 1000); Coke c2 = new Coke("사이다", 500); BurgerSet bs1 = new BurgerSet(b2, c2); System.out.println("주문하신 제품 : " + b2.getName() + "세트"); System.out.println("품목 : " + bs1.getAllNames()); System.out.println("가격 : " + bs1.getTotalPrice()); System.out.println(); } }
 

결과

notion image
 
Share article

sxias