230601_ 개인 과제

hoy_·2023년 6월 1일
0

Today, I Learned

목록 보기
11/36

1. 오늘의 일정

  1. 개인 과제 키오스크의 전체적인 구조 수정

  2. 추가 기능 구현




2. 배운 내용

  1. 중복 코드를 제거하고 보기 편하게 바꿔 나름의 클린코딩을 해봤다.




3. 발생한 오류

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문의 한 블럭만 올렸을 뿐인데 보기만 해도 아주 어지럽다.


  1. 어떻게든 굴러가게만 하자고 다짐하며 짰던 두 번째 코드의 일부다.
    cart.addOrder()에서 listnum값을 받아 orderList에 저장하도록 구현되어 있다.
    어떤 메뉴를 골랐는지를 알아야 주문 내역에 추가할 수 있기 때문에 저렇게 조건문으로 하나하나 거르도록 만들었다. 카테고리마다 5-6개의 메뉴가 있으니 그만큼 if문 안의 if문도 늘어나고...


완성하고 보니 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);

같은 한 블럭인데 이렇게나 다르다.

  1. 왜 이 생각을 못했을까?
    입력을 int로 바꾸고 input = menuNum을 그대로 cart.addOrder()로 전달한다.
    기능적으로 엉성해도 어떻게든 한 번 만들고 보니 코드를 더 간결하게 줄일 수 있는 방법이 떠오른 것 같다.

  2. 카테고리마다 들어있는 메뉴의 수가 달라서 메인으로 돌아가는 마지막 번호를 지정해줬는데, 번호의 마지막이 아니라 c나 x등 다른 문자열로 나갈 수 있게 한다면 조금 더 간결해질 수 있다. 메서드도 깔끔하게 만들 수 있을 것 같은데 이건 차차 생각해보기로.




4. 앞으로의 나는

  1. 구조적 문제가 심해 전에 썼던 코드는 갈아엎고 새로 작성했다. 키오스크라는 같은 주제로 코드를 세 번 작성해보는데, 정말 신기하게도 적으면 적을 수록 실력이 는다는 생각이 든다!

  2. 실행 로직을 줄이고 생성자와 상속, 형변환을 적극 활용한 게 특히나 마음에 든다. 제출 기간이 얼마 남지 않았는데 선택 기능을 조금 더 구현해봐야겠다.

profile
배우는 사람

0개의 댓글