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

음수가 입력될 때의 예외처리는 했지만 양수이지만 리스트의 사이즈보다 큰 숫자를 입력 했을때 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("숫자를 입력해주세요.");
}
코드가 길어지고 클래스 수가 늘어나면서 점점 더 신경써야 할 것과 응용해야할 것들이 늘어나 어려워지는 것 같아 반복 숙달이 더 많이 필요할 것 같다. 도전 기능의 경우는 구현내용을 좀 더 분석하고 작업해야 할 것 같다. 아직 장바구니 기능이나 관리자 모드 같은 도전 기능을 구현 가능할지 잘 모르겠다.