사칙연산 계산기 과제를 진행하면서 크고 작은 문제들을 마주했고, 그것들을 해결하며 코딩을 +1 더 알게 된 것 같다. 오늘은 그 내용을 정리해보려 한다.
현상:
피연산자, 연산자, 데이터 조회 여부, 저장 여부, 삭제 여부 등등 사용자로 부터 여러 입력을 받아 계산기가 구동하도록 코드를 짰기 때문에, 적절하지 않은 입력이 들어왔을 때 예외가 발생하며 프로그램이 비정상적으로 종료되었다. 이로 인해 예외 이후의 코드가 실행되지 못하고 사용자는 프로그램을 재실행해야만 하는 문제가 있었다.
원인:
Scanner.nextInt() 메서드는 입력값이 정수형이 아닌 경우 InputMismatchException을 발생시킨다. 사용자가 잘못된 입력을 하는 경우는 그래도 예외의 원인을 찾기 쉽지만, 입력 버퍼에 개행 문자(\n)이 남아있는 경우에는 이유도 모른채 예외가 발생하곤 한다. 또한 해당 예외를 처리하지 않으면 프로그램이 강제로 종료된다.
해결 과정:
1. 예외 처리 추가
try-catch 블럭을 추가하여 예외가 발생했을 때 프로그램이 종료되지 않고 사용자에게 재입력을
요청하도록 했다.

결과:
이러한 수정 작업을 통해 사용자 입력 오류가 발생하더라도 프로그램이 종료되지 않고 안정적으로 작동하도록 개선되었으며, 잘못된 입력값으로 인한 무한 루프 문제가 해결되어 프로그램의 사용성을 높였다.
현상:
저장된 연산결과가 없는 상태에서 사용자가 결과를 조회하려고 getList() 메서드를 호출하면 IndexOutOfBoundsException이 발생하며 프로그램이 종료되었다.
원인:
getList() 메서드는 내부적으로 리스트의 마지막 요소를 가져오기 위해 list.get(list.size() - 1)을 호출한다. 그러나 리스트가 비어 있는 경우 list.size()는 0이 되고, 인덱스가 -1로 계산되어 예외가 발생한다. 이는 비어 있는 리스트에 접근하려는 시도가 문제의 핵심
해결 과정:
getList() 메서드에 리스트가 비어 있는지 확인하는 조건문을 추가했다. 만약 리스트가 비어 있다면 예외를 발생시키는 대신 사용자에게 "저장된 연산 결과가 없습니다."라는 메시지를 출력하고 null을 반환하도록 수정

결과:
리스트가 비어 있을 때 발생하던 예외를 방지하고, 사용자에게 결과가 없음을 명확히 알릴 수 있도록 프로그램의 안정성과 사용자 경험을 개선. 이는 이후 다른 메서드(removeResult 등)에서도 동일한 문제가 발생하지 않도록 기본적인 방어 코드를 추가하였다.