🔗 https://github.com/minjee2758/KioskProject.git
클래스 간 역할 분리가 잘안돼서 메뉴 관리와 주문 처리가 한 클래스에 혼재되어 있었다ㅠㅠ
메뉴 추가와 주문 저장 기능을 같은 클래스에서 처리하면서 각 클래스의 명확한 기능이 없었다. 또한 유지보수할 때, 메뉴 관련 로직을 수정하면 주문 처리 로직도 영향을 받는 문제가 발생했다.
사용자 입력이 잘못되었을 때 예외 처리가 부족하여 프로그램이 중단되거나, NullPointerException이 발생하는 일이 있었다.
try-catch를 사용해서 사용자 입력 오류를 안전하게 처리!!
예외 처리하여 사용자에게 올바른 입력을 요구하도록 하고 사용자에게 메시지를 제공하여 어떤 오류가 발생했는지 명확히 전달하도록 했다.
예시1
try {
if (lastSelect == 1){
Discount discount = new Discount();
discount.discountPrice(orderList.getTotalPrice());
System.exit(0);
}
else if(lastSelect==2){
System.out.println("다시 메뉴판으로 이동합니다");
break;
...생략}
}catch (IllegalArgumentException e){
System.out.println(e);
}
예시2
if (select>orderList.size() || select<1){
System.out.println("잘못된 입력입니다 다시 입력하세요");
removeItem();
}
사용자가 입력한 할인 유형(국가유공자, 장애인 등)을 프로그램에서 처리하는 것이 번거로웠고 입력 값을 문자열로 비교하여 처리하는 방식은 오타나 잘못된 입력을 유발할 수 있었다.
Enum을 사용하여 할인 유형을 미리 정의해두고 할인율을 처리했다.
사용자 입력 번호(int 입력)와 할인 유형을 매핑하여 변환할 수 있도록 로직을 추가했다.
PATRIOT(1, "국가유공자",0.1), //1번 국가유공자
SOLDIER(2, "군인",0.05), //2번 군인
STUDENT(3, "학생",0.03),//3번 학생
DEFAULT(4, "일반인",0); //4번 일반인
...생략
//선택한 번호의 할인을 찾아서 번호-할인유형 매칭
public static Double findDiscount(int num){
for (Customer type : Customer.values()){
if (type.getNum() == num){
return type.getDiscount();//찾은 할인 유형을 할인%로 반환해주기
}
}
throw new IllegalArgumentException("잘못된 번호를 입력했습니다."); //번호 잘못 입력했을때
}
프로그램을 설계할 때 클래스 구분이 명확하지 않아 역할이 겹치거나 중복되는 부분이 발생했다.
특히, 메뉴와 주문 관련 로직이 한 클래스에 섞여 있어 수정과 확장이 어려웠다.
클래스 간 결합도가 높아 한 부분을 수정하면 연관된 다른 클래스도 수정해야 하는 문제가 있었다.
응집도가 낮아 한 클래스 안에 여러 역할이 혼재되어 코드의 가독성과 유지보수성이 떨어졌다.
사용자가 잘못된 값을 입력하거나, 예상하지 못한 상황이 발생했을 때 적절히 처리하지 못했다.
특히 입력 값 검증이나 NullPointerException 방지를 위한 처리가 부족했다ㅠㅠ 시간이 좀 더 있었더라면 더 많은 예외처리를 할 수 있었을 텐데 아쉽다
Java의 스트림과 람다를 활용하여 데이터를 효율적으로 처리할 수 있었다.
특히 메뉴 리스트를 필터링하거나 할인율을 계산할 때 코드의 간결성을 높일 수 있어 좋았다
사용자가 입력한 할인 유형을 Enum으로 관리하여 코드의 가독성을 높이고, 실수를 방지할 수 있었다.
번호와 할인 유형을 매핑하여 입력 값을 처리하는 부분이 특히 유용했다.
프로젝트 수행 중 발생한 문제를 블로그에 기록했다. 매일 블로그에 내가 한 일을 정리하니, 글을 쓰면서 더 이해가 잘되는 부분도 생겨서 너무 좋았던 것 같다.
클래스의 역할을 명확히 분리하고, 단일 책임 원칙(SRP)을 준수하는 구조로 개선할 계획이다.
메뉴 관리, 주문 처리, 결제 이외의 기능들도 별도 클래스로 분리하여 책임을 명확히 해야겠다
사용자 입력 오류나 예상하지 못한 예외를 더욱 안전하게 처리할 수 있도록 다양한 예외처리를 더 고민해봐야겠다고 다짐했다.