Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 53 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,53 @@
# java-calculator-precourse
# java-calculator-precourse

## 🚀 구현할 기능 목록

### 1. 문자열 계산기 핵심 기능 (StringCalculator)

#### 1.1. 문자열 유효성 및 초기 처리
* [ ] 입력 문자열이 `null`이거나 **빈 문자열("")**인지 확인하고 처리한다.
* `null` 또는 `""` 입력 시 **`0`**을 반환한다.

#### 1.2. 구분자 결정
* [ ] 입력 문자열에서 **커스텀 구분자**를 추출한다.
* 커스텀 구분자는 문자열 앞부분의 `//`와 `\n` 사이에 위치한 문자여야 한다. (예: `//;\n1;2;3`에서 `;` 추출)
* [ ] 기본 구분자와 커스텀 구분자를 모두 포함하는 정규 표현식을 구성한다.
* **기본 구분자**는 쉼표(`,`) 또는 콜론(`:`)이다.

#### 1.3. 문자열 분리 및 검증
* [ ] 결정된 구분자를 기준으로 문자열을 분리한다.
* [ ] 분리된 각 숫자가 **양수**인지 검증한다.
* **음수** 포함 시 **`IllegalArgumentException`**을 발생시킨다.
* [ ] 분리된 각 요소가 **유효한 숫자 형태**인지 검증한다.
* 숫자가 아닌 문자(예: `a`) 포함 시 **`IllegalArgumentException`**을 발생시킨다.

#### 1.4. 최종 합산
* [ ] 분리 및 검증이 완료된 **각 숫자를 합산**한다.
* 합산 결과는 정수 형태(int)로 반환한다.

---

### 2. 입출력 및 예외 처리 기능 (Application & Console)

#### 2.1. 입력 처리
* [ ] 사용자에게 입력을 안내하는 문구를 출력한다.
* 출력 문구: `"덧셈할 문자열을 입력해 주세요."`
* [ ] `Console.readLine()`을 사용하여 사용자로부터 문자열을 입력받는다.
* 라이브러리: `camp.nextstep.edu.missionutils.Console` 사용 필수.

#### 2.2. 출력 처리
* [ ] 계산된 덧셈 결과를 출력한다.
* 출력 형식: `"결과 : [계산된 합산 값]"` (예: `결과 : 6`)

#### 2.3. 예외 처리
* [ ] 계산 로직에서 `IllegalArgumentException`이 발생할 경우 애플리케이션을 종료한다.
* 예외 발생 시 **`System.exit()` 호출은 금지**한다.

---

### 3. Git 커밋 및 환경 설정 (Pre-course Requirement)

* [ ] 프로젝트가 **Java 21** 환경에서 실행 가능하도록 확인한다.
* [ ] 제출 전 모든 테스트 코드를 실행하여 성공 여부를 확인한다.
* `.\gradlew.bat clean test` 또는 `./gradlew clean test` 실행 후 **`BUILD SUCCESSFUL`** 확인.
* [ ] 구현할 기능 목록 단위로 커밋을 진행하며, 커밋 메시지는 **AngularJS Git Commit Message Conventions**을 준수한다.
3 changes: 2 additions & 1 deletion src/main/java/calculator/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현
Calculator calc = new Calculator("1,2;3");
System.out.println(calc.sum());
}
}
17 changes: 17 additions & 0 deletions src/main/java/calculator/Calculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package calculator;

public class Calculator {
private static final String defaultSeparator = "[,;]";

public Calculator(String input) {
String[] splitInput = input.split(defaultSeparator);
this.operands = new Operands(splitInput);

}

public int sum() {
return operands.getOperands().stream()
.mapToInt(Operand::getOperand)
.sum();
}
}
19 changes: 19 additions & 0 deletions src/main/java/calculator/Operand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package calculator;


public class Operands {
private final static String NOT_STRING_MESSAGE = "숫자가 아닌 문자열이 입력되었습니다.";
private final static String NOT_POSITIVE_MESSAGE = "입력된 숫자가 양수가 아닙니다.";


public Operands(String[] splitInput) {
for (String elem : splitInput) {
Operand operand = new Operand(elem);
this.operands.add(operand);
}
}

public List<Operand> getOperands() {
return operands;
}
}