[Java] 12.5. 컴퍼지션 (버거 예제)

김주희's avatar
Feb 26, 2025
[Java] 12.5. 컴퍼지션 (버거 예제)

1. has - a 관계

  1. 상태로 객체를 받는다.
    1. 이때 상태에서 바로 new하지 않는다. → new할 책임이 없음
    2. private final Burger burger; private final Coke coke;
  1. 생성자로 초기화할 때 의존성 주입. (메서드로 주입X)
    1. public BurgerSet(Burger burger, Coke coke) { this.burger = burger; this.coke = coke; }
 

2. 예제

1. Burger class

package comp; //기본버거 public class Burger { private String name; private int price; public Burger(String name, int price) { this.name = name; this.price = price; System.out.println(name + " 만들어졌어요."); } public String getName() { return name; } public int getPrice() { return price; } }
 

2. Coke class

package comp; public class Coke { private String name; private int price; public Coke(String name, int price) { this.name = name; this.price = price; System.out.println(name + " 만들어졌어요."); } public String getName() { return name; } public int getPrice() { return price; } }
 

3. ShrimpBurger class

package comp; public class ShrimpBurger extends Burger { private String material; public ShrimpBurger(String name, int price, String material) { super(name, price); // Burger가 기본 생성자 없으니까 this.material = material; } public String getMaterial() { return material; } }
 

4. BurgerSet class

package comp; // 컴퍼지션해야됨 has 관계 // DI(has) : 그 오브젝트에 의존한다는 뜻 (부모한테 의존) 의존하는 것을 생성자로 받겠다는 뜻 public class BurgerSet { // 메서드로 주입X // 생성자로 초기화시에 주입O private final Burger burger; // 다른 객체 의존성 주입 - final -> 기본 생성자로 하면 값이 null이 되니까 안됨 private final Coke coke; // 여기서 new할 책임 BurgerSet에 없음 // final -> new(메모리에 뜰때)될 때 초기화되어야 함 public BurgerSet(Burger burger, Coke coke) { this.burger = burger; this.coke = coke; } // 의미 없음 public Burger getBurger() { return burger; } public Coke getCoke() { return coke; } // 사용자를 위한 getter 만들어 봅시다. public int getTotalPrice() { return burger.getPrice() + coke.getPrice(); } public String getAllNames() { return burger.getName() + " " + coke.getName(); } }
 

5. LotteApp class

package comp; public class LotteApp { public static void main(String[] args) { // 1. 버거만 주세요 (버거, 1000원) Burger burger = new Burger("버거", 1000); // 2. 콜라만 주세요 (콜라, 500원) Coke coke = new Coke("콜라", 500); // 3. 쉬림프 버거 주세요 (새우, 2000, 새우버거) ShrimpBurger shrimpBurger = new ShrimpBurger("새우버거", 2000, "새우"); // 4. 버거 세트 주세요 BurgerSet burgerSet = new BurgerSet(burger, coke); System.out.println(burger.getName() + " " + burger.getPrice()); System.out.println(coke.getName() + " " + coke.getPrice()); System.out.println(shrimpBurger.getName() + " " + shrimpBurger.getPrice()); System.out.println(burgerSet.getAllNames() + " 세트의 총 가격: " + burgerSet.getTotalPrice()); } }
notion image
Share article

jay0628