Book/객체지향의 사실과 오해

[Book] 7장) 함께 모으기

kkkkkkkkkkkk 2022. 2. 15. 13:21

개념, 명세, 구현 관점 순서대로 개발

 

개념 관점

  • 도메인
    • 실제 도메인의 규칙과 제약을 최대한 반영

 

 

명세 관점

  • 공용 인터페이스
    • 객체들의 책임에 초점

 

 

 

 

구현 관점

  • 클래스의 속성, 메서드
    • '어떻게' 수행 할 것인가에 초점

 

 

public class Customer {

    public Coffee order(String menuName, Menu menu, Barista barista) {
        MenuItem menuItem = menu.chooseMenu(menuName);
        Coffee coffee = barista.makeCoffee(menuItem);
        return coffee;
    }
}

 

 

public class Menu {

    private List<MenuItem> menuItemList;

    public Menu(List<MenuItem> menuItemList) {
        this.menuItemList = menuItemList;
    }

    public MenuItem chooseMenu(String menuName) {
        for (MenuItem menuItem : menuItemList) {
            if (menuItem.getName().equals(menuName)) {
                return menuItem;
            }
        }
        return null;
    }
}

 

 

public class MenuItem {

    private String name;

    private int price;

    public MenuItem() {
    }

    public MenuItem(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

 

 

public class Barista {

    public Coffee makeCoffee(MenuItem menuItem) {
        Coffee coffee = new Coffee(menuItem);
        return coffee;
    }
}

 

 

public class Coffee {

    private String name;

    private int price;

    public Coffee(MenuItem menuItem) {
        this.name = menuItem.getName();
        this.price = menuItem.getPrice();
    }
}