개인 과제 키오스크의 전체적인 구조 수정
추가 기능 구현
중복 코드를 제거하고 보기 편하게 바꿔 나름의 클린코딩을 해봤다.
if (input.equals("1")) { printMenu.printTitle("Coffee"); printMenu.printMenu(allMenu.coffeeList()); System.out.println("6. 돌아가기"); System.out.println(); System.out.print("입력 : "); String input2 = sc.nextLine().trim(); if (input2.equals("1")) { cart.addOrder(allMenu.coffeeList(), 1); String isYorN = sc.nextLine().trim(); if (isYorN.equals("1")) { cart.cartOrder(allMenu.coffeeList(), 1); } else { System.out.println("메인화면으로 돌아갑니다."); } } else if (input2.equals("2")) { cart.addOrder(allMenu.coffeeList(), 2); String isYorN = sc.nextLine().trim(); if (isYorN.equals("2")) { cart.cartOrder(allMenu.coffeeList(), 2); } else { System.out.println("메인화면으로 돌아갑니다."); } } else if (input2.equals("3")) { cart.addOrder(allMenu.coffeeList(), 3); String isYorN = sc.nextLine().trim(); if (isYorN.equals("1")) { cart.cartOrder(allMenu.coffeeList(), 3); } else { System.out.println("메인화면으로 돌아갑니다."); } } else if (input2.equals("4")) { cart.addOrder(allMenu.coffeeList(), 4); String isYorN = sc.nextLine().trim(); if (isYorN.equals("1")) { cart.cartOrder(allMenu.coffeeList(), 4); } else { System.out.println("메인화면으로 돌아갑니다."); } } else if (input2.equals("5")) { cart.addOrder(allMenu.coffeeList(), 5); String isYorN = sc.nextLine().trim(); if (isYorN.equals("1")) { cart.cartOrder(allMenu.coffeeList(), 5); } else { System.out.println("메인화면으로 돌아갑니다."); } } else if (input2.equals("6")) { System.out.println(); System.out.println("메인화면으로 돌아갑니다."); } else { System.out.println(); System.out.println("메뉴판을 보고 다시 입력해주세요."); }if문의 한 블럭만 올렸을 뿐인데 보기만 해도 아주 어지럽다.
cart.addOrder()에서 list와 num값을 받아 orderList에 저장하도록 구현되어 있다.
완성하고 보니 if문은 총 47개, 코드도 279줄이나 된다.
해결

if (input == 1) { printMenu.printTitle("Coffee"); printMenu.printMenu(allMenu.coffeeList()); System.out.println("6. 돌아가기"); System.out.println(); System.out.print("입력 : "); int menuNum = sc.nextInt(); if (menuNum == 6) { System.out.println("메인화면으로 돌아갑니다."); System.out.println(); } else cart.addOrder(allMenu.coffeeList(), menuNum);같은 한 블럭인데 이렇게나 다르다.
왜 이 생각을 못했을까?
입력을 int로 바꾸고 input = menuNum을 그대로 cart.addOrder()로 전달한다.
기능적으로 엉성해도 어떻게든 한 번 만들고 보니 코드를 더 간결하게 줄일 수 있는 방법이 떠오른 것 같다.
카테고리마다 들어있는 메뉴의 수가 달라서 메인으로 돌아가는 마지막 번호를 지정해줬는데, 번호의 마지막이 아니라 c나 x등 다른 문자열로 나갈 수 있게 한다면 조금 더 간결해질 수 있다. 메서드도 깔끔하게 만들 수 있을 것 같은데 이건 차차 생각해보기로.
구조적 문제가 심해 전에 썼던 코드는 갈아엎고 새로 작성했다. 키오스크라는 같은 주제로 코드를 세 번 작성해보는데, 정말 신기하게도 적으면 적을 수록 실력이 는다는 생각이 든다!
실행 로직을 줄이고 생성자와 상속, 형변환을 적극 활용한 게 특히나 마음에 든다. 제출 기간이 얼마 남지 않았는데 선택 기능을 조금 더 구현해봐야겠다.