먼저 기능 구현부터하자!

최종 테스트를 대비해 빠르게 구현하는 습관을 먼저 들이기로 했습니다.

그래서 TDD와 같은 개발방법론보다는 우선 구현하는 것에 초점을 뒀습니다.

레이어 분리

레이어는 MVC 패턴을 차용해 각 관심사를 분리했습니다.

이를 패키지 구조로 아래와 같이 작성했습니다.

calculator/
├── application/
├── domain/
├── ui/
└── Application.class

요구사항 분석

1. 계산기는 기본 구분자(`:`, `,`)를 가진다.
2. 계산기는 커스텀 구분자를 지정할 수 있다.
    * 커스텀 구분자는 문자열 앞부분의 `//`와 `\\n` 사이에 위치하는 `문자`를 커스텀 구분자로 사용한다.
    * `//.\\n` -> 커스텀 구분자 = `.`
3. 분리한 각 숫자의 합을 반환한다.
4. 빈 문자열일 경우 0을 반환한다.
5. 잘못된 입력 시 `IllegalArgumentException`이 발생한다.
    * 양수가 아니거나 구분자 외 문자가 있는 경우
    * 프로그램은 즉시 종료된다.

요구사항을 토대로 기능 구현 목록을 작성하니 세가지 구현 스텝이 나왔습니다.

해당 순서로 기본 구분자용 계산기와 커스텀 구분자용 계산기를 만들면 되겠다는 생각이 들었습니다.