본문 바로가기

카테고리 없음

TIL 20 키오스크 트러블 슈팅

1.각 단계로 돌아가기

  • 목적 해당 문제 처리하고 나오기 
  • why?  menuitem을 선택하는 숫자를 입력-> Menu X menuitemO을 보여주기 
  • 구성
더보기
while(stack<5) {
    try {
        kioskFunction.printMenu(menu);
        System.out.print("메뉴를 선택해주세요: ");
        int menuNum2 = getValidInt(scanner) - 1;
        menuItem = kioskFunction.printSelection(menu, menuNum2);
        break;
    } catch (Exception e) {
        System.out.println(e.getMessage());
        stack++;
        if(stack==4){
            start();
        }
    }
  • 트러블 슈팅
더보기

배경 : 메뉴 아이템 선택시 발생하는 문제 해결

발단 : 해당 부분에서 문제가 발생했지만 이는 전체메뉴로 귀결된다는 것은 바람직하지 않다고 생각됐습니다.

전개: try-catch문에 while문을 결합하여 해당 문제를 해결하려고 하였지만 탈출이 불가능한 while(true)문이 됐습니다,

절정: 임의의 수 stack을 사용해   while(true)문 5번정도 잘못입력하면 탈출하게 하였습니다,

결말: 완벽한 해결은 아니라고 생각됩니다.왜냐하면 예외처리에 대한 탈출시 return -1을 함으로 잘못된 입력값으로 전체 메뉴로 돌아간다는 점때문입니다. 이를 위해서는 if-else문을 추가해야 하는 것인가?에 대한 고민을 하게 됐습니다.

 

 

2. IllegalArgumentException 각각의 처리

  • 목적  예외처리
  • why?  catch  IllegalArgumentException e를 작동시켜서 해당문제를 표현하기 위해서이다.
  • 구성
더보기
    public Menu printCategory(int i) {
        try {
            Menu menu = menuDataBase.getMenuList().get(i);
            System.out.println(menu.getCategory()); // 카테고리 출력
            return menu;
        } catch (IndexOutOfBoundsException e) {
            throw new IllegalArgumentException("⚠ 메뉴 선택 범위를 초과했습니다.");
        }
    }

    /**
     * 특정 메뉴의 모든 메뉴 아이템을 출력하는 메서드
     * @param menu 출력할 메뉴 객체
     */
    public void printMenu(Menu menu) {
        for(int i=0; i<menu.getMenuItems().size(); i++){
            MenuItem menuItems=menu.getMenuItems().get(i);
            System.out.print((i+1)+". ");
            menuItems.printMenuItem();
        }
    }

    /**
     * 특정 메뉴에서 선택한 메뉴 아이템을 출력하고 반환하는 메서드
     * @param menu 메뉴 객체
     * @param i 선택한 메뉴 아이템의 인덱스
     * @return 선택한 메뉴 아이템 객체
     * @throws IllegalArgumentException 메뉴 아이템 선택 범위를 초과한 경우 예외 발생
     */
    public MenuItem printSelection(Menu menu, int i) {
        try {
            MenuItem selectedItem = menu.getMenuItems().get(i);
            int selectedpirce= (int)(selectedItem.getPrice()*1000);
            System.out.println(selectedItem.getName() + " " + selectedpirce+ "원을 선택하셨습니다.");
            return selectedItem;
        } catch (IndexOutOfBoundsException e) {
            throw new IllegalArgumentException("⚠ 메뉴 아이템 선택 범위를 초과했습니다.");
        }
    }
}
MenuItem menuItem=null;
int stack=0;
while(stack<5) {
    try {
        kioskFunction.printMenu(menu);
        System.out.print("메뉴를 선택해주세요: ");
        int menuNum2 = getValidInt(scanner) - 1;
        menuItem = kioskFunction.printSelection(menu, menuNum2);
        break;
    } catch (Exception e) {
        System.out.println(e.getMessage());
        stack++;
        if(stack==4){
            start();
        }
    }
}
  • 트러블 슈팅
더보기

배경 : 변수선언만 했을 때 문제발생

           ->java: variable menuItem might not have been initialized

발단 :해당 문제에 대한 검색을 실시하였습니다.

전개: 해당 선언이 초기화가 되지 않아서 생기는 문제라는 것을 확인했습니다,

절정: MenuItem menuitem=null이라고 초기값 설정으로 문제해결

결말: 초기화 선언을 다른 int값에도 적용을 하였는데 옳은 선택인지는 아직도 잘 모르겠으며 또한 맨 처음엔 이 문제가 발생하지 않았다는 점에서 습관화 하면 코드 수정을 할 때 좋지 않을까 생각하게 됐습니다.

 

3. 메뉴 전체취소

  • 목적  메뉴의 전체취소
  • why?  5번을 눌렀을 때, 메뉴를 전체 취소 시키기 위함이다
  • 구성 
더보기
public void totalreomeCart(){
    cartlist.clear();
}
case 5:
    if (!cart.getCartlist().isEmpty()) {
       cart.totalreomeCart();// 장바구니 비우기
        System.out.print("장바구니가 비워졌습니다.");
    } else {
        System.out.print("⚠ 선택하신 제품이 없습니다\n");
    }
    break;
  • 트러블 슈팅
더보기

초반 생각

List<MenuItem> cartlist =cart.getCartlist();
int cartlistSize=cartlist.size()-1;
for (int i=cartlistSize;i<=0;i--){
    cartlist.remove(i);
}
cart.setCartlist(cartlist);

배경 :위 코드를 실행->IndexOutOfBoundsException 

발단 :리스트 삭제 시키는 방법이라고 검색.

전개: 아래에 코드처럼 구성을 하여서 문제를 해결하였습니다. 

List<MenuItem> cartlist =cart.getCartlist();
cartlist.clear();
cart.setCartlist(cartlist);

절정: kiosk에 자체적으로 기능이 있다고 판단하여서 객체 지향적이지 않다고 생각하여서 구성의 단계처럼 구현하였습니다.

결말: 코드의 기능 같지만, 저는 아직 초심자이기 때문에 저런 하나하나의 생각이 중요하다고 판단하였습니다. 이는 나중에 팀프로젝트를 할 때 더욱 빛나기에 지금은 생각이지만 후엔 습관이 될 수 있도록 노력해야한다고 생각됩니다.

 

참고자료

더보기