
사실 지원하기 전부터, '나 따위가 본 코스 붙을 수 있으려나' 같은 김칫국 드링킹을 하며 지원할지 고민하다가 한 친구에게서 들었던 말이 떠올랐다.
"프리코스는 꼭 테크코스에 붙을 목적은 아니더라도 한 번쯤 경험해보는 건 나쁘지 않다"
그래서 무작정 신청을 넣었다.
이번 8기 지원에는 프리코스 비중이 꽤 큰 것 같다.
(자기소개서를 대충 썻다는 내용)
아무튼 각설하고 1주차동안 고민하고, 느꼈던 점을 기록하고자 이 글을 남긴다.
1주차 과제 내용은 아래와 같았다.


확인해보니, 저번 기수 프리코스 문제와 똑같은 것 같았다. (정확하진 않다)
사실, 문제만 보면 간단한 콘솔 애플리케이션 구현이었다.
다만
'기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다.'
이 문구가 나에게 있어서는 정말 큰 부담이었다.
고려해야 될 사항이 끊임없이 늘어나는 기분이었다.

이런 식으로, 좀 더 세세한 로직과 예외들을 정리했다.
물론 작성하면서, 이것도 좀 예외케이스가 적거나 어색하다고 느꼈다.
그래서 그냥 프리코스 외의 친구들에게서 영감을 얻을 수도 있지 않을까해서 그냥 물어도 보았다.

(기존에 존재하는 구분자와 겹치는 커스텀 구분자 입력 시를 고려하는 중이었다.)

(사실 기대도 안했다)
그렇게 이 예외 케이스 찾기에 혈안이 되어있다가
'혹시 모를 입력에 대한 예외 케이스 커버가 되어 있어야 해'
라는 스스로의 모습을 발견했다.
뭐랄까, 억지로 처리해야하는 예외를 찾는 듯한 기분이었다.
이 생각이 들자마자, 현재 존재하던 예외 케이스 그대로 작업을 시작했다.
더 이상 예외 케이스를 찾아봐도 완벽한 예외 처리는 불가능할 것이고, 케이스가 많아질 수록 구현에 어려움이 커질 것 같았기에 해두었던 설계를 기반으로 바로 작업을 시작했다.
일단, 들어오는 입력을 구분자 파트와 계산식 파트로 나누어 생각했다.
두 변수의 처리 방식이 다르고, 이는 하나의 클래스에서 담당하기엔 책임이 무겁다고 느꼈다.
그래서 입력에 대한 최소한의 검증(NULL 값 및 빈 입력 검증) 만 하고,
아래 4개와 같이 큰 역할을 하는 클래스를 나누었다.
구분자 파트와 계산식 파트로 나누는 역할을 가진 클래스구분자 파트에서 커스텀 구분자를 분리해내는 클래스계산식 파트에서 계산해야 할 숫자 목록으로 변환하는 클래스계산기 클래스그리고 검증 연산을 거치는 클래스는 정적 메서드를 기반으로 구성했다.

테스트 케이스가 많지 않은 것을 보아 복잡한 예제 케이스는 없었던 것 같다.!
우선, 처음에 작업할 때 기획한 기능을 모두 완성하고 그 후에 리팩토링 진행을 생각하고 있었다. 그렇게 순수하게 '구현'만 진행하니 메인 함수에는 메서드 분리조차 안 된 꼬여버린 복잡한 로직이 쌓였고, 메서드 한 번 분리하는데에도 많은 시간을 투자해야 하는 상황이 되었다.
또, 아예 모든 기능을 완료하고 커밋을 하는 등 스스로 커밋 단위가 너무 크다고 느꼈다.
마지막으로, 제일 아쉬운 부분은 정적 메서드를 사용한 클래스들인데 너무 많은 정적 메서드 이용이 눈에 띄게 보였다.
검증 클래스는 그렇다치고, 구분자와 계산식 파트를 분리하는 로직 등 마저 정적 메서드로 처리했다.
물론 코드는 쉽게 짤 수 있었지만, 스스로 좋은 코드라고는 도저히 생각할 수가 없었다.
이번 과제에서는
'리팩토링의 무게를 줄이자!' (한번에 하는 작업량을 줄이자)
라는 교훈을 얻었다.
다음 주차 과제에서는 좀 더 나은 결과물을 낼 수 있으면 좋겠다..!