입력한 문자열에서 숫자를 추출하여 사칙연산을 수행하는 계산기를 구현한다.
쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환한다.
""=>0"1,2"=>3"1,2,3"=>6"1,2:3"=>6
커스텀 구분자는 //와 \n 사이에 위치하는 문자를 커스텀 구분자로 사용한다.
"//;\n1;2;3"=>6
기본 연산은 덧셈이다. op= 형식으로 연산자를 지정할 수 있다.
"op=+|1,2,3"=>6(덧셈)"op=-|10,3,2"=>5(뺄셈, 10 - 3 - 2)"op=*|1,2,3"=>6(곱셈)"op=/|12,3,2"=>2(나눗셈, 12 / 3 / 2)
사용자가 잘못된 값을 입력할 경우 IllegalArgumentException 을 발생시킨 후 애플리케이션은 종료되어야 한다.
- 음수를 입력한 경우 예외 발생
- 숫자가 아닌 값이 포함된 경우 예외 발생
- 0으로 나누는 경우 예외 발생
- 지원하지 않는 연산자를 입력한 경우 예외 발생
- 입력값이 없는 경우 (공백일 경우) 0을 반환한다.
- 하나의 숫자만 입력한 경우 해당 숫자를 그대로 반환한다.
나눗셈 결과가 소수인 경우 소수점 첫째 자리까지만 반환한다.
"op=/|10,3"=>3.3
- 수행한 연산의 입력값과 결과를 순서대로 저장한다.
- 이력은 최대 10개까지 저장하며, 초과 시 가장 오래된 이력부터 삭제한다.
- 이력 조회 시 가장 최근 연산부터 출력한다.
- 클래스는 2개 이상으로 분리할 것
StringCalculator는 흐름 조율만 담당할 것 (파싱, 계산, 이력 관리를 직접 하지 않는다)- 각 클래스는 하나의 책임만 가질 것
- 메서드 길이 15줄 이하
else사용 금지Stream,Lambda사용- 최대한 객체지향적으로 짜볼 것
# 전체 테스트 실행
./gradlew test
# 특정 테스트만 실행
./gradlew test --tests "calculator.StringCalculatorTest.빈_문자열이면_0을_반환한다"제공된 클래스 힌트 (반드시 사용할 필요 없음, 자유롭게 설계할 것)
| 클래스 | 역할 |
|---|---|
StringCalculator |
진입점, 흐름 조율 |
InputParser |
입력 파싱 (구분자, 연산자, 토큰 추출) |
OperationType |
연산자 enum (+, -, *, /) |
CalculationHistory |
연산 이력 관리 (일급 컬렉션) |
PR 올리기 전에 아래를 확인할 것.
-
./gradlew test전체 통과 - 클래스가 2개 이상으로 분리되어 있는가
- 각 클래스가 하나의 책임만 가지는가
-
else사용하지 않았는가 -
Stream,Lambda사용하였는가 - 메서드 길이 15줄 이하인가
- 위 레포지토리를 fork한다.
- fork한 레포지토리를 본인 로컬에 clone한다. git clone https://github.com/본인계정/string-calculator
- 본인 이름으로 브랜치 생성 git checkout -b 홍길동
- StringCalculator.java 포함 클래스를 자유롭게 설계해서 구현한다
- 테스트 전체 통과 확인 ./gradlew test
- PR(Pull Request) 올리기
- base: Konkuk-KUIT/string-calculator(위 레포지토리) main
- PR 제목: [홍길동] 문자열 계산기 구현
- PR 본문에 본인이 설계한 클래스 구조 간단히 설명할 것