[JAVA] 키오스크(1)

림민지·2025년 3월 8일

Today I Learn

목록 보기
19/62

햄버거 가게의 키오스크를 만들어보자!
레벨 1 : 기본적인 키오스크 프로그래밍
레벨 2 : 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리하기

0️⃣ 요구사항 정의 및 설계

1. 요구사항 정의

  • 키오스크에는 햄버거, 음료, 사이드메뉴가 있다.
  • 입력, 출력, 각 메뉴 관리, 전체 메뉴 관리의 선택이 가능하다.
  • 콘솔 기반
  • 허용한 값 이외의 값이 입력되었을 때, "부적절한 입력입니다. 다시 입력해주세요"와 같은 문구가 출력된다.
  • 메뉴 선택을 끝낼 때까지 선택을 계속할 수 있으며, 선택을 끝내면 현재까지의 총 금액과 담긴 메뉴를 보여준다.

2. 요구사항 설계

클래스 다이어그램을 통해 키오스크에 필요한 클래스를 설계했다.
오늘 구현한 Lv2에는 KioskMainMenuItem 클래스만 존재한다.
KioskMain : 키오스크의 흐름 담당, 메뉴 추가 및 선택
MenuItem : 메뉴의 구성(이름, 가격, 설명)과 getter, setter 기능

기본 실행 결과

[ SHAKESHACK MENU ]
1. ShackBurger   | W 6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거
2. SmokeShack    | W 8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거
3. Cheeseburger  | W 6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거
4. Hamburger     | W 5.4 | 비프패티를 기반으로 야채가 들어간 기본버거
0. 종료      | 종료
0 <- // 0을 입력

프로그램을 종료합니다.

1️⃣ MenuItem으로 메뉴의 특성 만들기

햄버거 메뉴판은 1. 햄버거의 이름 2. 가격 3. 설명 이렇게 구성되어있다.
그렇다면 각 특성을 정의할 수 있는 변수를 만들고 이를 추가할 수 있게 해주어야한다.

1. 햄버거 특성 정의하기

외부에서 접근해서 햄버거의 특성이 변하면 안되므로, private를 사용해서 변수를 정의해주자
또한 생성자를 활용해서 입력받은 이름, 가격, 설명을 가져갈 수 있도록 해주자

//MenuItem
public class MenuItem {
	private String name;
    private double price;
    private String description;

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

2. Getter

리스트에 저장한 값을 메인에서 가져다 쓰려면 getter가 필요하다

//getter
//햄버거 이름 가져오기
public String getName(){
	return name;
    }
//햄버거 가격 가져오기
    public double getPrice(){
    	return price;
    }
//설명 가져오기
public String getDescription(){
	return description;
    }

2️⃣ KioskMain 만들기

이제 키오스크를 실행할 메인 코드를 만들어보자
키오스크에는 다음과 같은 기능이 필요하다
1. 햄버거 메뉴 추가하기
2. 사용자에게 번호 입력받기
3. 사용자가 종료할 때까지 반복하기
4. 총 가격(totalPrice) 계산하기

1. 햄버거 메뉴 추가하기

Listadd()를 활용해서 햄버거 메뉴 리스트를 만들어보자

List<MenuItem> burgers = new ArrayList<>(); 
//햄버거 메뉴 저장할 리스트 만들기 -> 리스트에 클래스도 타입으로 설정가능

리스트의 타입에는 클래스도 넣을수있다!! 아까 만들어준 MenuItem 클래스를 타입으로 지정하고,
추후에 음료 리스트나 사이드메뉴 리스트를 만들 것을 생각해 리스트 이름은 burgers로 만들었다

        burgers.add(new MenuItem("ShackBurger   ", 6.9, "토마토, 양상추, 쉑 소스가 토핑된 치즈버거"));
        burgers.add(new MenuItem("SmokeShack    ", 8.9, "베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
        burgers.add(new MenuItem("Cheeseburger  ", 6.9,"포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"));
        burgers.add(new MenuItem("Hamburger     ", 5.4, "비프패티를 기반으로 야채가 들어간 기본버거"));

그리고 burgers 리스트에 add메서드를 사용하여 각 햄버거를 추가했따.
이렇게 리스트 내부에 한 세트로 저장하려면 burgers.add(new MenuItem()); 이런식으로 add(new MenuItem()) 선언을 해주어야 한다! 왜냐하면 아까 타입 지정할떄 클래스를 넣었기 때문~

2. 사용자에게 번호 입력 받기

스캐너를 활용해서 번호 입력받자

Scanner scanner = new Scanner(System.in); //스캐너 불러오기

3. 반복문

사용자가 종료를 원할때까지 키오스크는 종료되어서는 안된다.
그러므로 while문을 사용해서 반복해보자

while (true) {
            //메뉴 입력 받기
            System.out.print("원하는 메뉴의 번호를 입력하세요 : ");
            int select = scanner.nextInt();

            if (select == 0){
                System.out.println("프로그램을 종료합니다.");
                break;
            } else {
              
            }
        }

스캐너로 원하는 메뉴의 번호를 입력받고, 만약 0이 입력되면 종료될 수 있도록 if-else 문으로 구현했다.

4. 총액 계산하기

종료할 때까지 고른 메뉴를 합산하자
총액은 반복문 밖에 넣자 - 안에 넣으면 계속 0으로 초기화 되니까,,

double totalPrice =0; //총액을 저장

그리고 아까 비워둔 else문 안에 총액을 저장할 수 있도록 해주자! 이때 getter를 설정해서 요소를 가져올 수 있도록 하자

if (select == 0){
                System.out.println("프로그램을 종료합니다.");
                break;
            } else {
                System.out.println(burgers.get(select-1).getName()+"를 장바구니에 넣었습니다.");
                totalPrice += burgers.get(select-1).getPrice();
                System.out.println("지금까지 총액은 "+totalPrice+"W");
            }

리스트에 저장된 값을 가져오려면 get()을 활용해서 가져오면 된다!


3️⃣ 결과

콘솔에서 이런식으로 출력되는 모습을 확인할 수 있다.

햄버거 키오스크를 시작합니다--------------
[ SHAKESHACK MENU ]
1. ShackBurger      | W 6.9 | 토마토, 양상추, 쉑 소스가 토핑된 치즈버거
2. SmokeShack       | W 8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거
3. Cheeseburger     | W 6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거
4. Hamburger        | W 5.4 | 비프패티를 기반으로 야채가 들어간 기본버거
0. 종료              | 키오스크를 종료합니다
원하는 메뉴의 번호를 입력하세요 : 1
ShackBurger   를 장바구니에 넣었습니다.
지금까지 총액은 6.9W
원하는 메뉴의 번호를 입력하세요 : 2
SmokeShack    를 장바구니에 넣었습니다.
지금까지 총액은 15.8W
원하는 메뉴의 번호를 입력하세요 : 3
Cheeseburger  를 장바구니에 넣었습니다.
지금까지 총액은 22.700000000000003W
원하는 메뉴의 번호를 입력하세요 : 0
프로그램을 종료합니다.

3개 이상의 메뉴를 더하면 갑자기 22.700000000000003 이렇게 .0000~ 이렇게 생기는 문제가 생겼다. 이걸 다음에 해결해보자

profile
@lim_128

0개의 댓글