My Melody Is Cute 김밥 키오스크 +
본문 바로가기

실습👁️‍🗨️/연습

김밥 키오스크 +

 

클래스를 기능별과 데이터 처리별로  나누기 

 

 

여러 클래스로 나누면 관리하기 쉽다고 하지만 복잡한데 왜 그렇게 하는건지 모르겠다 그냥 나중을 위해서 하는건가?

그리고 클래스가 나누어져있는게 어떤 역할을 하는지 잘 이해가 안간다 (메뉴와 메뉴아이템 이런부분)

어디서 어디로 이어지는건지 헷갈린다 일단 주석을 하나하나 작성해서 달아줬다,,잘 모르겠다.....너무 복잡하다ㅜㅜ

 

클래스는 총 7개

Kiosk - 메뉴선택 및 주문 처리,관리? / 기능

KioskApplication - 사용자와의 상호작용,인터페이스 / 기능

Menu - 메뉴 아이템의 목록,메뉴의 구성?? / 데이터

MenuItem - 개별 메뉴 항목의 세부정보 메뉴 하위항목 / 데이터

MenuService - 등록된 메뉴 정보 제공 / 데이터

Order - 개별 주문 정보(메뉴아이템) 를 저장 / 데이터

OrderService - 모든 주문을 통합해서 정보를 저장? / 데이터

 

 

어떻게 만들었는데 주문한 김밥에서 주소가 나온ㄷㅏ...ㅋㅋㅋ 나중에 다시 수정해야지...

public class KioskApplication {
     public static void main(String[] args) {
         // TODO: 메뉴 표시 기능 구현
         MenuService menuService = new MenuService();
         OrderService orderService = new OrderService(); //MenuService, OrderService 생성자 호출 인스턴스 생성후 초기화
         Menu menu = menuService.getMenu();//

         Kiosk kiosk = new Kiosk(menuService , orderService , menu);// 매개변수가 있는 Kiosk 생성자
         kiosk.displayMenu();

         // TODO: 메뉴 선택 기능 구현
         MenuItem selectMenuItem = kiosk.selectMenuItem(); //선택한 메뉴를 변수에 저장
         // TODO: 주문 기능 구현 메뉴 아이템 (김밥번호) 선택 후 엔터
         Order order = kiosk.orderMenuItem(selectMenuItem);
         // TODO: 주문한 메뉴 아이템 출력 기능
         kiosk.printOrderMenuItem(order);
     }
 }
import java.util.Scanner;

public class Kiosk {
    private final MenuService menuService;
    private final OrderService orderService;
    private final Menu menu;
    private Scanner scanner = new Scanner(System.in);

    //TODO: 초기화를 위한 생성자 추가
    public Kiosk(MenuService menuService, OrderService orderService, Menu menu) {
        this.menuService = menuService;
        this.orderService = orderService;
        this.menu = menu;
    }
    
    //메뉴를 초기화 해주는 내부 메서드
    private  Menu initMenu() {
        //TODO: menuService를 이용해 Menu 정보를 가져 오세요.
        MenuService menuService = new MenuService();
        Menu menu = menuService.getMenu(); //getMenu메서드를 호출해서 Menu객체를 가져옴

        return menu;
    }

    // 메뉴를 표시하는 기능
    public void displayMenu() {
        //TODO: menu 객체를 이용해 menu item(김밥)을 콘솔에 표시해야합니다.
        Menu menu = initMenu(); //initMenu메서드를 사용해서 Menu객체를 얻어옴
        MenuItem[] menuItems = menu.getMenuItems();//

        System.out.println("==== 김밥메뉴 ====");

        for(int i = 0; i < menuItems.length; i++ ) {
            int seq = i +1;
            System.out.println("(" + seq + ") " + menuItems[i].getName() + "(" + menuItems[i].getPrice() + "원)");
        }
    }

    //메뉴 아이템을 선택하는 기능
    public MenuItem selectMenuItem() {
        System.out.println("\n메뉴를 선택해 주세요: ");
        String menuItemNumber = scanner.nextLine();
        MenuItem foundMenuItem = findMenuItemByNumber(Integer.parseInt(menuItemNumber));

        return foundMenuItem;
    }
    // 메뉴 아이템(김밥)을 주문하는 기능
    public Order orderMenuItem(MenuItem menuItem) {
        //TODO : orderService 를 이용해 주문정보를 저장하세요.
        Order order = new Order(menuItem);//주문정보 생성하고 초기화
        OrderService orderService = new OrderService();
        orderService.saveOrder(order);
        return order;
    }
    public void printOrderMenuItem(Order order) { //주문한 메뉴 출력
        System.out.println("주문한 김밥: "+ order.getMenuItem());

    }

    private MenuItem findMenuItemByNumber(int menuItemNumber) {
        MenuItem[] menuItems = menu.getMenuItems(); //번호에 해당하는 메뉴아이템을 찾는 기능

        return menuItems[menuItemNumber-1];
    }
}

 

+

문제점 : 주문한 김밥 내용이 나오지 않는 오류

주문한 김밥 내용이 나오지 않음

 

MenuItem 클래스의 getName()과 getPrice()는

String , int형식의 데이터를 반환한다

 

printOrderMenuItem 메서드에서 주문한메뉴아이템을 출력할때

order.getMenuItem()은 MenuItem 객체를 반환하고

이것을 System.out.println()을 통해 출력하면 기본 toString() 메서드가 호출된다

 

toString() 메서드를 호출해서 객체를 문자열로 표시하는데

toString()의 기본 메서드는 해시코드를 문자열로 반환하기때문에 식별정보로 나오게 됨

 

이름과 가격을 반환하도록 toString() 메서드를 오버라이딩해서 수정해야한다 

 

toString() 메서드를 수정하니까 제대로 나온다...🐣

public String toString() {
        return name; }

public class MenuItem {
    private String name;
    private int price;

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

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }

    public String toString() {
        return name;
    }
}