From 5255b65f12d4139f0e9b97497e308c14525dfe25 Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 15:53:53 +0900 Subject: [PATCH 01/13] =?UTF-8?q?docs:=20README.md=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/README.md b/README.md index 22621e3..7a97609 100644 --- a/README.md +++ b/README.md @@ -1 +1,38 @@ # Calculator + +## πŸ“Œ κ΅¬ν˜„ κΈ°λŠ₯ λͺ©λ‘ + +### μž…λ ₯λ°›κΈ° + +"μˆ˜μ‹μ„ μž…λ ₯ν•΄μ£Όμ„Έμš”." ← μ‚¬μš©μžμ—κ²Œ 문ꡬ 좜λ ₯ + +μž…λ ₯ λ°›κΈ° + +### 둜직 + +#### μž…λ ₯ 검사 + +##### 톡과 + +- 곡백은 0 +- μ—°μ‚°λ°©ν–₯은 μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½ +- (μ—°μ‚°μž μš°μ„ μˆœμœ„) + +##### μ—λŸ¬ + +`IllegalArgumentException` + +- μ—°μ†λœ μ—°μ‚°μž +- νƒ€μž… μ—λŸ¬ + + + +### 좜λ ₯ + +#### 정상 좜λ ₯ + +"κ²°κ³Ό : ?" + +#### μ—λŸ¬ λ°œμƒ + +"[ERROR] 잘λͺ»λœ μˆ˜μ‹μž…λ‹ˆλ‹€. μž…λ ₯ ν˜•μ‹μ„ 확인해 μ£Όμ„Έμš”." \ No newline at end of file From 33a318a970248cbe7d7ab1c88a0048f3a4def4fe Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 16:24:58 +0900 Subject: [PATCH 02/13] =?UTF-8?q?feat:=20Console=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Console.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/calculator/Console.java diff --git a/src/main/java/calculator/Console.java b/src/main/java/calculator/Console.java new file mode 100644 index 0000000..5ecbf64 --- /dev/null +++ b/src/main/java/calculator/Console.java @@ -0,0 +1,20 @@ +package calculator; + +import java.util.Scanner; + +// μž…μΆœλ ₯ μ±…μž„ +public class Console { + private static final String MESSAGE_INPUT_GUIDE = "μˆ˜μ‹μ„ μž…λ ₯ν•΄μ£Όμ„Έμš”."; + private static final String MESSAGE_OUTPUT_FORMATTED = "κ²°κ³Ό : %d"; + private static final String MESSAGE_ERROR_FORMAT = "[ERROR] 잘λͺ»λœ μˆ˜μ‹μž…λ‹ˆλ‹€. μž…λ ₯ ν˜•μ‹μ„ 확인해 μ£Όμ„Έμš”."; + + private static final Scanner scanner = new Scanner(System.in); + + public String readInput() { + // TODO: μž…λ ₯ μ•ˆλ‚΄ 좜λ ₯ ν›„ μž…λ ₯ λ°›κΈ° + return null; + } + public void printResult() { + // TODO: κ²°κ³Όκ°’ 좜λ ₯ + } +} From 0c00d64706470b10bcc6e14a8d6860a23447e216 Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 16:36:31 +0900 Subject: [PATCH 03/13] =?UTF-8?q?feat:=20readInput()=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/Console.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/Console.java b/src/main/java/calculator/Console.java index 5ecbf64..3222f1b 100644 --- a/src/main/java/calculator/Console.java +++ b/src/main/java/calculator/Console.java @@ -11,8 +11,8 @@ public class Console { private static final Scanner scanner = new Scanner(System.in); public String readInput() { - // TODO: μž…λ ₯ μ•ˆλ‚΄ 좜λ ₯ ν›„ μž…λ ₯ λ°›κΈ° - return null; + System.out.println(MESSAGE_INPUT_GUIDE); + return scanner.nextLine(); } public void printResult() { // TODO: κ²°κ³Όκ°’ 좜λ ₯ From 96f54f96d71f1d6859fd6fde05ea256fde271bfc Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 16:37:32 +0900 Subject: [PATCH 04/13] =?UTF-8?q?refactor:=20printResult()=EC=9D=98=20?= =?UTF-8?q?=EC=8B=9C=EA=B7=B8=EB=8B=88=EC=B2=98=20=EB=B3=80=EA=B2=BD=20(?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=EA=B0=92=20=EB=A7=A4=EA=B0=9C=EB=B3=80?= =?UTF-8?q?=EC=88=98=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/Console.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/Console.java b/src/main/java/calculator/Console.java index 3222f1b..267bf57 100644 --- a/src/main/java/calculator/Console.java +++ b/src/main/java/calculator/Console.java @@ -14,7 +14,7 @@ public String readInput() { System.out.println(MESSAGE_INPUT_GUIDE); return scanner.nextLine(); } - public void printResult() { + public void printResult(int result) { // TODO: κ²°κ³Όκ°’ 좜λ ₯ } } From dda7b8355dbb7bf8d36f910b9a6284d41ff616f3 Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 16:40:13 +0900 Subject: [PATCH 05/13] =?UTF-8?q?feat:=20printResult()=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Console.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/Console.java b/src/main/java/calculator/Console.java index 267bf57..e0af88b 100644 --- a/src/main/java/calculator/Console.java +++ b/src/main/java/calculator/Console.java @@ -15,6 +15,6 @@ public String readInput() { return scanner.nextLine(); } public void printResult(int result) { - // TODO: κ²°κ³Όκ°’ 좜λ ₯ + System.out.println(String.format(MESSAGE_OUTPUT_FORMATTED, result)); } } From 27fa767b963ae1c071b83fa0148119725ae490b3 Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 22:59:03 +0900 Subject: [PATCH 06/13] =?UTF-8?q?feat(Console.java):=20=EC=97=90=EB=9F=AC?= =?UTF-8?q?=20=EB=A9=94=EC=84=B8=EC=A7=80=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/Console.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/Console.java b/src/main/java/calculator/Console.java index e0af88b..d866049 100644 --- a/src/main/java/calculator/Console.java +++ b/src/main/java/calculator/Console.java @@ -2,11 +2,16 @@ import java.util.Scanner; +// TODO: SINGLETON? // μž…μΆœλ ₯ μ±…μž„ public class Console { private static final String MESSAGE_INPUT_GUIDE = "μˆ˜μ‹μ„ μž…λ ₯ν•΄μ£Όμ„Έμš”."; private static final String MESSAGE_OUTPUT_FORMATTED = "κ²°κ³Ό : %d"; - private static final String MESSAGE_ERROR_FORMAT = "[ERROR] 잘λͺ»λœ μˆ˜μ‹μž…λ‹ˆλ‹€. μž…λ ₯ ν˜•μ‹μ„ 확인해 μ£Όμ„Έμš”."; + + public static final String MESSAGE_ERROR_FORMAT = "[ERROR] 잘λͺ»λœ μˆ˜μ‹μž…λ‹ˆλ‹€. μž…λ ₯ ν˜•μ‹μ„ 확인해 μ£Όμ„Έμš”."; + public static final String MESSAGE_ERROR_CONSECUTIVE_OPERATORS = "[ERROR] 잘λͺ»λœ μˆ˜μ‹μž…λ‹ˆλ‹€. μž…λ ₯ ν˜•μ‹μ„ 확인해 μ£Όμ„Έμš”."; + public static final String MESSAGE_ERROR_EMPTY_OR_BLANK = "[ERROR] μž…λ ₯값이 μ—†κ±°λ‚˜ κ³΅λ°±μž…λ‹ˆλ‹€. μž…λ ₯ ν˜•μ‹μ„ 확인해 μ£Όμ„Έμš”."; + private static final Scanner scanner = new Scanner(System.in); @@ -14,6 +19,7 @@ public String readInput() { System.out.println(MESSAGE_INPUT_GUIDE); return scanner.nextLine(); } + public void printResult(int result) { System.out.println(String.format(MESSAGE_OUTPUT_FORMATTED, result)); } From b2e910c6fdcbfd5a8bac472b0be3ea72bfbd6e74 Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 22:59:18 +0900 Subject: [PATCH 07/13] =?UTF-8?q?feat:=20Validator=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=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/Validator.java | 63 +++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/main/java/calculator/Validator.java diff --git a/src/main/java/calculator/Validator.java b/src/main/java/calculator/Validator.java new file mode 100644 index 0000000..a29ac70 --- /dev/null +++ b/src/main/java/calculator/Validator.java @@ -0,0 +1,63 @@ +package calculator; + +import java.util.ArrayList; +import java.util.Set; + +// 검사 μ±…μž„ + +public class Validator { + + // 검사λ₯Ό μœ„ν•œ λ°°μ—΄ 생성 + private final ArrayList inputArrayList = new ArrayList<>(); + // 검사λ₯Ό μœ„ν•œ μ—°μ‚°μž set + private static final Set OPERATORS = Set.of('+', '-', '*', '/'); + + // 검사 이후 μˆ«μžμ™€ μ—°μ‚°μžλ‘œ μͺΌκ°œμ–΄ λ°°μ—΄λ‘œ return + public ArrayList divideInput(String input) { + String currentNumber = ""; + + validateEmptyOrBlank(input); + + for (int i = 0; i < input.length(); i++) { + char ch = input.charAt(i); + + if (Character.isDigit(ch)) { + currentNumber += ch; + + validateLastNumber(i, input.length() - 1, currentNumber); + + } else if (OPERATORS.contains(ch)) { + validateConsecutiveOperators(currentNumber); + + inputArrayList.add(currentNumber); + inputArrayList.add(String.valueOf(ch)); + + currentNumber = ""; + + } else { // μˆ«μžλ‚˜ λ¬Έμžμ—΄μ΄ μ•„λ‹Œ 경우 + throw new IllegalArgumentException(Console.MESSAGE_ERROR_FORMAT); + } + } + + return inputArrayList; + } + + private void validateLastNumber(int position, int length, String currentNumber) { + if (position == length) { + inputArrayList.add(currentNumber); + } + } + + private void validateEmptyOrBlank(String input) { + if (input.isBlank()) { + throw new IllegalStateException(Console.MESSAGE_ERROR_EMPTY_OR_BLANK); + } + } + + private void validateConsecutiveOperators(String currentNumber) { + if (currentNumber.isEmpty()) { + throw new IllegalArgumentException(Console.MESSAGE_ERROR_CONSECUTIVE_OPERATORS); + } + } + +} From 27cc1fca82def5ae1d44ad9e83b3846176255f3d Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 23:00:12 +0900 Subject: [PATCH 08/13] =?UTF-8?q?feat:=20Calculator=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=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/Calculator.java | 56 +++++++++++++++++++++--- 1 file changed, 49 insertions(+), 7 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 88e8552..b54a18a 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -1,13 +1,55 @@ package calculator; -/* - 1μ£Όμ°¨μ—λ§Œ μ œκ³΅λ˜λŠ” μ˜ˆμ‹œ μ½”λ“œμž…λ‹ˆλ‹€. - μ½”λ“œλŠ” κ·ΈλŒ€λ‘œ μ‚¬μš©ν•΄λ„ 되고 μˆ˜μ •ν•΄λ„ λ©λ‹ˆλ‹€. - */ +import java.util.*; +// μ—°μ‚° μ±…μž„ public class Calculator { - public int calculate(String input) { - // TODO: μ½”λ“œ κ΅¬ν˜„ - throw new IllegalArgumentException("아직 κ΅¬ν˜„λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€."); + + private int result = 0; + + public int calculate(ArrayList inputArrayList) { + + // 단일 μ›μ†ŒμΈ 경우 κ·ΈλŒ€λ‘œ return + if (isSingleElement(inputArrayList)) { + return Integer.parseInt(inputArrayList.get(0)); + } + + // 큐 μ„ μ–Έ + LinkedList stringQueue = toQueue(inputArrayList); + + while (stringQueue.size() > 1) { + + result = operate( + stringQueue.poll(), + stringQueue.poll(), + stringQueue.poll() + ); + + stringQueue.addFirst(String.valueOf(result)); + } + + return result; + } + + + private boolean isSingleElement(ArrayList inputArrayList) { + return inputArrayList.size() == 1; + } + + private LinkedList toQueue(ArrayList inputArrayList) { + return new LinkedList<>(inputArrayList); + } + + private int operate(String num1String, String operator, String num2String) { + int num1 = Integer.parseInt(num1String); + int num2 = Integer.parseInt(num2String); + + return switch (operator) { + case "+" -> num1 + num2; + case "-" -> num1 - num2; + case "*" -> num1 * num2; + case "/" -> num1 / num2; + default -> throw new IllegalStateException("Unexpected value: " + operator); + }; } } From 847f8e1e8e5e399c2f8cde7c0ee9148cf3a1d31b Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 23:01:50 +0900 Subject: [PATCH 09/13] =?UTF-8?q?feat:=20Application=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit κ°„νŽΈν•œ ν†΅ν•©ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ - run() λ©”μ„œλ“œ 뢄리 - int λ°˜ν™˜κ°’ --- src/main/java/calculator/Application.java | 30 ++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index d909a50..388237e 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,11 +1,35 @@ package calculator; +import java.util.ArrayList; + public class Application { + + private static final Console console = new Console(); + public static void main(String[] args) { - // TODO: μ½”λ“œ μž‘μ„± + String inputString = console.readInput(); + + run(inputString); + } - // μ˜ˆμ‹œ μ½”λ“œ + public static int run(String inputString) { + Validator validator = new Validator(); Calculator calculator = new Calculator(); - calculator.calculate(""); + + ArrayList inputArrayList; + int result = 0; + + try { + inputArrayList = validator.divideInput(inputString); + result = calculator.calculate(inputArrayList); + } catch (IllegalStateException e) { + // μž…λ ₯값이 곡백값 λ˜λŠ” λΉ„μ–΄μžˆλŠ” 경우 + } catch (IllegalArgumentException illegalArgumentException) { + System.out.println(illegalArgumentException.getMessage()); + return -1; + } + + console.printResult(result); + return result; } } From 445cbb5724a1b596c0f3d942226d9cb5bd0482ca Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 23:09:20 +0900 Subject: [PATCH 10/13] =?UTF-8?q?test(ApplicationTest.java):=20Application?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/ApplicationTest.java | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/test/java/calculator/ApplicationTest.java b/src/test/java/calculator/ApplicationTest.java index f3e71c7..4a9e3d1 100644 --- a/src/test/java/calculator/ApplicationTest.java +++ b/src/test/java/calculator/ApplicationTest.java @@ -1,36 +1,31 @@ package calculator; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; + import org.junit.jupiter.api.Test; + public class ApplicationTest { - Calculator calculator = new Calculator(); @Test public void 빈_λ¬Έμžμ—΄_μž…λ ₯_μ‹œ_0을_λ°˜ν™˜ν•œλ‹€() { - // 아직 calculate ν•¨μˆ˜κ°€ κ΅¬ν˜„λ˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œ TDD Red Test용 μ½”λ“œ - int result = calculator.calculate(""); - assertThat(result).isEqualTo(0); + assertThat(Application.run(" ")).isEqualTo(0); } @Test public void λ§μ…ˆκ³Ό_λΊ„μ…ˆλ§Œ_ν¬ν•¨λœ_μˆ˜μ‹_계산() { - int result = calculator.calculate("1+2-3"); - assertThat(result).isEqualTo(0); + assertThat(Application.run("1+2-3")).isEqualTo(0); } @Test public void κ³±μ…ˆκ³Ό_λ§μ…ˆ_포함_μˆ˜μ‹_계산() { - int result = calculator.calculate("2*3+4"); - assertThat(result).isEqualTo(10); + assertThat(Application.run("2*3+4")).isEqualTo(10); + } @Test public void 잘λͺ»λœ_μˆ˜μ‹_μž…λ ₯_μ‹œ_μ˜ˆμ™Έ_λ°œμƒ() { - assertThrows(IllegalArgumentException.class, () -> { - calculator.calculate("1++2"); - }); + assertThat(Application.run("1++2")).isEqualTo(-1); } // TODO: ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€. From 9a04f07aa77cd7018f2f751848c60a11649d1c0c Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 23:34:41 +0900 Subject: [PATCH 11/13] =?UTF-8?q?test:=20ValidatorTest=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/ValidatorTest.java | 55 +++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/test/java/calculator/ValidatorTest.java diff --git a/src/test/java/calculator/ValidatorTest.java b/src/test/java/calculator/ValidatorTest.java new file mode 100644 index 0000000..1943527 --- /dev/null +++ b/src/test/java/calculator/ValidatorTest.java @@ -0,0 +1,55 @@ +package calculator; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class ValidatorTest { + + Validator validator = new Validator(); + + @Test + void split_test() { + String input = "3+5*2"; + List result = validator.divideInput(input); + + assertThat(result).containsExactly("3", "+", "5", "*", "2"); + } + + @Test + void exception_test_for_blank() { + String input = " "; + Exception e = assertThrows(IllegalStateException.class, () -> validator.divideInput(input)); + + assertThat(e.getMessage()).isEqualTo(Console.MESSAGE_ERROR_EMPTY_OR_BLANK); + } + + @Test + void exception_test_for_operators() { + String input = "3++2"; + Exception e = assertThrows(IllegalArgumentException.class, () -> validator.divideInput(input)); + + assertThat(e.getMessage()).isEqualTo(Console.MESSAGE_ERROR_CONSECUTIVE_OPERATORS); + } + + @Test + void exception_test_for_input_format() { + String input = "5+a"; + Exception e = assertThrows(IllegalArgumentException.class, () -> validator.divideInput(input)); + + assertThat(e.getMessage()).isEqualTo(Console.MESSAGE_ERROR_FORMAT); + } + + @Test + void exception_test_for_first_starts_with_operator() { + String input = "+12+3-5"; + Exception e = assertThrows(IllegalArgumentException.class, () -> validator.divideInput(input)); + + assertThat(e.getMessage()).isEqualTo(Console.MESSAGE_ERROR_CONSECUTIVE_OPERATORS); + + } + +} From 23212aa9fc6b4b45e6df6ae46b714f82d7ad38bf Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 23:40:14 +0900 Subject: [PATCH 12/13] =?UTF-8?q?refactor:=20=EC=97=B0=EC=82=B0=EC=9E=90?= =?UTF-8?q?=20=EC=9C=84=EC=B9=98=EC=97=90=20=EB=8C=80=ED=95=9C=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=B0=8F=20=EC=97=90=EB=9F=AC=EB=A9=94?= =?UTF-8?q?=EC=84=B8=EC=A7=80=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit validateConsecutiveOperators() -> validateOperatorPosition() MESSAGE_ERROR_CONSECUTIVE_OPERATORS -> MESSAGE_ERROR_WRONG_POSITION_OPERATORS 연속적인 μ—°μ‚°μžμΈ 경우 뿐만 μ•„λ‹ˆλΌ μ—°μ‚°μžκ°€ 처음 μž…λ ₯λ˜λŠ” κ²½μš°μ—λ„ 같은 λΆ„κΈ°λ‘œ μ²˜λ¦¬λ˜λ―€λ‘œ μ μ ˆν•œ μ΄λ¦„μœΌλ‘œ λ³€κ²½ν•˜μ˜€μŠ΅λ‹ˆλ‹€. --- src/main/java/calculator/Console.java | 2 +- src/main/java/calculator/Validator.java | 6 +++--- src/test/java/calculator/ValidatorTest.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/calculator/Console.java b/src/main/java/calculator/Console.java index d866049..aef9bd4 100644 --- a/src/main/java/calculator/Console.java +++ b/src/main/java/calculator/Console.java @@ -9,7 +9,7 @@ public class Console { private static final String MESSAGE_OUTPUT_FORMATTED = "κ²°κ³Ό : %d"; public static final String MESSAGE_ERROR_FORMAT = "[ERROR] 잘λͺ»λœ μˆ˜μ‹μž…λ‹ˆλ‹€. μž…λ ₯ ν˜•μ‹μ„ 확인해 μ£Όμ„Έμš”."; - public static final String MESSAGE_ERROR_CONSECUTIVE_OPERATORS = "[ERROR] 잘λͺ»λœ μˆ˜μ‹μž…λ‹ˆλ‹€. μž…λ ₯ ν˜•μ‹μ„ 확인해 μ£Όμ„Έμš”."; + public static final String MESSAGE_ERROR_WRONG_POSITION_OPERATORS = "[ERROR] 잘λͺ»λœ μ—°μ‚°μž μœ„μΉ˜μž…λ‹ˆλ‹€. μž…λ ₯ ν˜•μ‹μ„ 확인해 μ£Όμ„Έμš”."; public static final String MESSAGE_ERROR_EMPTY_OR_BLANK = "[ERROR] μž…λ ₯값이 μ—†κ±°λ‚˜ κ³΅λ°±μž…λ‹ˆλ‹€. μž…λ ₯ ν˜•μ‹μ„ 확인해 μ£Όμ„Έμš”."; diff --git a/src/main/java/calculator/Validator.java b/src/main/java/calculator/Validator.java index a29ac70..c31e32f 100644 --- a/src/main/java/calculator/Validator.java +++ b/src/main/java/calculator/Validator.java @@ -27,7 +27,7 @@ public ArrayList divideInput(String input) { validateLastNumber(i, input.length() - 1, currentNumber); } else if (OPERATORS.contains(ch)) { - validateConsecutiveOperators(currentNumber); + validateOperatorPosition(currentNumber); inputArrayList.add(currentNumber); inputArrayList.add(String.valueOf(ch)); @@ -54,9 +54,9 @@ private void validateEmptyOrBlank(String input) { } } - private void validateConsecutiveOperators(String currentNumber) { + private void validateOperatorPosition(String currentNumber) { if (currentNumber.isEmpty()) { - throw new IllegalArgumentException(Console.MESSAGE_ERROR_CONSECUTIVE_OPERATORS); + throw new IllegalArgumentException(Console.MESSAGE_ERROR_WRONG_POSITION_OPERATORS); } } diff --git a/src/test/java/calculator/ValidatorTest.java b/src/test/java/calculator/ValidatorTest.java index 1943527..cea3a1c 100644 --- a/src/test/java/calculator/ValidatorTest.java +++ b/src/test/java/calculator/ValidatorTest.java @@ -32,7 +32,7 @@ void exception_test_for_operators() { String input = "3++2"; Exception e = assertThrows(IllegalArgumentException.class, () -> validator.divideInput(input)); - assertThat(e.getMessage()).isEqualTo(Console.MESSAGE_ERROR_CONSECUTIVE_OPERATORS); + assertThat(e.getMessage()).isEqualTo(Console.MESSAGE_ERROR_WRONG_POSITION_OPERATORS); } @Test @@ -48,7 +48,7 @@ void exception_test_for_first_starts_with_operator() { String input = "+12+3-5"; Exception e = assertThrows(IllegalArgumentException.class, () -> validator.divideInput(input)); - assertThat(e.getMessage()).isEqualTo(Console.MESSAGE_ERROR_CONSECUTIVE_OPERATORS); + assertThat(e.getMessage()).isEqualTo(Console.MESSAGE_ERROR_WRONG_POSITION_OPERATORS); } From 0fd697c757ee20901b22dbc35bfecb43f856889b Mon Sep 17 00:00:00 2001 From: HyunjeLee Date: Sat, 5 Apr 2025 23:40:34 +0900 Subject: [PATCH 13/13] =?UTF-8?q?test:=20CalculatorTest=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/CalculatorTest.java | 53 ++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/test/java/calculator/CalculatorTest.java diff --git a/src/test/java/calculator/CalculatorTest.java b/src/test/java/calculator/CalculatorTest.java new file mode 100644 index 0000000..aa7fddf --- /dev/null +++ b/src/test/java/calculator/CalculatorTest.java @@ -0,0 +1,53 @@ +package calculator; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class CalculatorTest { + + Calculator calculator = new Calculator(); + + @Test + void calculate_test_single() { + ArrayList input = new ArrayList<>(List.of("12")); + int result = calculator.calculate(input); + + assertThat(result).isEqualTo(12); + } + + @Test + void calculate_test_simple() { + ArrayList input = new ArrayList<>(List.of("1", "+", "2")); + int result = calculator.calculate(input); + + assertThat(result).isEqualTo(3); + } + + @Test + void calculate_test_divide() { + ArrayList input = new ArrayList<>(List.of("4", "/", "2")); + int result = calculator.calculate(input); + + assertThat(result).isEqualTo(2); + } + + @Test + void calculate_test_complex() { + ArrayList input = new ArrayList<>(List.of("2", "+", "3", "*", "4")); + int result = calculator.calculate(input); + + assertThat(result).isEqualTo(20); + } + + @Test + void calculate_test_wrong_operator() { + ArrayList input = new ArrayList<>(List.of("1", "&", "2")); + + assertThrows(IllegalStateException.class, () -> calculator.calculate(input)); + } +}