Hyeok의 웹 개발 블로그

<2025.03.10> 키오스크 과제 Lv2 본문

TIL/Java

<2025.03.10> 키오스크 과제 Lv2

Yhyeok 2025. 3. 10. 21:18

▶ 키오스크 과제 Lv 2 를 구현해 보았습니다

 

조건 

- MenuItem 클래스 생성하기

   1. 개별 음식 항목을 관리하는 클래스입니다. 현재는 햄버거만 관리합니다.

   2. 클래스는 이름, 가격, 설명 필드를 갖습니다.MenuItem 클래스 생성하기

 

- main 함수에서 MenuItem 클래스를 활용하여 햄버거 메뉴 출력
  1. MenuItem 객체 생성을 통해 이름, 가격, 설명 을 세팅

- List 를 선언하여 여러 MenuItem을 추가

- 반복문을 활용해 menuItems 를 탐색하면서 하나씩 접근


우선 MenuItem 클래스를 생성해서 속성 부분에 이름, 가격, 설명 필드를 생성하였습니다.

public class MenuItem {
    // 속성
    public String name;
    public double price;
    public String description;

 

 

그리고 main 클래스에 활용하기 위해 생성자를 생성했습니다.

// 생성자
MenuItem(String name, double price, String description){
    this.name = name;
    this.price = price;
    this.description = description;
}

 

main에 MenuItem 클래스를 활용하여 햄버거 메뉴를 출력하였습니다.

MenuItem shackBuger  = new MenuItem("ShackBuger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거");
MenuItem smokeShack = new MenuItem("SmokeShack",8.9,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거");
MenuItem cheesebuger = new MenuItem("Cheesebuger",6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거" );
MenuItem hamburger = new MenuItem("Hamburger", 5.4,"포테이토 번과 비프패티, 치즈가 토핑된 치즈버거" );

 

그리고 List를 선언하여 여러 MenuItem을 추가했습니다.

List<MenuItem> menuItems = new ArrayList<>();
menuItems.add(new MenuItem("ShackBuger",6.9,"토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
menuItems.add(new MenuItem("SmokeShack",8.9,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
menuItems.add(new MenuItem("Cheesebuger",6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"));
menuItems.add(new MenuItem("Hamburger", 5.4,"포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"));

 

마지막 반복문을 활용해 menuItems 에 접근했습니다.

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.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;

마무리

-  Lv 2를 구현하는 중 클래스와 List의 개념이 부족하다는 것을 인지했습니다. 

- 반복문을 작성할 때,  menuItem.get(0)을 넣으면 리스트에 저장된 정보가 나올 것이라 생각했습니다.
  

kiosk.lv2.MenuItem@52cc8049

하지만, 이러한 값이 나오게되었고 이 값은 저장 된 주소의 값인 것을 알게 되었습니다.
그래서 이것을 해결하기 위해 

menuItems.get(0).getName()

뒤에 getName()을 붙여 해결했습니다.

 

- 해결하는 과정에서 MenuItem 클래스 메서드 부분에 

String getName(){
    return this.name;   
}
double getPrice(){
    return this.price;
}
String getDescription(){
    return this.description;
}

게터를 작성한 부분에 오류를 찾게 되었습니다. 이렇게 작성하기 전에는

String getName(){
    return getName();  
}

이렇게 작성을 했었습니다. 이렇게 작성하고 main 클래스를 Run 했더니 무한 반복하는 오류를 발견했습니다.
이에 대해 피드백을 받은 결과 메서드 return 값이 getName이면 생성자 부분 this.name  =name; 받고 다시 getName을 받고 하면서 무한 반복이 진행되는 것을 알게 되었습니다.

'TIL > Java' 카테고리의 다른 글

<2025.03.12> ENUM, 동등성과 동일성  (0) 2025.03.12
<2025.03.11> 키오스크 과제 Lv 3  (0) 2025.03.11
<2025.03.07> 키오스트 과제 Lv1  (0) 2025.03.07
<2025.03.06>Java 챕터 [3-1] ~[3~3]  (0) 2025.03.06
<2025.03.05> 계산기 과제 Lv.2  (0) 2025.03.05