[내일배움캠프] Java 기초 문법으로 만드는 커머스 플랫폼 Step4.

김재진·2025년 12월 19일

내일배움캠프

목록 보기
22/70

1. Step4 캡슐화 및 코드 수정

  • 캡슐화 진행 및 오류사항 수정

2. Step3 에서 발생한 오류

  • 캡슐화는 처음부터 캡슐화 하여 작업했으므로 생략하였다.

  • 음수가 입력될 때의 예외처리는 했지만 양수이지만 리스트의 사이즈보다 큰 숫자를 입력 했을때 IndexOutofBoundsException이 발생하여 처리하는 방법을 찾아보았다.

  • 두 문제 다 리스트의 범위보다 큰 숫자를 입력해서 발생한 오류로서 원래는 "잘못된 입력입니다." 가 출력되어야 하나, 코드에 문제가 있어 오류가 나왔다.

 // 카테고리 선택
           try {
               if (input >= 1) { // 여기서 범위를 1 이상은 참으로 지정하였으나 리스트의 사이즈 보다 큰 수는 참이 될 수 없어 오류가 발생한것으로 보임
                   Category selectedCategory = categories.get(input - 1);
                   showCategoryMenu(selectedCategory, scanner);
               } else {
                   System.out.println("잘못된 입력입니다. 다시 선택해주세요.");
               }
           } catch (InputMismatchException e) {
               System.out.println("숫자를 입력해주세요.");
           }
       }
  • if문에서 조건을 설정하는데 문제가 있어 아래와 같이 조건을 수정하였다.

    // 카테고리 선택
              try {
                  if (input >= 1 && input <= categories.size()) { // 양수 이면서 카테고리 사이즈 이하의 숫자를 참으로 하여 범위를 수정하였다.
                      Category selectedCategory = categories.get(input - 1);
                      showCategoryMenu(selectedCategory, scanner);
                  } else {
                      System.out.println("잘못된 입력입니다. 다시 선택해주세요.");
                  }
              } catch (InputMismatchException e) {
                  System.out.println("숫자를 입력해주세요.");
              }
          }
  • 코드를 수정하여 오류가 발생하지 않았다.

  • 두번째 오류 또한 범위 지정이 문제가 되어 발생한 문제다.

    // 상품 선택
               try {
                   if (input >= 1) { // 여기서도 양수인 경우 참으로 지정하여 오류 발생
                       category.displayProductDetail(input - 1);
                   } else {
                       System.out.println("잘못된 상품 번호입니다.");
                   }
               } catch (InputMismatchException e) {
                   System.out.println("숫자를 입력해주세요.");
               }
           }
  • Category 클래스에서 리스트 사이즈를 불어와야 하기 때문에 Category 클래스에 새로운 기능을 추가했다.

    // 카테고리 내 상품 갯수 출력
       public int getProductCount() { 리스트의 사이즈를 출력
           return products.size();
       }
  • 새로운 기능을 사용해 오류가 발생한 코드를 수정했다.

     try {
           if (input >= 1 && input <= category.getProductCount()) {
               category.displayProductDetail(input - 1);
          } else {
               System.out.println("잘못된 상품 번호입니다.");
          }
     } catch (InputMismatchException e) {
          ystem.out.println("숫자를 입력해주세요.");
     }

    3. 마무리

  • 코드가 길어지고 클래스 수가 늘어나면서 점점 더 신경써야 할 것과 응용해야할 것들이 늘어나 어려워지는 것 같아 반복 숙달이 더 많이 필요할 것 같다. 도전 기능의 경우는 구현내용을 좀 더 분석하고 작업해야 할 것 같다. 아직 장바구니 기능이나 관리자 모드 같은 도전 기능을 구현 가능할지 잘 모르겠다.

profile
개발공부 처음해보는 사람

0개의 댓글