ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [과제] 키오스크 필수 Lv2
    내일배움캠프/과제 2025. 3. 13. 14:09

    ✅ Lv2. 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리

    1️⃣ 과제 조건

    • 요구사항이 가지는 의도
      • 객체 지향 개념을 학습하고, 데이터를 구조적으로 관리하며 프로그램을 설계.
      • 햄버거 메뉴를 MenuItem 클래스와 List를 통해 관리.
    • MenuItem 클래스 생성하기
      • 설명 : 개별 음식 항목을 관리하는 클래스입니다. 현재는 햄버거만 관리.
      • 클래스는 이름, 가격, 설명 필드로 구성.
    • main 함수에서 MenuItem 클래스를 활용하여 햄버거 메뉴를 출력.
      • MenuItem 객체 생성을 통해 이름, 가격, 설명을 세팅.
        • 키워드: new
      • List를 선언하여 여러 MenuItem을 추가.
        • List<MenuItem> menuItems = new ArrayList<>();
      • 반복문을 활용해 menuItems를 탐색하면서 하나씩 접근.
    • 구조 예시
      public static void main(String[] args) {
          // List 선언 및 초기화
          // add 함수를 통해 new MenuItem(이름, 가격, 설명) List에 삽입
      
          // Scanner 선언
      
          // 반복문을 활용해 List 안에 있는 MenuItem을 하나씩 출력
          // 숫자를 입력 받기
          // 입력된 숫자에 따른 처리
              // 프로그램을 종료
              // 선택한 메뉴 : 이름, 가격, 설명
      }

    2️⃣ 구현 포인트

    1. MenuItem 클래스 생성

    • MenuItem 클래스를 생성하여 객체로 메뉴를 관리
    public class MenuItem {
    
        private String menuNm; // 메뉴명
    
        private double price; // 가격
    
        private String desc; // 설명
    }

     

    2. MenuItem 생성자를 활용하여 메뉴 List 구현

    • MenuItem 생성자를 구성한 후 menuList에 생성과 동시에 추가
    public class MenuItem {
    	...
        public MenuItem(String menuNm, double price, String desc) {
            this.menuNm = menuNm;
            this.price = price;
            this.desc = desc;
        }
    }
    public class Main {
        public static void main(String[] args) {
            List<MenuItem> menuList = new ArrayList<>(); // 메뉴 List
    
            // 메뉴 추가
            menuList.add(new MenuItem("ShackBurger", 6.9 ,"토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
            menuList.add(new MenuItem("SmokeShack", 8.9 ,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
            menuList.add(new MenuItem("Cheeseburger", 6.9 ,"포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"));
            menuList.add(new MenuItem("Hamburger", 5.4 ,"비프패티를 기반으로 야채가 들어간 기본버거"));
        }
    }

     

    3. toString @Override

    • 사용자에게 메뉴를 어떻게 보여줄지 고민하다 toString 을 Override함
    • Lv1에서는 메뉴 별로 간격을 맞추기위해 공백을 추가하였지만, 계속 그럴 수는 없어서 String.format %s를 활용
    • %-13s 를 할경우 13만큼의 길이를 갖고 string 을 입력받아 길이가 모자란만큼은 공백으로 채워준다.
    @Override
    public String toString() {
        return String.format("%-13s |  W %-4s | %s", menuNm, price, desc);
    }
    int i = 1;
    System.out.println("\n[ SHAKESHACK MENU ]\n");
    for (MenuItem menuItem : menuList) {
        System.out.println(i++ + ". " +menuItem.toString());
    }

     

    실행 결과

     

     

    4. List의 get 함수 사용 

    • 사용자로부터 입력을 받아 menuList에서 get(index)를 하여 메뉴 정보 가져오기
    System.out.print("번호를 선택해주세요 : ");
    String input = br.readLine();
    no = Integer.valueOf(input);
    ...
    MenuItem selectMenu = menuList.get(no - 1);
    System.out.printf("선택한 메뉴 : %s | 가격 : W %s | 설명 : %s \n\n", selectMenu.getMenuNm(), selectMenu.getPrice(), selectMenu.getDesc());

     

    3️⃣ 최종 코드

    1. Main

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
    
            // 메뉴 List
            List<MenuItem> menuList = new ArrayList<>();
    
            // 메뉴 추가
            menuList.add(new MenuItem("ShackBurger", 6.9 ,"토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
            menuList.add(new MenuItem("SmokeShack", 8.9 ,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
            menuList.add(new MenuItem("Cheeseburger", 6.9 ,"포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"));
            menuList.add(new MenuItem("Hamburger", 5.4 ,"비프패티를 기반으로 야채가 들어간 기본버거"));
    
            int i = 1;
            System.out.println("\n[ SHAKESHACK MENU ]\n");
            for (MenuItem menuItem : menuList) {
                System.out.println(i++ + ". " +menuItem.toString());
            }
            System.out.println("0. 종료           |  종료\n");
    
            try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
                int no;
    
                while (true) {
                    try {
                        System.out.print("번호를 선택해주세요 : ");
                        String input = br.readLine();
                        no = Integer.valueOf(input);
    
                        if (no == 0) { // 0 이면 종료
                            break;
                        } else if (no > menuList.size()) { // 없는 번호 입력 시 exception
                            throw new NumberFormatException();
                        }
    
                        MenuItem selectMenu = menuList.get(no - 1);
                        System.out.printf("선택한 메뉴 : %s | 가격 : W %s | 설명 : %s \n\n", selectMenu.getMenuNm(), selectMenu.getPrice(), selectMenu.getDesc());
    
                    } catch (NumberFormatException e) {
                        System.out.println("\n! 올바른 번호를 입력해주세요 !\n");
                    }
                }
    
            } catch (IOException e) {
                System.out.println("\n! 에러가 발생했습니다 !\n");
            }
    
            System.out.println("\n프로그램을 종료합니다.");
        }
    }

     

    2. MenuItem

    package com.example.kiosk.required.lv2;
    
    public class MenuItem {
    
        private String menuNm; // 메뉴명
    
        private double price; // 가격
    
        private String desc; // 설명
    
        public MenuItem(String menuNm, double price, String desc) {
            this.menuNm = menuNm;
            this.price = price;
            this.desc = desc;
        }
    
        public String getMenuNm() {
            return menuNm;
        }
    
        public void setMenuNm(String menuNm) {
            this.menuNm = menuNm;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public void setDesc(String desc) {
            this.desc = desc;
        }
    
        @Override
        public String toString() {
            return String.format("%-13s |  W %-4s | %s", menuNm, price, desc);
        }
    }

     

    '내일배움캠프 > 과제' 카테고리의 다른 글

    [과제] 키오스크 필수 Lv4  (0) 2025.03.13
    [과제] 키오스크 필수 Lv3  (0) 2025.03.13
    [과제] 키오스크 필수 Lv1  (0) 2025.03.13
    [과제] 계산기 Lv3  (1) 2025.03.06
    [과제] 계산기 Lv2  (0) 2025.03.06
Designed by Tistory.