부트캠프에서 계산기 프로그램을 과제로 받고 그 안에서 있었던 문제 상황을 정리해보고자 한다
숫자 2개 와 기호 하나를 입력받고, 연산을 하는 프로그램이다
나는 잘못 입력해도 프로그램이 바로 꺼지지 않고 잘못 입력했다는 메세지를 콘솔 창에 출력해 사용자가 다시 연산을 할 수 있도록 하는 계산기를 구현하고 싶었다
1. 발단
입력에 있어서 오류가 있을 때 어떻게 처리할 것인지가 가장 큰 고민이었다
숫자 두개와 기호를 입력받을 때 입력이 잘못 입력되면 어떻게 에외 처리할 것인가?
2. 전개
내가 구현하고자 하는 에외처리는 다음의 2가지였다
1. 숫자 또는 기호의 입력값이 잘못되었다 출력
2. 결과값이 잘못되었다(없음) 출력
3. 위기
Switch 문에서 연산기호를 받아 경우를 나눌 때 4개 연산자 이외에 해당하는 연산자가 없으면 default 처리를 통해 콘솔에 "기호 정보가 잘못되었습니다" 라는 메세지를 출력했다
문제는 결과값이 없기 때문에 초기화된 0 값이 콘솔창에 출력되고, 리스트에 저장된다
어떤 방법으로 결과를 리턴할지 고민이었다
처음 시도한 방법은 매직 넘버를 사용하는 것 이었다
기호의 Switch 조건문에서 default 경우에 sign값에 "-1"값 부여했다
결과값이 없는 경우의 if문에서 논리연산자에 OR(||) 로 sign 값이 "-1" 일 경우를 추가해 예외처리했다
4. 절정
임의로 "-1"라는 값을 넣어서 경우를 추가하면 가독성이 좋지 않아 어떤 경우인지 알기 어렵다
boolean isResult 라는 변수를 이용해서 결과값이 정상인 경우에만 true 값을 유지 해보았다
그러나 이런 방법도 변수가 많아지면 제어해야할 것들이 많아져 좋은 방법은 아니다
5. 결말
결국 숫자 값으로는 처리할 수 없다고 생각해 calculate 메서드에 return 값을 정상이 아닐 때 null 값을 리턴하도록 했다boolean isResult 라는 함수를 만들어 연산 결과값을 넣고 값이 유효한지(validate) 검사했다
정상값이 아닌 경우 확인에 null 체크만 하면 되기 때문에 validate 함수가 큰 쓰임이 없었다
null값의 처리를 찾아보다가 자바의 Optional 활용해 보기로 마음 먹었다
Optional은 제네릭 타입을 받을 수 있어서 어떤 타입이든 저장한다
또한 Optional 을 리턴값으로 설정하면 Optional.isEmpty() 로 null값을 safe 하게 리턴할 수 있도록 한다
Optional.empty()를 null 대신에 리턴할 수 있는데, 이 값을 바로 쓰게 되면 NoSuchElementException 에외가 발생하게 된다 따라서 .orElseThrow(예외)를 통해 예외를 처리하는 것이 좋다
내가 선택한 방법은 아래와 같다

이번 기회를 통해 다양한 예외처리, 특히 null 값에 대한 처리 방법에 대한 공부가 많이 되었다
앞으로도 화이팅해서 차근차근 잘 해보고 싶다 ~
'[Kotlin&Spring] 5기 내일배움캠프' 카테고리의 다른 글
| [Kotlin&Spring] 5기 Abstract Class 와 Interface (1) | 2025.01.15 |
|---|---|
| [Kotlin&Spring] 5기 Java 부동소수점방식과 BigDecimal 타입 (0) | 2025.01.14 |
| [Kotlin&Spring] 5기 Enum에 대해 DB에서 바라보기 (1) | 2025.01.08 |
| [Kotlin&Spring] 5기 System.out.println() 메서드와 Logger (0) | 2025.01.07 |
| [Kotlin&Spring] 5기 Enum 열거형에 대해 (0) | 2025.01.06 |