Troubleshooting: 무엇이 문제였는가?/본캠프 2주 차: 키오스크 만들기

3단계: "Variable 'menuItems' initializer 'new ArrayList<>()' is redundant"

writingforever162 2024. 11. 25. 20:10

[인용 및 참고 자료 출처]

1. 사전: "redundant", 네이버 영어사전, 네이버 영어사전, (2024.11.25)

 

[문제]

(링크: 첫 번째 노란 경고 해결 과정)

package com.example.kiosk.level3;

import java.util.*;
// Kiosk 클래스
public class Kiosk {
    Scanner sc = new Scanner(System.in);
    List<MenuItem> menuItems = new ArrayList<>();
    // [문제] 위의 코드 한 줄에서 노란 전구가 깜빡였다.

    public Kiosk(List<MenuItem> menuItems) {
        this.menuItems = menuItems;
    }

    public void start() {
        int index;
        for (index = 0; index < this.menuItems.size(); index++) {
            this.menuItems.get(index).getMenuInfo(index + 1);
        }
        System.out.println("0. 종료           | 종료");

        while (true) {
            System.out.println();
            System.out.println("메뉴판에서 원하는 햄버거 번호를 입력해 주세요.");
            System.out.print("만약 종료를 원하신다면 0을 입력해 주세요: ");
            index = sc.nextInt();

            if (index >= 5 || index == 0) {
                System.out.println("메뉴 번호 외에 다른 숫자를 입력했습니다. 프로그램을 종료합니다.");
                break;
            } else {
                System.out.println();
                menuItems.get(index - 1).getEachItem();
            }
        }
    }
}

첫 번째 전구는 껐으나 아직 두 번째 전구가 빛났다. 마찬가지로 튜터님께 여쭈어봤고, 메인(main)을 함께 확인한 뒤에 전구가 깜빡인 원인을 찾을 수 있었다.

 

[원인]

package com.example.kiosk.level3;
// 메인(main)
import java.util.*;

public class KioskLvThree {
    public static void main(String[] args) {

        List<MenuItem> menuItems = List.of(
                new MenuItem("BasicBurger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"),
                new MenuItem("GrilledThrill", 8.9, "베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"),
                new MenuItem("Cheeseburger", 6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"),
                new MenuItem("Hamburger", 5.4, "비프패티를 기반으로 야채가 들어간 기본버거")
        );
        // [원인] 클래스 밖인 메인에서 주입하는 방식을 이미 쓰는 중이었다.

        Kiosk test = new Kiosk(menuItems);

        test.start();
    }
}

원인은 메인(main)에 있었다. 메인에서 이미 외부에서 주입하는 방식을 쓰는 중인데 똑같은 행동을 Kiosk 클래스 내부에서 하라고 컴퓨터에 명령했다. 이런 이유로 new ArrayList<>()로 초기화할 필요가 없다고 프로그램이 알려준 것이었다. 사전에서 'redundant'는 '불필요한, 쓸모없는'을 의미한다.

 

[해결]

package com.example.kiosk.level3;
// Kiosk 클래스
import java.util.*;

public class Kiosk {
    Scanner sc = new Scanner(System.in);
    List<MenuItem> menuItems;
    // [수정 전] List<MenuItem> menuItems = new ArrayList<>();
    // [수정 후] List<MenuItem> menuItems;

    public Kiosk(List<MenuItem> menuItems) {
        this.menuItems = menuItems;
    }

    public void start() {
        int index;
        for (index = 0; index < this.menuItems.size(); index++) {
            this.menuItems.get(index).getMenuInfo(index + 1);
        }
        System.out.println("0. 종료           | 종료");

        while (true) {
            System.out.println();
            System.out.println("메뉴판에서 원하는 햄버거 번호를 입력해 주세요.");
            System.out.print("만약 종료를 원하신다면 0을 입력해 주세요: ");
            index = sc.nextInt();

            if (index >= 5 || index == 0) {
                System.out.println("메뉴 번호 외에 다른 숫자를 입력했습니다. 프로그램을 종료합니다.");
                break;
            } else {
                System.out.println();
                menuItems.get(index - 1).getEachItem();
            }
        }
    }
}

프로그램이 제안한 대로 수정하여 모든 노란 전구를 끄는 데 성공했다.

 

[수정 전] 자바(Java) 인텔리제이(IntelliJ) 노란 줄 경고 표시 1개 발생

[수정 후] 자바(Java) 인텔리제이(IntelliJ) 노란 줄 경고 표시 0개 발생