키오스크 프로젝트 Lv2

서연·2025년 5월 1일

Java

목록 보기
25/36

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

⚙️ 구조

  • MenuItem 클래스 생성하기
    • 설명 : 개별 음식 항목을 관리하는 클래스입니다. 현재는 햄버거만 관리합니다.
    • 클래스는 이름, 가격, 설명 필드를 갖습니다.

  • main 함수에서 MenuItem 클래스를 활용하여 햄버거 메뉴를 출력합니다.
    • MenuItem 객체 생성을 통해 이름, 가격, 설명을 세팅합니다.
      • 키워드: new
    • List를 선언하여 여러 MenuItem을 추가합니다.
      • List<MenuItem> menuItems = new ArrayList<>();
    • 반복문을 활용해 menuItems를 탐색하면서 하나씩 접근합니다.

📄 코드

Lv2Main.java

package Lv2;

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

public class Lv2Main {
    public static void main(String[] args) {
        List<Lv2MenuItem> menuItems = new ArrayList<>();

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

        Scanner scanner = new Scanner(System.in);

        System.out.print("햄버거 메뉴를 보시려면 'hamburger'를 입력해주세요. : ");
        String shakeshackMenu = scanner.nextLine();

        // 리스트에 들어가 있는 값을 for문을 통해 출력
        System.out.println("[ SHAKESHACK MENU ]");
        for (int i = 0; i < menuItems.size(); i++) {
            System.out.print(i + 1 + ". ");
            System.out.println(menuItems.get(i));
        }
        System.out.println("0. 종료");

        int num; // 메뉴를 선택하기 위한 숫자 변수 생성

        do { // 0을 입력하기 전까지 원하는 메뉴 선택
            System.out.println("\n");
            System.out.print("원하는 메뉴를 선택해주세요. (0을 입력하시면 종료됩니다.): ");
            num = scanner.nextInt();
            if (num == 1) {
                System.out.println(menuItems.get(0));
            } else if (num == 2) {
                System.out.println(menuItems.get(1));
            } else if (num == 3) {
                System.out.println(menuItems.get(2));
            } else if (num == 4) {
                System.out.println(menuItems.get(3));
            }
        } while (num != 0);
        System.out.println("프로그램을 종료합니다."); // 0을 입력해 do-while 문을 빠져나왔을 때 실행

    }
}

Lv2MenuItem.java

package Lv2;

public class Lv2MenuItem {

    // 1. 속성
    String name;
    double price;
    String foodDetails;

    // 2. 생성자
    public Lv2MenuItem(String name, double price, String foodDetails) {
        this.name = name;
        this.price = price;
        this.foodDetails = foodDetails;

    }

    // 3. 기능
    // 주소값을 출력하는 것이 아닌 리스트안에 들어있는 값을 출력하기 위해 toString 메서드 작성
    public String toString() {
        return name + " | " + "W" + price + " | " + foodDetails;
    }
}

⚠️ 트러블 슈팅 ⚠️

문제 상황

List에 담긴 값 출력 시 주소값이 나오는 상황

문제 이유

List에 담긴 값이 Heap 영역에 저장되기 때문에 자바에서 객체를 출력할 때 기본적으로 toString() 메서드가 호출되는데 만약 toString()을 오버라이드하지 않으면 객체의 주소값이 출력된다.

해결 방법

Lv2Menuitem 클래스에 toString() 메서드를 만들어 주소값을 출력하는 것이 아닌 List 안에 들어있는 살제 값을 출력하도록 구현했다.

💡 느낀점

toString() 메서드를 오버라이드하는 것이 객체를 출력할 때 매우 중요한 부분이라는 것을 배우게 되었다. 이를 통해 더 직관적이고 이해하기 쉬운 방식으로 출력을 만들 수 있다는 점에서 객체 지향 프로그래밍의 중요성을 더욱 느꼈다.

🔗 GitHub

프로젝트 코드 보러 가기

0개의 댓글