From 14f2ea2b701cef3ce4094b03d7a7f4b872774278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=ED=83=9C=EC=A7=84?= <140797244+taejinn@users.noreply.github.com> Date: Thu, 31 Jul 2025 18:52:24 +0900 Subject: [PATCH 01/13] =?UTF-8?q?feat:=20=EA=B3=84=EC=82=B0=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=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/Calc.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/Calc.java diff --git a/src/main/java/Calc.java b/src/main/java/Calc.java new file mode 100644 index 00000000..83fc66d4 --- /dev/null +++ b/src/main/java/Calc.java @@ -0,0 +1,24 @@ +public class Calc { + public int add(int a, int b) { + int res = a + b; + return res; + } + + public int minus(int a, int b) { + int res = a - b; + return res; + } + + public int times(int a, int b) { + int res = a * b; + return res; + } + + public int divide(int a, int b) { + if (a == 0 || b == 0) { + throw new IllegalArgumentException("0 으로 나눌 수 없습니다."); + } + int res = a / b; + return res; + } +} \ No newline at end of file From b47ba7f042352866b7ad9ffeca4d0fe0ebd29662 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=ED=83=9C=EC=A7=84?= <140797244+taejinn@users.noreply.github.com> Date: Thu, 31 Jul 2025 19:07:23 +0900 Subject: [PATCH 02/13] =?UTF-8?q?test:=20=EA=B3=84=EC=82=B0=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CalcTest.java | 47 +++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/test/java/CalcTest.java diff --git a/src/test/java/CalcTest.java b/src/test/java/CalcTest.java new file mode 100644 index 00000000..bb948f6a --- /dev/null +++ b/src/test/java/CalcTest.java @@ -0,0 +1,47 @@ + +@DisplayName("계산기 작동 테스트") +public class CalcTest { + @Test + @DisplayName("더하기 테스트") + void add() { + final var a = 1; + final var b = 2; + final var actual = a + b; + final var expected = 3; + + assertEquals(expected, actual); + } + + @Test + @DisplayName("빼기 테스트") + void add() { + final var a = 3; + final var b = 1; + final var actual = a - b; + final var expected = 2; + + assertEquals(expected, actual); + } + + @Test + @DisplayName("곱하기 테스트") + void add() { + final var a = 2; + final var b = 3; + final var actual = a * b; + final var expected = 6; + + assertEquals(expected, actual); + } + + @Test + @DisplayName("나누기 테스트") + void add() { + final var a = 10; + final var b = 5; + final var actual = a / b; + final var expected = 2; + + assertEquals(expected, actual); + } +} \ No newline at end of file From af86066af518d49b9270e21e0dd06315447be2c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=ED=83=9C=EC=A7=84?= <140797244+taejinn@users.noreply.github.com> Date: Thu, 31 Jul 2025 19:29:23 +0900 Subject: [PATCH 03/13] =?UTF-8?q?feat:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=EA=B8=B0=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/StringCalc.java | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/main/java/StringCalc.java diff --git a/src/main/java/StringCalc.java b/src/main/java/StringCalc.java new file mode 100644 index 00000000..5a698229 --- /dev/null +++ b/src/main/java/StringCalc.java @@ -0,0 +1,46 @@ +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class StringCalc { + + private static final String defaultDelimiters = "[,:]"; + + public int add(String text) { + if (text == null || text.isEmpty()) { + return 0; + } + + String delimiters = defaultDelimiters; + String actualTextToParse = text; + + Pattern customDelimiterPattern = Pattern.compile("//(.)\n(.*)"); + Matcher matcher = customDelimiterPattern.matcher(text); + + if (matcher.find()) { + String customDelimiter = Pattern.quote(matcher.group(1)); + delimiters = customDelimiter; + actualTextToParse = matcher.group(2); + } + + String[] numbersAsString = actualTextToParse.split(delimiters); + int sum = 0; + + for (String numStr : numbersAsString) { + if (numStr.isEmpty()) { + continue; + } + + try { + int number = Integer.parseInt(numStr); + + if (number < 0) { + throw new RuntimeException("음수는 입력할 수 없습니다."); + } + sum += number; + } catch (NumberFormatException e) { + throw new RuntimeException("숫자 이외의 값이 포함되어 있습니다."); + } + } + return sum; + } +} \ No newline at end of file From e872080f8902879df66a6819726a55a558bebc9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=ED=83=9C=EC=A7=84?= <140797244+taejinn@users.noreply.github.com> Date: Thu, 31 Jul 2025 19:36:07 +0900 Subject: [PATCH 04/13] =?UTF-8?q?test:=20=EA=B3=84=EC=82=B0=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=ED=85=8C=EC=8A=A4=ED=8A=B8=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/CalcTest.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/test/java/CalcTest.java b/src/test/java/CalcTest.java index bb948f6a..da335180 100644 --- a/src/test/java/CalcTest.java +++ b/src/test/java/CalcTest.java @@ -1,12 +1,14 @@ @DisplayName("계산기 작동 테스트") public class CalcTest { + private final Calc calc = new Calc(); + @Test @DisplayName("더하기 테스트") void add() { final var a = 1; final var b = 2; - final var actual = a + b; + final var actual = calc.add(a, b); final var expected = 3; assertEquals(expected, actual); @@ -14,10 +16,10 @@ void add() { @Test @DisplayName("빼기 테스트") - void add() { + void minus() { final var a = 3; final var b = 1; - final var actual = a - b; + final var actual = calc.minus(a, b); final var expected = 2; assertEquals(expected, actual); @@ -25,10 +27,10 @@ void add() { @Test @DisplayName("곱하기 테스트") - void add() { + void times() { final var a = 2; final var b = 3; - final var actual = a * b; + final var actual = calc.times(a, b); final var expected = 6; assertEquals(expected, actual); @@ -36,10 +38,10 @@ void add() { @Test @DisplayName("나누기 테스트") - void add() { + void divide() { final var a = 10; final var b = 5; - final var actual = a / b; + final var actual = calc.divide(a, b); final var expected = 2; assertEquals(expected, actual); From 6d40dcf523b4e2652b85dbed0b4236aed2956e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=ED=83=9C=EC=A7=84?= <140797244+taejinn@users.noreply.github.com> Date: Thu, 31 Jul 2025 19:38:53 +0900 Subject: [PATCH 05/13] =?UTF-8?q?test:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=EA=B8=B0=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/StringCalcTest.java | 85 +++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/test/java/StringCalcTest.java diff --git a/src/test/java/StringCalcTest.java b/src/test/java/StringCalcTest.java new file mode 100644 index 00000000..349ee4d1 --- /dev/null +++ b/src/test/java/StringCalcTest.java @@ -0,0 +1,85 @@ + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +@DisplayName("문자열 계산기 테스트") +class StringCalcTest { + private final StringCalc stringCalc = new StringCalc(); + + @Test + @DisplayName("쉼표 구분자 문자열 계산 테스트") + void addWithComma() { + final var input = "1,2,3"; + final var actual = stringCalc.add(input); + final var expected = 6; + + assertEquals(expected, actual); + } + + @Test + @DisplayName("콜론 구분자 문자열 계산 테스트") + void addWithColon() { + final var input = "1:2:3"; + final var actual = stringCalc.add(input); + final var expected = 6; + + assertEquals(expected, actual); + } + + @Test + @DisplayName("쉼표와 콜론 혼합 구분자 테스트") + void addWithMixedDelimiters() { + final var input = "1,2:3"; + final var actual = stringCalc.add(input); + final var expected = 6; + + assertEquals(expected, actual); + } + + @Test + @DisplayName("빈 문자열 테스트") + void addEmptyString() { + final var input = ""; + final var actual = stringCalc.add(input); + final var expected = 0; + + assertEquals(expected, actual); + } + + @Test + @DisplayName("null 입력 테스트") + void addNullInput() { + final String input = null; + final var actual = stringCalc.add(input); + final var expected = 0; + + assertEquals(expected, actual); + } + + @Test + @DisplayName("커스텀 구분자 테스트") + void addWithCustomDelimiter() { + final var input = "//;\n1;2;3"; + final var actual = stringCalc.add(input); + final var expected = 6; + + assertEquals(expected, actual); + } + + @Test + @DisplayName("음수 입력 예외 테스트") + void addNegativeNumberThrowsException() { + final var input = "1,-2,3"; + + assertThrows(RuntimeException.class, () -> stringCalc.add(input)); + } + + @Test + @DisplayName("숫자가 아닌 값 입력 예외 테스트") + void addNonNumericValueThrowsException() { + final var input = "1,a,3"; + + assertThrows(RuntimeException.class, () -> stringCalc.add(input)); + } +} \ No newline at end of file From 6201b5ad5fc749e18baca0c9b0375e21662ad8ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=ED=83=9C=EC=A7=84?= <140797244+taejinn@users.noreply.github.com> Date: Thu, 31 Jul 2025 19:40:10 +0900 Subject: [PATCH 06/13] =?UTF-8?q?refactor:=20assertj=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 87254a3a..be94fd7e 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,7 @@ repositories { dependencies { testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation('org.junit.jupiter:junit-jupiter') + testImplementation('org.assertj:assertj-core') } test { From 0985a9a2654d3e8b17a752ea5d00a0f679cfaab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=ED=83=9C=EC=A7=84?= <140797244+taejinn@users.noreply.github.com> Date: Thu, 31 Jul 2025 19:43:08 +0900 Subject: [PATCH 07/13] =?UTF-8?q?refactor:=20junit=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=EB=A5=BC=20assertj=20=EB=A1=9C?= =?UTF-8?q?=20=EC=9E=AC=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CalcTest.java | 27 +++++++++++++++++++-------- src/test/java/StringCalcTest.java | 28 +++++++++++++--------------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/test/java/CalcTest.java b/src/test/java/CalcTest.java index da335180..f19a6662 100644 --- a/src/test/java/CalcTest.java +++ b/src/test/java/CalcTest.java @@ -1,4 +1,8 @@ +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; + @DisplayName("계산기 작동 테스트") public class CalcTest { private final Calc calc = new Calc(); @@ -9,9 +13,8 @@ void add() { final var a = 1; final var b = 2; final var actual = calc.add(a, b); - final var expected = 3; - assertEquals(expected, actual); + assertThat(actual).isEqualTo(3); } @Test @@ -20,9 +23,8 @@ void minus() { final var a = 3; final var b = 1; final var actual = calc.minus(a, b); - final var expected = 2; - assertEquals(expected, actual); + assertThat(actual).isEqualTo(2); } @Test @@ -31,9 +33,8 @@ void times() { final var a = 2; final var b = 3; final var actual = calc.times(a, b); - final var expected = 6; - assertEquals(expected, actual); + assertThat(actual).isEqualTo(6); } @Test @@ -42,8 +43,18 @@ void divide() { final var a = 10; final var b = 5; final var actual = calc.divide(a, b); - final var expected = 2; - assertEquals(expected, actual); + assertThat(actual).isEqualTo(2); + } + + @Test + @DisplayName("0으로 나누기 예외 테스트") + void divideByZeroThrowsException() { + final var a = 10; + final var b = 0; + + assertThatThrownBy(() -> calc.divide(a, b)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("0 으로 나눌 수 없습니다."); } } \ No newline at end of file diff --git a/src/test/java/StringCalcTest.java b/src/test/java/StringCalcTest.java index 349ee4d1..93cc07e0 100644 --- a/src/test/java/StringCalcTest.java +++ b/src/test/java/StringCalcTest.java @@ -1,7 +1,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import static org.assertj.core.api.Assertions.*; @DisplayName("문자열 계산기 테스트") class StringCalcTest { @@ -12,9 +12,8 @@ class StringCalcTest { void addWithComma() { final var input = "1,2,3"; final var actual = stringCalc.add(input); - final var expected = 6; - assertEquals(expected, actual); + assertThat(actual).isEqualTo(6); } @Test @@ -22,9 +21,8 @@ void addWithComma() { void addWithColon() { final var input = "1:2:3"; final var actual = stringCalc.add(input); - final var expected = 6; - assertEquals(expected, actual); + assertThat(actual).isEqualTo(6); } @Test @@ -32,9 +30,8 @@ void addWithColon() { void addWithMixedDelimiters() { final var input = "1,2:3"; final var actual = stringCalc.add(input); - final var expected = 6; - assertEquals(expected, actual); + assertThat(actual).isEqualTo(6); } @Test @@ -42,9 +39,8 @@ void addWithMixedDelimiters() { void addEmptyString() { final var input = ""; final var actual = stringCalc.add(input); - final var expected = 0; - assertEquals(expected, actual); + assertThat(actual).isEqualTo(0); } @Test @@ -52,9 +48,8 @@ void addEmptyString() { void addNullInput() { final String input = null; final var actual = stringCalc.add(input); - final var expected = 0; - assertEquals(expected, actual); + assertThat(actual).isEqualTo(0); } @Test @@ -62,9 +57,8 @@ void addNullInput() { void addWithCustomDelimiter() { final var input = "//;\n1;2;3"; final var actual = stringCalc.add(input); - final var expected = 6; - assertEquals(expected, actual); + assertThat(actual).isEqualTo(6); } @Test @@ -72,7 +66,9 @@ void addWithCustomDelimiter() { void addNegativeNumberThrowsException() { final var input = "1,-2,3"; - assertThrows(RuntimeException.class, () -> stringCalc.add(input)); + assertThatThrownBy(() -> stringCalc.add(input)) + .isInstanceOf(RuntimeException.class) + .hasMessage("음수는 입력할 수 없습니다."); } @Test @@ -80,6 +76,8 @@ void addNegativeNumberThrowsException() { void addNonNumericValueThrowsException() { final var input = "1,a,3"; - assertThrows(RuntimeException.class, () -> stringCalc.add(input)); + assertThatThrownBy(() -> stringCalc.add(input)) + .isInstanceOf(RuntimeException.class) + .hasMessage("숫자 이외의 값이 포함되어 있습니다."); } } \ No newline at end of file From b04a5a0ba0c52f47254177c24037455a073b526e Mon Sep 17 00:00:00 2001 From: PARK TAEJIN <140797244+taejinn@users.noreply.github.com> Date: Sun, 3 Aug 2025 00:09:15 +0900 Subject: [PATCH 08/13] =?UTF-8?q?fix:=20=ED=95=84=EC=9A=94=20=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EB=B6=80=EB=B6=84=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Calc.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Calc.java b/src/main/java/Calc.java index 83fc66d4..381c6173 100644 --- a/src/main/java/Calc.java +++ b/src/main/java/Calc.java @@ -15,7 +15,7 @@ public int times(int a, int b) { } public int divide(int a, int b) { - if (a == 0 || b == 0) { + if (b == 0) { throw new IllegalArgumentException("0 으로 나눌 수 없습니다."); } int res = a / b; From 24b236a7d4ab7f4816347ebe0918fb8545990ff8 Mon Sep 17 00:00:00 2001 From: PARK TAEJIN <140797244+taejinn@users.noreply.github.com> Date: Sun, 3 Aug 2025 00:11:42 +0900 Subject: [PATCH 09/13] =?UTF-8?q?refactor:=20=EC=83=81=EC=88=98=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/StringCalc.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/StringCalc.java b/src/main/java/StringCalc.java index 5a698229..a5edf308 100644 --- a/src/main/java/StringCalc.java +++ b/src/main/java/StringCalc.java @@ -3,14 +3,14 @@ public class StringCalc { - private static final String defaultDelimiters = "[,:]"; + private static final String DEFAULT_DELIMITERS = "[,:]"; public int add(String text) { if (text == null || text.isEmpty()) { return 0; } - String delimiters = defaultDelimiters; + String delimiters = DEFAULT_DELIMITERS; String actualTextToParse = text; Pattern customDelimiterPattern = Pattern.compile("//(.)\n(.*)"); From 82b005c970e4eb731ac83dbcb96742213b8f0306 Mon Sep 17 00:00:00 2001 From: PARK TAEJIN <140797244+taejinn@users.noreply.github.com> Date: Sun, 3 Aug 2025 00:15:20 +0900 Subject: [PATCH 10/13] =?UTF-8?q?fix:=20=EB=B9=8C=EB=93=9C=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index be94fd7e..8102a907 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation('org.junit.jupiter:junit-jupiter') - testImplementation('org.assertj:assertj-core') + testImplementation('org.assertj:assertj-core:3.24.2') } test { From 4eb89d11f9ed3cec2e9e98aaf32695af64eeaa3b Mon Sep 17 00:00:00 2001 From: PARK TAEJIN <140797244+taejinn@users.noreply.github.com> Date: Sun, 3 Aug 2025 00:29:08 +0900 Subject: [PATCH 11/13] =?UTF-8?q?refactor:=20=EB=8B=A8=EC=9D=BC=20?= =?UTF-8?q?=EC=B1=85=EC=9E=84=20=EC=9B=90=EC=B9=99=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/StringCalc.java | 64 +++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/src/main/java/StringCalc.java b/src/main/java/StringCalc.java index a5edf308..d7b10db9 100644 --- a/src/main/java/StringCalc.java +++ b/src/main/java/StringCalc.java @@ -6,41 +6,71 @@ public class StringCalc { private static final String DEFAULT_DELIMITERS = "[,:]"; public int add(String text) { - if (text == null || text.isEmpty()) { + if (isNullOrEmpty(text)) { return 0; } - String delimiters = DEFAULT_DELIMITERS; - String actualTextToParse = text; + DelimiterInfo delimiterInfo = parseDelimiterInfo(text); + String[] numbersAsString = splitByDelimiter(delimiterInfo.textToParse, delimiterInfo.delimiter); + + return calculateSum(numbersAsString); + } + + private boolean isNullOrEmpty(String text) { + return text == null || text.isEmpty(); + } + private DelimiterInfo parseDelimiterInfo(String text) { Pattern customDelimiterPattern = Pattern.compile("//(.)\n(.*)"); Matcher matcher = customDelimiterPattern.matcher(text); if (matcher.find()) { String customDelimiter = Pattern.quote(matcher.group(1)); - delimiters = customDelimiter; - actualTextToParse = matcher.group(2); + String actualTextToParse = matcher.group(2); + return new DelimiterInfo(customDelimiter, actualTextToParse); } - String[] numbersAsString = actualTextToParse.split(delimiters); - int sum = 0; + return new DelimiterInfo(DEFAULT_DELIMITERS, text); + } + private String[] splitByDelimiter(String text, String delimiter) { + return text.split(delimiter); + } + + private int calculateSum(String[] numbersAsString) { + int sum = 0; for (String numStr : numbersAsString) { if (numStr.isEmpty()) { continue; } + sum += parseAndValidateNumber(numStr); + } + return sum; + } - try { - int number = Integer.parseInt(numStr); + private int parseAndValidateNumber(String numStr) { + try { + int number = Integer.parseInt(numStr); + validateNumber(number); + return number; + } catch (NumberFormatException e) { + throw new RuntimeException("숫자 이외의 값이 포함되어 있습니다."); + } + } - if (number < 0) { - throw new RuntimeException("음수는 입력할 수 없습니다."); - } - sum += number; - } catch (NumberFormatException e) { - throw new RuntimeException("숫자 이외의 값이 포함되어 있습니다."); - } + private void validateNumber(int number) { + if (number < 0) { + throw new RuntimeException("음수는 입력할 수 없습니다."); + } + } + + private static class DelimiterInfo { + final String delimiter; + final String textToParse; + + DelimiterInfo(String delimiter, String textToParse) { + this.delimiter = delimiter; + this.textToParse = textToParse; } - return sum; } } \ No newline at end of file From f095ad05d4455fd0a5166107ed963f1bbeae7ced Mon Sep 17 00:00:00 2001 From: PARK TAEJIN <140797244+taejinn@users.noreply.github.com> Date: Sun, 3 Aug 2025 00:33:54 +0900 Subject: [PATCH 12/13] =?UTF-8?q?fix:=20=EC=BB=A4=EC=8A=A4=ED=85=80=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84=EC=9E=90=20=EC=82=AC=EC=9A=A9=20=EC=8B=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=20=EA=B5=AC=EB=B6=84=EC=9E=90=EB=A5=BC=20?= =?UTF-8?q?=EB=AC=B8=EC=9E=90=EB=A1=9C=20=EB=B3=B4=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/StringCalc.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/StringCalc.java b/src/main/java/StringCalc.java index d7b10db9..55af9585 100644 --- a/src/main/java/StringCalc.java +++ b/src/main/java/StringCalc.java @@ -27,7 +27,9 @@ private DelimiterInfo parseDelimiterInfo(String text) { if (matcher.find()) { String customDelimiter = Pattern.quote(matcher.group(1)); String actualTextToParse = matcher.group(2); - return new DelimiterInfo(customDelimiter, actualTextToParse); + // 커스텀 구분자와 기본 구분자를 모두 포함 + String combinedDelimiters = DEFAULT_DELIMITERS + "|" + customDelimiter; + return new DelimiterInfo(combinedDelimiters, actualTextToParse); } return new DelimiterInfo(DEFAULT_DELIMITERS, text); From 3e68faa27eb74c11873bdb526600ac38109c896e Mon Sep 17 00:00:00 2001 From: PARK TAEJIN <140797244+taejinn@users.noreply.github.com> Date: Sun, 3 Aug 2025 00:34:16 +0900 Subject: [PATCH 13/13] =?UTF-8?q?test:=20=EC=BB=A4=EC=8A=A4=ED=85=80=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84=EC=9E=90=EC=99=80=20=EA=B8=B0=EB=B3=B8=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84=EC=9E=90=20=ED=98=BC=ED=95=A9=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/StringCalcTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/StringCalcTest.java b/src/test/java/StringCalcTest.java index 93cc07e0..9cdb0195 100644 --- a/src/test/java/StringCalcTest.java +++ b/src/test/java/StringCalcTest.java @@ -80,4 +80,13 @@ void addNonNumericValueThrowsException() { .isInstanceOf(RuntimeException.class) .hasMessage("숫자 이외의 값이 포함되어 있습니다."); } + + @Test + @DisplayName("커스텀 구분자와 기본 구분자 혼합 테스트") + void addWithCustomAndDefaultDelimiters() { + final var input = "//@\n1@2,3:4"; + final var actual = stringCalc.add(input); + + assertThat(actual).isEqualTo(10); + } } \ No newline at end of file