[내일배움캠프] 계산기 구현 - level.01(2)

2024. 9. 5. 12:06내일배움캠프

 아침에 일어나니 어제 미처 파악하지 못한 부분이 떠올랐다. 요구사항을 다시 한 번 확인하니 사용자가 "exit" 를 입력하면 프로그램이 종료되는 것 까지는 맞게 구현을 했는데 문제는 내가 임의적으로 첫 입력 값이 "exit" 일 때 계산기를 종료 할 수 있게 로직을 작성했다는 것이다. 심지어 요구사항에는 어느 시점이든 사용자가 "exit" 를 입력하면 계산기가 종료될 수 있도록 작성할 것을 요구하는 걸로 보인다(직접적인 내용은 없지만 요구사항의 흐름상 해당 내용이 맞다고 판단했다). 수정한 코드는 여기서 확인 가능하다.

 

1. 수정 전

 현재 로직은 사용자의 "exit" 입력을 첫 번째 입력에서만 파악할 수 있다. 그래서 두 번째, 세 번째에서 사용자가 "exit" 를 입력해도 계산기가 종료되는 것이 아니라 '숫자' 또는 '연산자' 를 오입력 했다는 에러 메시지가 출력될 뿐이다.

현재 "exit" 를 파악하는 메서드와 사용 시점

 

현재의 코드인데, 이것을 입력을 받을 때마다 "exit" 를 입력했는지 확인해 사용자가 "exit" 를 입력하면 즉시 계산기를 종료할 수 있도록 바꾸고자 한다. 그러기 위해서는 현재 입력 값들을 받아 변수에 저장하는 로직을 변경할 필요가 있어 보인다.

 

 

2. 수정 후

 목표 설정 후 값을 입력받는 로직에 대한 부분을 수정하기로 하였다. 수정한 로직의 일부는 아래와 같다.

값 입력 로직 수정

 

값을 입력 받을 때마다 'checkExit(String)' 메서드를 호출하여 입력받은 값이 "exit" 인지 확인하도록 한 것 인데, 해당 방식 이외에 반복문을 사용하는 걸 고려해 보았지만 아래의 이유로 현재의 방식을 고수하게 되었다.

  • 선-입력 값 저장, 후-메서드 호출  : 'Scanner.nextLine()' 을 사용하기에 입력한 값을 변수에 저장해야 하므로 'Collection' 중 하나의 타입을 갖는 객체를 생성해 저장하게 될 것이다. 그러면 그 값을 다시 꺼내 'checkExit(String)' 을 호출하는 번거로움이 존재
  • 선-메서드 호출, 후-입력 값 저장 : 먼저 'checkExit(String)' 메서드를 호출하면 입력받은 값을 잃어버리게 됨

애초에 요구사항은 피연산자 2개, 연산자 1개를 입력 받는 것이고 추후에 확장을 통해 여러 연산을 한 번에 입력하는 경우에는 하나의 문자열로 입력을 받아 연산을 분리하는 메서드를 추가로 작성해야 할 듯해서 현재의 방식으로 수정을 하게 되었다.

세 번의 입력 중 어느 시점에도 "exit" 입력시 계산기 종료

 

이렇게 수정된 코드를 실행해 결과를 확인해보니 위의 실행 결과 이미지 처럼 한 번의 연산(세 번의 입력)에서 어느 시점에서라도 "exit" 를 입력하게 되면 계산기가 종료되는 것을 확인할 수 있다. 물론 기존의 연산에 대한 수행과 오입력에 대한 수행에 대한 부분도 다시 한 번 확인하였다.

 

 

3. 마무리

 추가적으로 시스템 메시지 출력시 메시지가 2줄 이상일 때 'System.out.println()' 구문을 2번 사용하는게 거슬려 문자열에 "\n" 을 사용하는 방식으로 해당 구문을 하나로 줄였다. 그러니...이제 정말 인터페이스 쓰러 가보자!