오늘은 팀프로젝트 하면서 배웠던 꿀팁을 쓰려고 한다.
밑의 메소드는 스캐너로 값을 받고
OrderList <- Oder <- Product 이 순으로 객체들을 리스트에 넣어줬는데
리스트 안의 오더를 돌면서 getNumber라는 오더의 주문 번호 필드를 반환하는 메소드가 스캐너의 값이랑 맞으면 지워주는 메소드다
private void waitingOrderInput() throws InterruptedException {
System.out.println("\n완료처리할 대기 주문 번호 입력\n");
int input = Integer.parseInt(scanner.nextLine());
List<Order> waitingOrderList = getWaitingOrderList();
for (Order currentOrder : waitingOrderList) {
if (input == currentOrder.getNumber()) {
currentOrder.changeWaitingToCompleted();
}
}
System.out.println("\n" + input + "번 주문 완료 처리 되었습니다.\n");
printWaitingOrder();
}
근데 여기서 문제가 있었다.
아무 값을 넣어도 걸러주는 기능이 없어서 5621을 입력하면
"5621번 주문 완료 처리 되었습니다"
하고 뜨는 것이였다.
private void waitingOrderInput() throws InterruptedException {
System.out.println("\n완료처리할 대기 주문 번호 입력\n");
int input = Integer.parseInt(scanner.nextLine());
List<Order> waitingOrderList = getWaitingOrderList();
for (Order currentOrder : waitingOrderList) {
if (input == currentOrder.getNumber()) {
currentOrder.changeWaitingToCompleted();
} else if (input != currentOrder.getNumber()) {
System.out.println("잘못된 값을 입력했습니다.");
}
}
System.out.println("\n" + input + "번 주문 완료 처리 되었습니다.\n");
printWaitingOrder();
}
이렇게 적어도
private void waitingOrderInput() throws InterruptedException {
System.out.println("\n완료처리할 대기 주문 번호 입력\n");
int input = Integer.parseInt(scanner.nextLine());
List<Order> waitingOrderList = getWaitingOrderList();
for (Order currentOrder : waitingOrderList) {
if (currentOrder.getStatus == OrderStatus.WAITING) {
if (input == currentOrder.getNumber()) {
currentOrder.changeWaitingToCompleted();
}
} else {
System.out.println("잘못된 값을 입력했습니다.")
}
}
System.out.println("\n" + input + "번 주문 완료 처리 되었습니다.\n");
printWaitingOrder();
}
이렇게 적어도 내가 원하는 대로 출력이 되지 않는다!! ( 저 위의 두 코드 말고도 엄청 많은 테스트를 했었다.. 6~8개 있었나.. 디버깅도 계속 해보느라 시간이 오래 걸렸다.. 지금은 기억나는대로 씀)
만약에 주문 번호가 (1,2,3)으로 세개고 내가 2를 지운다고 하면
잘못된 값을 입력했습니다.
2번 주문 완료 처리 되었습니다.
잘못된 값을 입력했습니다.
계속 이렇게 되는 거다.
이거 어떡하지...
계속 찾아보고 또 찾아봤다.
근데도 안 나왔다.
이건 분명히 기술적인 문제라기보다는 센스의 문제다..
팀원 분들께 여쭤보니 boolean으로 처리해주는 게 좋겠다고 하셨다.
boolean..?
private void waitingOrderInput() throws InterruptedException {
System.out.println("\n완료 처리 할 대기 주문 번호 입력\n");
int input = Integer.parseInt(scanner.nextLine());
List<Order> waitingOrderList = getWaitingOrderList();
boolean isRemoved = false;
for (Order currentOrder : waitingOrderList) {
if (input == currentOrder.getNumber()) {
currentOrder.changeWaitingToCompleted();
System.out.println("\n" + input + "번 주문 완료 처리 되었습니다.\n");
isRemoved = true;
break;
}
}
if (!isRemoved) {
System.out.println("잘못된 값을 입력했습니다.");
}
printWaitingOrder();
}
for문으로 전부다 보는데 만약 인풋값이랑 오더의 넘버가 일치하면 boolean을 true로 바꾸고 for문을 빠져나온다
다 돌았는데 없으면 잘못된 값을 입력했다고 출력한다
이렇게 간단한 문제였다니...
이런 센스들은 코딩 테스트에도 많이 쓰이고 개발자들이 자주쓰는 기술..? 센스..? 라고 한다.
오늘 상당히 머리 아프게 했던 이 메소드..
제목은 뭐라할지 모르겠음
절대 잊지 않으려고 적어본다.
'TIL' 카테고리의 다른 글
TIL 2023-10-30 클래스간의 관계 결정하기 (0) | 2023.10.30 |
---|---|
TIL 2023-10-27 배열 선언 시 List와 ArrayList (0) | 2023.10.27 |
TIL 2023-10-25 static이란?? static 정리! (0) | 2023.10.25 |
TIL 2023-10-24 Github Pull Request 가이드, 팀 협업!! (0) | 2023.10.24 |
TIL 2023-10-23 Class별 역할 충실히하기 / 키오스크 프로젝트 완료 (0) | 2023.10.23 |