1. has - a 관계
- 상태로 객체를 받는다.
- 이때 상태에서 바로 new하지 않는다. → new할 책임이 없음
private final Burger burger;
private final Coke coke;
- 생성자로 초기화할 때 의존성 주입. (메서드로 주입X)
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());
}
}

Share article