FireDrago

[프리코스] 1주차 회고 본문

우아한테크코스

[프리코스] 1주차 회고

화이용 2024. 10. 26. 19:29

https://github.com/woowacourse-precourse/java-calculator-7/pull/389

 

[문자열 덧셈 계산기] 이용화 미션 제출합니다. by Firedrago95 · Pull Request #389 · woowacourse-precourse/java

기능구현 목록 덧셈할 문자를 입력받는다. 빈문자열 검사한다. 빈문자열인 경우 빈 List 반환한다. 구분자 , : 사용했는지 검사한다. [예외] , : 사용한 경우 List로 변환한다. [예외] 커스텀 구분자

github.com

 

정규표현식의 두가지 활용법

 

이번 미션을 통해 정규표현식을 사용하여 입력값을 검증하고, 형식에 맞는 데이터를 추출할 수 있다는 점을 배웠습니다.

처음 구현을 구상할 때, 여러 경우의 수를 모두 검증하려 했지만, 잘못된 입력값을 일일이 처리하는 방식은 실수가 발생할 가능성이 크다는 생각이 들었습니다. 그래서 해결책으로 정규표현식을 떠올렸고, 기본 구분자(,/:)를 사용하는 경우 이를 쉽게 검증할 수 있었습니다. 정규표현식을 활용하면 숫자가 아닌 값이나 음수 등 다양한 오류 케이스를 한 번에 검증할 수 있었습니다.

 

커스텀 구분자의 경우는 형식이 고정되어 있지 않아, 하나의 정규표현식으로 검증하기 어려웠습니다. 대신 그룹화 기능을 사용하여 구분자와 숫자 입력값을 추출하는 방법을 배웠지만, 커스텀 구분자는 추가적인 양수 검증 로직이 필요했습니다. 더 정교한 정규표현식을 사용했다면 이 로직을 없앨 수 있었겠지만, 그 부분을 해결하지 못한 점이 아쉬웠습니다. 정규표현식이 검증뿐만 아니라 데이터 추출에도 유용하다는 것을 깨닫게 되었고, 앞으로 정규표현식 활용능력을 더욱 길러서, 효율적인 검증과 추출 방법을 익혀야겠다고 생각했습니다.

 

또한, 자바에서 정규표현식의 이스케이프 문자 처리 방식을 배우게 되었습니다. 특수 문자는 문자열로 표현할 때 이스케이프 문자가 필요한데, 이를 검증할 때는 이스케이프 문자가 중첩되면서 ‘/’가 네 번 사용된다는 점도 알게 되었습니다. 이번 미션에서 왜 ‘\n’이 요구사항에 포함되었는지 이해할 수 있었습니다. 앞으로는 요구조건을 충족하는 것에 그치지 않고, 왜 이런 요구조건이 필요한지 고민하여 어떤 것을 배울 수 있을지 고민하는 태도를 가져야 한다는 것을 느꼈습니다.

 

유연한 설계를 위한 서비스 객체의 도입

 

 이번 프리코스 과정의 목표는 변화에 유연하게 대응하는 구조 만들기입니다. 이를 위해 이번 미션에서는 덧셈 기능을 변화 가능성이 있는 기능으로 설정하였습니다. 서비스 계층을 도입하고, 연산 기능의 인터페이스를 분리하여 유연한 구조를 설계하려 했습니다.

 

처음에는 덧셈 기능을 담당하는 SumCalculator 객체를 생성하고, calculate 메서드를 구현했습니다. 하지만 컨트롤러에서 SumCalculator 객체의 calculate 메서드를 직접 호출하는 방식은, 덧셈 기능이 다른 연산 기능으로 변경될 때마다 새로운 객체를 생성하고 컨트롤러의 의존 구조를 수정해야 하는 문제를 가지고 있었습니다.

 

이 문제를 해결하기 위해 Calculator 인터페이스를 정의하고, SumCalculator 객체가 이를 구현하도록 변경했습니다. 또한, 서비스 객체를 만들어 서비스가 Calculator 인터페이스에 의존하게끔 설계하였습니다. 서비스 객체는 생성자를 통해 Calculator의 구현체를 주입받도록 하여, 덧셈 기능이 다른 연산 기능으로 변경되어도 서비스 객체의 코드는 수정할 필요가 없는 유연한 구조를 만들 수 있었습니다. 또 컨트롤러가 비즈니스 로직을 모두 서비스객체를 통해 실행하도록 하여 더 깔끔한 구조가 되었습니다.

 

책에서 배운 유연한 구조 설계 예시를 실제 프로젝트에 적용해보면서, 이론을 넘어 실전에서 적용해보는 것이 훨씬 더 큰 공부가 된다는 것을 느꼈습니다. 앞으로도 다양한 디자인 패턴을 시도해, 더 유연하고 확장 가능한 구조를 설계해보려 합니다.