우테코 7기 프리코스 1주차 - 문자열 덧셈 계산기
일주일이라는 시간이 굉장히 빠르게 지나갔네요.
프리코스 시작 전에는 자바에 대한 자신감이 없어서, 프리코스 미션 구현 자체를 못하면 어떡하지.. 라는 걱정이 들었습니다. 그래서 화요일 3시에 첫 미션이 열렸을 때 설렘 반 걱정 반으로 확인했고, 다행히도 "어떻게든 구현해낼 수는 있겠다"라는 생각이 들었습니다.
놓치는 것이 생겨 코드를 갈아엎는 대참사를 방지하기 위해 요구사항을 반복해서 꼼꼼히 읽고 나서 설계를 해보기 시작했습니다.
입력한 문자열에서 숫자를 추출하여 더하는 계산기를 구현한다.
IllegalArgumentException
을 발생시킨 후 애플리케이션은 종료되어야 한다.구분자와 양수로 구성된 문자열
결과 : 6
덧셈할 문자열을 입력해 주세요.
1,2:3
결과 : 6
(코드 짜다가 바뀐 부분이 많지만,, )
주요 기능은 "구분자를 나누는 기능(분석)", "피연산자를 나누는 기능(구분)", "계산 기능(계산)"으로 파악했습니다.
절차지향으로 코드를 쭉 서술해도 되지만, 이번 미션에서는 명확하게 역할을 나눌 수 있다고 생각하여 객체지향이라는 특성을 살려보고자 했습니다.
코드를 작성하기 위해 일단 필요한 지식이 무엇인지 파악했고, 더 고민해야 할 부분들을 정리했습니다. 책임 분리에 대해 고민하다 보니 자연스럽게 디자인 패턴인 MVC 패턴을 적용하게 되었습니다.
이번 미션에서 제가 가장 고민한 부분은 객체지향 설계와 MVC 패턴의 도입입니다. 이 과정에서 제가 느낀 객체지향과 MVC 패턴의 장점은 다음과 같습니다.
상수에 대한 것은 constant
에서, 저장된 피연산자들을 이용하여 특정 연산을 하는 것은 model
에서, 검증하는 부분은 validator
에서 기능한다는 것이 명확하기 때문에, 어떤 기능을 추가해야 할 때 어디에 작성해야 할지, 어떤 코드를 수정했을 때 어느 부분도 함께 수정해야 할지가 명확히 보였습니다.
이 코드를 문자열 뺄셈 계산기로, 다양한 type 계산기로 발전시켜야 한다 해도, 수정할 부분과 추가할 부분이 명확히 보이기 때문에 현재 코드 체계를 유지하면서 확장시킬 수 있겠다고 생각했습니다.
처음 설계할 때는 service
패키지에 StringSplit
, StringCalculate
이라는 두 클래스를 만들어서, 구분자를 분리하는 클래스와 계산하는 클래스를 나눴습니다.
이후 이 둘의 경계가 모호하다는 생각이 들었고, 기존 두 클래스를 하나의 클래스로 합치게 되었습니다. 하지만 설계에 의하면 service
에 의존하는 클래스는 오직 controller
인 CalculatorOperation
클래스뿐이었고, 해당 클래스에서 StringSplit
으로 선언된 부분을 StringCalculate
로 바꾸니 모든 수정이 끝났습니다.
추가로, model
도 구분자에 대한 Delimiter
, 피연산자와 계산 결과에 대한 Calculator
로 나눴었지만 추후 Calculator
로 합치게 되었고, model
에 의존하는 service
의 코드만 수정하였습니다.
지금은 비교적 적은 양의 기능을 수행하는 코드이지만, 추후 규모가 큰 코드를 다룰 때는 이러한 책임 분리로 얻을 수 있는 장점이 크게 평가할 수 있다고 생각합니다.
미션 제출이 마감되고, 코드 리뷰를 시작했습니다. 디스코드에 글을 올려서 10분의 코드를 구경했는데 나는 정말 애송이구나! 가장 중요한 자바 기본기가 너무나 부족하다 를 느꼈습니다. 결국...
리뷰를 마친 새벽 5시에 자바 기본서를 주문했습니다. 확실히 알지 못한다고 생각하는 부분부터 차근차근 읽어보려 합니다!
6일동안 제 코드만 보다보니, 오..좀 괜찮은 것 같은데? 하며 자만하게 되었고, 어느정도 코드를 완성했다고 생각이 든 이후에는 코드에 전혀 손을 대지 않았습니다. 그런데 제출 이후 다른 분들의 코드를 구경하다보니, 자연스럽게 겸손을 되찾을 수 있었습니다.
나 혼자 고민한 6일보다, 피드백을 받고 다른 사람들의 문제 해결 과정을 구경하는 하루동안 더 많은 성장을 했다고 느꼈습니다.
코드 리뷰를 하지 않았다면 깨닫지 못하고 넘어갔을 부분이라고 생각합니다. 이후 미션이 끝날 때마다 적어도 하루는 코드 리뷰와 회고에 시간을 쏟으려 합니다!
리뷰를 통해 얻은 피드백은 다음과 같습니다.
피드백 얻은 부분에 대해 열심히 고민하고, 이후 미션에 적용해 볼 것입니다!
프리코스로 인해 1주일이 빠르게 지났는데, 앞으로 남은 3주동안에도 더 성장할 수 있을 것 같아서 아주 기대됩니다. 새로운 미션이 공개됐는데, 다음 주 화요일에 아쉬움을 느끼지 않도록 열심히 달려봐야겠습니다! 🏃