Hyeok의 웹 개발 블로그

<2025.03.11> 키오스크 과제 Lv 3 본문

TIL/Java

<2025.03.11> 키오스크 과제 Lv 3

Yhyeok 2025. 3. 11. 22:50

▶ 키오스크 키오스크 과제 Lv3 을 구현해 보았습니다.

 

조건

- main 함수에서 관리하던 전체 순서 제어를 Kiosk 클래스를 통해 관리

→ Kiosk 클래스 생성하기 

 - 설명 : 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스

  1.  MenuItem을 관리하는 리스트가 필드로 존재
  2. main 함수에서 관리하던 입력과 반복문 로직은 이제 start함수를 만들어 관리
  3. List<MenuItem> menuItem 는 Kiosk 클래스 생성자를 통해 값을 할당
  4. Kiosk 객체를 생성하고 사용하는 main 함수에서 객체를 생성할 때 값을 넘겨준다.

우선 MenuItem을 관리하는 리스트를 만들어줍니다.

List<MenuItem> menuItems = new ArrayList<>();

 

그리고 메서드 부분에 start 함수를 만들어주고 반복문을 활용합니다.

 start 함수 반복문 while 안에는 main 매서드에 있던 메뉴의 내용을 가져와서 반복 시켜줍니다.

void start(){
    while(true){
        System.out.println("[ SHAKESHACK MENU ] ");
        System.out.println("1. ShackBuger   | W 6.9 |  토마토, 양상추, 쉑소스가 토핑된 치즈버거" );
        System.out.println("2. SmokeShack   | W 8.9 |  베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거");
        System.out.println("3. Cheesebuger  | W 6.9 |  포테이토 번과 비프패티, 치즈가 토핑된 치즈버거");
        System.out.println("4. Hamburger    | W 5.4 |  비프패티를 기반으로 야채가 들어간 기본버거");
        System.out.println("0. 종료    | 종료");

number = scanner.nextInt(); 로 지정해서 다음에 오는 switch 값에서  number 값을 입력해 출력할 수 있도록 만들어줍니다.

int number = scanner.nextInt();
scanner.nextLine();

 

 

여기서 switch 활용해서 번호를 입력했을 때, 선택한 메뉴의 내용이 나오도록 설정해줍니다.

switch (number){
    case 1:
    case 2:
    case 3:
    case 4:
    }

 

여기서 MenuItem 클래스 메서드 부분을 게터로 불러와서 사용해줍니다.

System.out.println("선택한 메뉴 : " + menuItems.get(0).getName() + "   | W " + menuItems.get(0).getPrice() + " |   " + menuItems.get(0).getDescription());

 

각 number 값에 맞는 내용을 게터를 활용해서 불러와 이름, 가격, 설명란에 리스트에 저장된 값을 불러옵니다.

System.out.println("선택한 메뉴 : " + menuItems.get(1).getName() + "   | W " + menuItems.get(1).getPrice() + " |   " + menuItems.get(1).getDescription());
System.out.println("선택한 메뉴 : " + menuItems.get(2).getName() + "   | W " + menuItems.get(2).getPrice() + " |   " + menuItems.get(2).getDescription());
System.out.println("선택한 메뉴 : " + menuItems.get(3).getName() + "   | W " + menuItems.get(3).getPrice() + " |   " + menuItems.get(3).getDescription());

 

각 case 끝에는 break를 활용해 switch 문을 빠져나올 수 있게 해줍니다.

switch (number){
    case 1:
        System.out.println("선택한 메뉴 : " + menuItems.get(0).getName() + "   | W " + menuItems.get(0).getPrice() + " |   " + menuItems.get(0).getDescription());
        // menuItem.get(0); 으로만 해서 soutv 했을땐, kiosk_lv2.lv2.MenuItem@52cc8049 와 같이 나왔음. >>  @~~~ 주소를 나타낸다.
        break;
    case 2:
        System.out.println("선택한 메뉴 : " + menuItems.get(1).getName() + "   | W " + menuItems.get(1).getPrice() + " |   " + menuItems.get(1).getDescription());
        break;
    case 3:
        System.out.println("선택한 메뉴 : " + menuItems.get(2).getName() + "   | W " + menuItems.get(2).getPrice() + " |   " + menuItems.get(2).getDescription());
        break;
    case 4:
        System.out.println("선택한 메뉴 : " + menuItems.get(3).getName() + "   | W " + menuItems.get(3).getPrice() + " |   " + menuItems.get(3).getDescription());
        break;

}

 

만약 숫자를 0번을 넣었을 경우에는 주문을 종료하게 설정을 해줍니다.

if (number == 0){
    System.out.println("주문을 종료합니다.");
    break;
}

 

그리고  Main 클래스에는 함수 start 를 실행시켜줍니다.

 

package kiosklv3;

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<MenuItem> menuItems = new ArrayList<>();
        Kiosk kiosk = new Kiosk();
        kiosk.start();

   }
}

마무리

 

- switch 문 안에 게터를 사용할 때, 처음에는 menuItem.get(0); 으로해서 soutv 를 했을땐, 

kiosk_lv2.lv2.MenuItem@52cc8049

이와 같은 결과 값이 나왔습니다. 이 결과 값은 menuItem 의 0번 째에 있는 리스트의 주소라는 것을 알게되었습니다.

그래서 

menuItems.get(0).getName()

MenuItem 클래스 메서드 부분의 게터를 활용해 작성해 주었더니 정상적으로 List에 저장된 메모리를 가져오는 것을 알 수 있었습니다.