TIL 15 [ 키오스크 과제(3~4단계) ]

2025. 3. 10. 17:52·[내일배움캠프-Sparta]/Spring 6기
반응형

1. 학습내용 : 키오스크 과제(3~4단계) 과제 , 알고리즘 Daily 풀기

★ 키오스크 과제 3단계 ★

Lv 3. 기본적인 키오스크를 프로그래밍하기
package com.example.kiosk;

public class Main {
    public static void main(String[] args) {
        // Lv 3. 객체 지향 설계를 적용해 순서 제어를 클래스로 관리하기
        // Kiosk 클래스로 관리
        Kiosk kiosk = new Kiosk();
        kiosk.start();
    }
}

Main클래스

package com.example.kiosk;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Kiosk {
    // 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스입니다.
    // 속성
    List<MenuItem> menuItems;

    // 생성자
    public Kiosk() {
        menuItems = new ArrayList<>();
        // add함수로 new MenuItem(이름,가격,설명) List에 삽입
        menuItems.add(new MenuItem("ShackBurger", 6900 ,"토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
        menuItems.add(new MenuItem("SmokeShack", 8900 ,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
        menuItems.add(new MenuItem("Cheeseburger", 6900 ,"포테이토 번과 비브패티, 치즈가 토핑된 치즈버거"));
        menuItems.add(new MenuItem("Hamburger", 5400 ,"비프패티를 기반으로 야채가 들어간 기본버거"));
    }

    // 기능
    void start() {
        Scanner sc = new Scanner(System.in);
        while(true) {
            System.out.println("[ SHAKESHACK MENU ]");
            for(int i=0; i<menuItems.size(); i++) {
                MenuItem item = menuItems.get(i);
                System.out.println((i+1) + ". " + item.name + " | " + item.price + "원 | " + item.explain);
            }
            System.out.println("0. 종료      | 종료");

            int choose = sc.nextInt();
            if(choose == 0) {
                System.out.println("키오스크를 종료합니다.");
                break;
            } else if (choose >= 1 && choose <= 4) {
                MenuItem item = menuItems.get(choose - 1); // 인덱스값이 0부터 시작하기 때문에 -1 을 해야함.
                System.out.println(item.name +"를 선택하였습니다. ");
                break;
            } else {
                System.out.println(" 잘못된 선택입니다. ");
            }
        }
    }
}

Kiosk 클래스

package com.example.kiosk;

public class MenuItem {
    // 속성
    String name;
    int price;
    String explain;

    // 생성자
    public MenuItem(String name, int price, String explain) {
        this.name = name;
        this.price = price;
        this.explain = explain;
    }
}

MenuItem 클래스

Kisok 클래스가 추가되었다.

[트러블 슈팅]

  • 배경: choose 입력값에 BoundsException 현상 발생함.
  • 발단: 어떻게 하면 예외가 발생하지 않을지 생각을 해봄. 
  • 전개: 배열 인덱스는 0부터 시작하기때문에 예외가 발생할수 있다는것을 인지함.
  • 위기: 잘못된 지정을하면 또 다른 예외를 발생 시킬수 있을 가능성이 있음. 
  • 절정: 인덱스 기준으로 맞추기 위해 사용자가 입력한값을 -1을 하게 해봄.
  • 결말: 사용자 입력값에 -1을 추가하니, 예외가 발생하지 않고 배열이 범위를 넘지 않게 잘 동작함.

★ 키오스크 과제 4단계 ★

Lv 4. 객체 지향 설계를 적용해 음식 메뉴와 주문 내역을 클래스 기반으로 관리하기
package com.example.kiosk;

public class Main {
    public static void main(String[] args) {
        // Lv 4. 객체 지향 설계를 적용해 음식 메뉴와 주문 내역을 클래스 기반으로 관리하기
        // Menu 객체 생성하면서 카테고리 이름 설정
        // Menu 클래스 내 있는 List<MenuItem> 에 MenuItem 객체 생성하면서 삽입
        Menu burgers = new Menu("Burgers");
        // 해당 카테고리 내에 있는 목록 추가.
        burgers.addMenuItem(new MenuItem("ShackBurger", 6900, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
        burgers.addMenuItem(new MenuItem("SmokeShack", 8900, "베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
        burgers.addMenuItem(new MenuItem("Hamburger", 5000, "비프패티를 기반으로 야채가 들어간 기본버거"));

        Menu drinks = new Menu("Drinks");
        drinks.addMenuItem(new MenuItem("Coke", 1500, "콜라"));
        drinks.addMenuItem(new MenuItem("ZeroCoke", 1500,"제로콜라"));
        drinks.addMenuItem(new MenuItem("Sprite", 2000, "스프라이트"));

        Menu deserts = new Menu("Deserts");
        deserts.addMenuItem(new MenuItem("Yogurt", 1000, "포동포동한 요거트!"));
        deserts.addMenuItem(new MenuItem("Candy", 500, "새콤달콤 사탕"));

        // Kiosk 객체 생성
        Kiosk kiosk = new Kiosk();

        // 키오스크에 메뉴 카테고리 목록 추가.
        kiosk.addMenu(burgers);
        kiosk.addMenu(drinks);
        kiosk.addMenu(deserts);

        // Kiosk 내 시작하는 함수 호출
        kiosk.start();
    }
}

Main 클래스

package com.example.kiosk;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Kiosk {
    // 속성
    List<Menu> menus;
    // 생성자
    public Kiosk() {
        menus = new ArrayList<>();
    }
    // 기능
    // 메뉴 카테고리에 추가
    public void addMenu(Menu menu) {
        menus.add(menu);
    }
    // 작동 시작.
    void start() {
        Scanner sc = new Scanner(System.in);
        while(true) {
            System.out.println("[ Main MENU ]");
            for(int i=0; i<menus.size(); i++) {
                System.out.println((i+1) + ". " + menus.get(i).category);
            }
            System.out.println("0. 종료      | 종료");

            System.out.print("카테고리를 선택하세요(종료 0): ");
            int choose = sc.nextInt();
            if(choose == 0) {
                System.out.println("키오스크를 종료합니다.");
                break; // 반복문 종료
            } else if (choose >= 1 && choose <= 3) {
                menus.get(choose - 1).showSubMenu();
                int choose2 = sc.nextInt();
                if(choose2 >= 1 && choose2 <= menus.size()) {
                    // 메소드 체이닝 ( . . . 연결되어서 이어지는 방식 )
                    System.out.println("\n" + menus.get(choose - 1).menuItems.get(choose2 - 1).name + "를 선택하였습니다.\n");
                }
            } else {
                System.out.println(" 잘못된 선택입니다. ");
            }
        }
    }
}

Kiosk 클래스

package com.example.kiosk;

import java.util.ArrayList;
import java.util.List;

public class Menu {

    String category;
    List<MenuItem> menuItems;

    public Menu(String category) {
        this.category = category;
        menuItems = new ArrayList<>();
    }

    public void addMenuItem(MenuItem menuItem) {
        menuItems.add(menuItem);
    }

    void showSubMenu() {
        System.out.println("[ " + this.category + " ]");
        for(int i=0; i<menuItems.size(); i++) {
            System.out.print((i+1) + ". ");
            menuItems.get(i).showInfo();
        }
        System.out.println("0. 뒤로가기");
        System.out.print("어떤 것을 먹을까?: ");
    }
}

Menu 클래스

package com.example.kiosk;

public class MenuItem {

    String name;
    int price;
    String explain;

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

    void showInfo() {
        System.out.println(this.name + " | " + this.price + "원 | " + this.explain);
    }
}

MenuItem 클래스

추가적인 메소드를 활용하고, Menu 클래스가 추가되었다.

 

[트러블 슈팅]

  • 배경: 과제에 있는 구조형식 대로 맞출려고 하다보니, MainMenu에 카테고리들이 출력되지 않는 현상 발견. 
  • 발단: 카테고리가 저장되어 있지않아서 출력되지 않음.
  • 전개: 해결하던 와중에 kiosk 클래스에 addMenu 메소드를 만들어서, add 함수를 사용해서 Menus에 menu 객체를 추가하는 메소드를 만들어 놓음
  • 위기: 또 다시 BoundsException 볼 확률이 있음.
  • 절정: add함수를 추가한 메소드를 통해서, 메인에서 각각 카테고리별 객체를 만들어준후, kisok 클래스 객체를 생성해서 addMenu  메소드를 통해 카테고리를 저장시킴.
  • 결말: 결과적으로, 카테고리들이 메인메뉴에 출력이 잘 작동됨.

- 새롭게 알게된것 : 메소드 체이닝 ( . . . 으로 해당 객체 기준으로 . 입력시 사용할수 있는 모든 함수들이 나열되며,  연결되어 있다는 의미로 체이닝이라고 불림 )

 

2. 내일 학습 할 것: 알고리즘, 키오스크 과제 (필수, 5단계 (캡슐화))

반응형

'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글

TIL 17 [ 키오스크 과제 (도전🔥 1단계) + Intellij 깃 사용법 ]  (0) 2025.03.12
TIL 16 [ 키오스크 과제 5단계 , Java (Enum, 동일성 vs 동등성) ]  (0) 2025.03.11
TIL 14 [ 키오스크 과제(1~2단계) ]  (0) 2025.03.07
TIL 13 [ Java(동일성 문제, 클래스와 객체, charAt함수) ]  (0) 2025.03.06
TIL 12 [계산기 과제 3단계(enum, 제네릭, 람다, 스트림)]  (0) 2025.03.05
'[내일배움캠프-Sparta]/Spring 6기' 카테고리의 다른 글
  • TIL 17 [ 키오스크 과제 (도전🔥 1단계) + Intellij 깃 사용법 ]
  • TIL 16 [ 키오스크 과제 5단계 , Java (Enum, 동일성 vs 동등성) ]
  • TIL 14 [ 키오스크 과제(1~2단계) ]
  • TIL 13 [ Java(동일성 문제, 클래스와 객체, charAt함수) ]
dimenshun
dimenshun
한 소년의 개발 일기
    반응형
  • dimenshun
    Dev Life Notes
    dimenshun
  • 전체
    오늘
    어제
    • 분류 전체보기 (268)
      • CS (23)
        • 자료구조 (0)
        • 알고리즘 (0)
        • 컴퓨터 구조 (8)
        • 네트워크 (6)
        • 운영체제 (3)
        • DB ( + SQLD ) (5)
        • SW공학 (1)
      • 프로그래밍 (3)
        • Java (0)
        • Spring (0)
        • HTML,CSS (3)
        • JavaScript (0)
      • 개발 툴 (7)
        • Git(버전관리) (1)
        • Docker (3)
        • AWS (2)
        • JSP (1)
      • 코딩테스트(Algorithm) (125)
        • 백준 (6)
        • 프로그래머스 (119)
      • [내일배움캠프-Sparta] (110)
        • Spring 6기 (106)
        • KPT 회고 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백엔드
    배포
    CPU
    세션
    내일배움캠프
    web
    Testcode
    트랜잭션
    메모리
    Java
    Til
    코딩테스트
    Python
    spring
    알고리즘
    cs
    network
    운영체제
    개발자
    OS
    KPT
    SQLD
    docker
    SQL
    It
    네트워크
    컴퓨터구조
    db
    AWS
    웹
  • hELLO· Designed By정상우.v4.10.3
dimenshun
TIL 15 [ 키오스크 과제(3~4단계) ]
상단으로

티스토리툴바