이슈 사항들
1)
발단 : 연산자 입력부 구현
전개 : 코드 실행 시에 연산자를 입력하고 연산이 수행되었습니다.
위기 : 연산자 입력 받고 나서 연산 수행되고 종료 여부 묻는 부분이 넘어갔습니다.
절정 : 마지막에 연산자 입력 받고 나서 의 엔터를 처리했습니다. => 입력 받고 sc.nextLine();을 추가
결말 : 해당 오류가 해소되었습니다.
2)
발단: while 문으로 무한 반복 코드 구현
전개 : 코드 수행 후 종료하려면 exit을 입력받도록 했습니다.
위기 : 계속하려면 엔터를 입력하는 게 뭔가 개선하고 싶은 부분이었습니다.
절정 : exit 입력받을 시에 종료하고 아닐 시에 뭘 할지 고민하다가 다음과 같이 작성했습니다.
결말 : 직관적이게 적어서 입력이 명확해진 것 같습니다.
System.out.println("종료하시겠습니까?(yes/no)");
if (sc.nextLine().equals("yes")) break;
3)
발단 : 결과값에 연산 결과 저장
전개 : res에 연산결과를 저장하도록 아래와 같이 구현했습니다.
위기 : res가 redundant 라고 경고문구를 만났습니다.
절정 : swith 기존 표기법으로 변경하였습니다.
결말 : res에 과잉없이 연산을 수행할 수 있었습니다.
int res = switch (op) {
case '+' -> firstNumber + secondNumber;
case '-' -> firstNumber - secondNumber;
case '*' -> firstNumber * secondNumber;
case '/' -> firstNumber / secondNumber;
case '%' -> firstNumber % secondNumber;
default -> 0;
};
4)
발단 : 컬렉션 선정
전개 : 연산 결과를 저장할 컬렉션을 설정해야 했습니다.
위기, 절정 : 컬렉션을 뭘로 할 지 고민하다가 순서 고려, 처음 들어온 데이터 순으로 삭제를 고려했을 때 Queue가 제일 적합하다고 생각하여 Queue로 진행하였다. 그리고 딱히 연산결과 리스트를 탐색할 일은 없을 것 같기도 해서..
결말 : 처음 들어온 순서로 삭제되기에 삭제도 쉬웠고, 딱히 탐색을 수행할 일도 없어서 적절했던 것 같습니다.
5)
발단 : enum 타입 추가
전개 : enum 타입을 추가하면서 연산 시에 enum 타입의 연산자로 수행하도록 하였습니다.
위기 : '+' 이 부분에 원래 ADD 이걸 넣었는데 오류가 났습니다.
절정 : char 타입의 op가 어찌됐든 ADD랑 동일한 게 아니다 보니 그런 것 같다는 생각이 들어 아래와 같이 변경했습니다.
결말 : 정상적으로 작동하는 것을 확인할 수 있었습니다.
switch (op) {
case '+':
res = OperatorType.ADD.operate(firstReal, secondReal);
break;
case '-':
res = OperatorType.SUBTRACT.operate(firstReal, secondReal);
break;
case '*':
res = OperatorType.MULTIPLY.operate(firstReal, secondReal);
break;
case '/':
res = OperatorType.DIVIDE.operate(firstReal, secondReal);
break;
case '%':
res = OperatorType.REMAIN.operate(firstReal, secondReal);
break;
};
6)
발단 : 연산자 입력
전개 : 연산자 입력받을 때 연산자 외의 타입이 입력되는 경우가 있었습니다.
위기 : 그 때 그냥 넘어가고 연산 결과가 0으로 출력되었습니다.
절정 : 그래서 연산자가 아닐 경우 잘못된 연산자로 출력되게 구현했습니다.
private static final String OPERATION_REG = "[+\\-*/]";
if (!Pattern.matches(OPERATION_REG, Character.toString(op))) {
System.out.println("잘못된 연산자입니다. 처음부터 다시 입력하세요.");
continue;
}
7)
발단 : 제네릭 구현
전개 : 제네릭을 구현하기 위해 Int형 타입에 제네릭을 부여했습니다.
위기 : enum 타입이 컴파일되면서 정의되고, 제네릭은 코드 실행 중에 타입이 정해지다보니 두 개를 어떻게 적절히 사용할 지 어려움이 생겼습니다.
절정 : 그래서 제네릭 구현은 못 하고 double로 진행하였습니다..
'과제리뷰' 카테고리의 다른 글
[CH4개인과제] 일정 관리 앱 서버 (1) | 2024.11.08 |
---|---|
[숫자야구] 피드백 이후 개선 (0) | 2024.10.29 |
[계산기] 피드백 이후 개선 (0) | 2024.10.29 |
[CH3개인과제] 숫자 야구 (0) | 2024.10.23 |
[CH1팀과제] 팀소개 페이지 프로젝트 (0) | 2024.10.07 |