From 6e0e14334eb7116aa3d7f08435744e628c6be9e1 Mon Sep 17 00:00:00 2001 From: Nurungjiii Date: Mon, 20 Oct 2025 23:15:39 +0900 Subject: [PATCH 1/5] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bd90ef0247..8d88745739 100644 --- a/README.md +++ b/README.md @@ -1 +1,53 @@ -# java-calculator-precourse \ No newline at end of file +# 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**을 μ€€μˆ˜ν•œλ‹€. \ No newline at end of file From 40d430cb280d5221389c727692e2a1a3a2ce03df Mon Sep 17 00:00:00 2001 From: Nurungjiii Date: Mon, 20 Oct 2025 23:21:41 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat(Calculator):=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=EA=B8=B0=EC=9D=98=20=EB=AC=B8=EC=9E=90=EC=97=B4=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 2 +- src/main/java/calculator/Calculator.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/main/java/calculator/Calculator.java diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580fb40..b9504b80cd 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -2,6 +2,6 @@ public class Application { public static void main(String[] args) { - // TODO: ν”„λ‘œκ·Έλž¨ κ΅¬ν˜„ + Calculator calc = new Calculator("1,2;3"); } } diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java new file mode 100644 index 0000000000..d7d8dd65c2 --- /dev/null +++ b/src/main/java/calculator/Calculator.java @@ -0,0 +1,17 @@ +package calculator; + +import java.util.ArrayList; +import java.util.List; + +public class Calculator { + + private final List operands = new ArrayList<>(); + + public Calculator(String input) { + String[] results = input.split("[,;]"); + + for (String element : results) { + this.operands.add(Integer.parseInt(element)); + } + } +} \ No newline at end of file From 846f79b0890cbbaad2db3d3c1ede1f39bf119ef4 Mon Sep 17 00:00:00 2001 From: Nurungjiii Date: Mon, 20 Oct 2025 23:23:22 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat(Calculator):=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=EA=B8=B0=EC=9D=98=20=EC=88=AB=EC=9E=90=20=ED=95=A9=EC=B9=98?= =?UTF-8?q?=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 1 + src/main/java/calculator/Calculator.java | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index b9504b80cd..bfe63086f3 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -3,5 +3,6 @@ public class Application { public static void main(String[] args) { Calculator calc = new Calculator("1,2;3"); + calc.sum(); } } diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index d7d8dd65c2..934d310f65 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -14,4 +14,10 @@ public Calculator(String input) { this.operands.add(Integer.parseInt(element)); } } + + public int sum() { + return operands.stream() + .mapToInt(Integer::intValue) + .sum(); + } } \ No newline at end of file From 832a8312815ff1b03d75bb2c530a6ebcde3555f3 Mon Sep 17 00:00:00 2001 From: Nurungjiii Date: Mon, 20 Oct 2025 23:35:31 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20Operands=20=EC=9D=BC=EA=B8=89?= =?UTF-8?q?=EC=BB=AC=EB=A0=89=EC=85=98=EC=9D=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 2 +- src/main/java/calculator/Calculator.java | 16 +++++----------- src/main/java/calculator/Operand.java | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 src/main/java/calculator/Operand.java diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index bfe63086f3..0fa063cc2c 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -3,6 +3,6 @@ public class Application { public static void main(String[] args) { Calculator calc = new Calculator("1,2;3"); - calc.sum(); + System.out.println(calc.sum()); } } diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 934d310f65..8a0cc94c00 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -1,23 +1,17 @@ package calculator; -import java.util.ArrayList; -import java.util.List; - public class Calculator { - - private final List operands = new ArrayList<>(); + private static final String defaultSeparator = "[,;]"; public Calculator(String input) { - String[] results = input.split("[,;]"); + String[] splitInput = input.split(defaultSeparator); + this.operands = new Operands(splitInput); - for (String element : results) { - this.operands.add(Integer.parseInt(element)); - } } public int sum() { - return operands.stream() - .mapToInt(Integer::intValue) + return operands.getOperands().stream() + .mapToInt(Operand::getOperand) .sum(); } } \ No newline at end of file diff --git a/src/main/java/calculator/Operand.java b/src/main/java/calculator/Operand.java new file mode 100644 index 0000000000..c0f8c03aae --- /dev/null +++ b/src/main/java/calculator/Operand.java @@ -0,0 +1,19 @@ +package calculator; + +import java.util.ArrayList; +import java.util.List; + +public class Operands { + private List operands = new ArrayList<>(); + + public Operands(String[] splitInput) { + for (String elem : splitInput) { + Operand operand = new Operand(elem); + this.operands.add(operand); + } + } + + public List getOperands() { + return operands; + } +} \ No newline at end of file From f9053dbac10e907924138b9d5090feb12e2a0f4d Mon Sep 17 00:00:00 2001 From: Nurungjiii Date: Mon, 20 Oct 2025 23:41:19 +0900 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20Operands=20=EC=9D=BC=EA=B8=89?= =?UTF-8?q?=EC=BB=AC=EB=A0=89=EC=85=98=EC=9D=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Operand.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/calculator/Operand.java b/src/main/java/calculator/Operand.java index c0f8c03aae..412ac185bf 100644 --- a/src/main/java/calculator/Operand.java +++ b/src/main/java/calculator/Operand.java @@ -1,10 +1,10 @@ package calculator; -import java.util.ArrayList; -import java.util.List; public class Operands { - private List operands = new ArrayList<>(); + private final static String NOT_STRING_MESSAGE = "μˆ«μžκ°€ μ•„λ‹Œ λ¬Έμžμ—΄μ΄ μž…λ ₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€."; + private final static String NOT_POSITIVE_MESSAGE = "μž…λ ₯된 μˆ«μžκ°€ μ–‘μˆ˜κ°€ μ•„λ‹™λ‹ˆλ‹€."; + public Operands(String[] splitInput) { for (String elem : splitInput) {