[Java 프로젝트: Calculator] 트러블 슈팅 TIL_7(마무리)

coldrice99·2024년 9월 11일
0

Lv3 구현을 위한 트러블슈팅 TIL

1. 프로젝트 전반 개요

Lv3 계산기는 기본적인 사칙연산 기능 외에도 Enum, 제네릭, Lambda & Stream 같은 고급 기능을 활용하여 확장된 계산기 기능을 구현하는 것이 목표였다. 하지만 Lv2에서 완벽히 작동하던 기능을 Lv3로 확장하면서 몇 가지 문제점과 트러블이 발생했다. 이를 해결하는 과정을 통해 배운 점들을 정리해보려고 한다.

2. 기존 Lv2의 복잡성

Lv3를 구현하기 전에, Lv2의 복잡성을 인식하게 되었다. 특히 불필요한 Operation 클래스의 존재입력 검증 로직의 분산은 유지보수에 불리하다고 느꼈다. 그래서 Operation 클래스를 제거하고 필요한 기능을 Calculator 클래스와 InputHandler 클래스에 적절히 통합하는 리팩토링을 진행했다.

3. 트러블슈팅: 제네릭과 Enum 사용

Lv3의 핵심은 다양한 타입의 숫자(int, double 등)를 처리하기 위해 제네릭을 도입하는 것이었다. 처음에는 제네릭을 사용하는 과정에서 T 타입을 어떻게 처리할지 고민이 많았다. 특히 제네릭을 사용하는 연산 메서드에서 타입 변환을 잘못 처리하면 연산이 제대로 이루어지지 않는 문제가 발생했다. 이를 해결하기 위해 doubleValue() 메서드를 사용하여 모든 숫자 타입을 Double로 변환하여 처리하는 방식으로 해결했다.

4. Lambda와 Stream 도입의 어려움

처음에는 연산 결과를 필터링하는 기능을 단순한 for문으로 구현하려 했으나, 요구사항에 맞게 Lambda & Stream을 활용해 더 간결하고 성능이 좋은 코드를 작성해야 했다. Lambda & Stream의 문법에 익숙해지는 것이 쉽지 않았지만, 결과적으로 stream() 메서드와 filter()를 사용해 저장된 연산 결과를 조건에 따라 필터링하는 방식으로 코드를 개선할 수 있었다. 특히 Lambda를 사용한 필터링이 코드의 가독성을 크게 향상시켰다.

5. InputHandler에서의 처리 문제

잘못된 입력을 받았을 때 다시 입력받는 기능은 사용자 경험을 개선하기 위해 필수적이었다. 하지만 처음에는 잘못된 입력을 받아도 제대로 처리하지 못하고 프로그램이 종료되는 문제가 발생했다. 이를 해결하기 위해 모든 입력 검증 로직을 InputHandler 클래스에 집중시켜, 잘못된 입력에 대한 예외 처리재입력 요청을 한 곳에서 처리하도록 했다. 이로 인해 코드의 구조가 더 단순하고 깔끔해졌다.

6. 마무리

Lv3 계산기를 구현하면서 많은 문제들을 겪었지만, 그 과정에서 제네릭, Enum, Lambda & Stream 같은 자바의 고급 기능을 실제로 적용해볼 수 있었다. 또한 Lv2의 복잡한 구조를 개선하고, 입력 검증을 한 곳에서 처리함으로써 가독성과 유지보수성을 크게 향상시킬 수 있었다.


https://github.com/coldrice99/Calculator.git

profile
서두르지 않으나 쉬지 않고

0개의 댓글