TDD 연습을 위해 String Calculator 문제를 TDD로 구현합니다.
- 간단한 문자열 계산기인
Add(string numbers)
를 만듭니다.- 이 메소드는 0, 1 ~ 2개 숫자들을 인자로 받고, 그 합계를 반환합니다.
- 공백이나 빈문자열은 0으로 취급합니다.
- 공백을 시작으로 1 ~ 2개의 숫자들을 전달하는 단순한 테스트 케이스부터 시작합니다.
- 최대한 단순하게 구현합니다. (미리 욕심내지 않는다.)
- 리펙토링은 모든 테스트가 통과한 다음에 생각합니다.
Add()
메소드로 전달되는numbers
인자에는 비어있거나, 여러 숫자와 기본 구분자(,)를 포함하고 있습니다. (예:10,20,,30
이면60
을 반환하게 된다.)Add()
메소드는 새로운 구분자로 개행(\n)을 처리할 수 있습니다.- 처리 가능 ->
"1\n2,3"
- 딱히 의미 없음 ->
"1,\n"
- 처리 가능 ->
- 다른 커스텀 구분자를 지원할 수 있습니다.
- 기본 구분자에서 커스텀 구분자로 변경하기 위해서는 문자열 시작부터 첫 등장하는 개행(\n)을 기준으로 합니다.
- 그 개행(\n)을 기준으로 앞 부분이 슬래시 2개(//)로 시작하는 경우 그 다음 문자가 새로운 구분자가 됩니다.
(즉
//[delimiter]\n[numbers...]
같은 패턴이 되며,//;\n1;2
처럼 입력 된다면;(세미콜론)
이 새로운 구분자가 되고, 결과로3
을 반환해야 한다.) - 당연히 커스텀 구분자의 첫 행은 선택 사항이기 때문에 없는 경우에는 기본 구분자로 동작하게 됩니다.
Add()
메소드는numbers
인자에 음수값이 포함된 경우 "negatives not allowed" 예외를 발생 시킵니다. 그리고 해당 음수는 합계에 사용되지 않고 무시합니다. (이 때 포함 된 음수값이 많다면 각각 발생한 예외에 대한 에러 메시지를 출력해야 합니다.)numbers
에 포함된 숫자가1000
보다 큰 경우 무시합니다. (예: 2 + 1001 = 2 )- 커스텀 구분자가 아무리 길어도 허용됩니다. (예:
“//[***]\n1***2***3”
는6
을 반환) - 커스텀 구분자는 여러개 선언할 수 있습니다. (예:
“//[delim1][delim2]\n[numbers]”
->"//[*][%]\n1*2%3"
는6
을 반환)- 복수 커스텀 구분자가 긴 문자열에 대해 제대로 동작하는지 확인하세요.
,(콤마)
로 구분된 0개 또는 1 ~ 2개 숫자로 구성된numbers
문자열 인자를 전달 받고, 그 합계 계산해서 반환한다.numbers
는 빈 문자열(empty)이거나 공백일 수 있다. 이 경우 0으로 취급한다.
numbers
의 포함된 숫자들은 2개 이상일 수 있다.
numbers
의 숫자들은개행(\n)
을 추가 구분자로 지원한다. (콤마와 혼용 가능)
numbers
에 등장하는 첫번째개행(\n)
을 기준으로 앞부분이//[구분자]
와 같은 형태인 경우 슬래시 2개를 제외한 부분이 새로운 커스텀 구분자가 된다.
numbers
에 음수가 포함된 경우 "negatives not allowed" 예외가 발생한다.numbers
에 포함된 음수의 개수만큼 "negatives not allowed" 예외에 대한 에러 메시지를 출력한다.- 음수는 합계 계산에서 무시된다.
numbers
에 포함된 숫자 중 1,000 보다 큰 수는 합계에서 제외한다.
- 커스텀 구분자가 여러번 반복된 패턴을 가질 수 있습니다.
- 커스텀 구분자를 여러개 지정할 수 있습니다.