From c2da9edc1c345cd9870664e13280a07c47b4f57a Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 18:50:52 +0900 Subject: [PATCH 01/24] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bd90ef0247..628d43de90 100644 --- a/README.md +++ b/README.md @@ -1 +1,14 @@ -# java-calculator-precourse \ No newline at end of file +# java-calculator-precourse + +--- +## ๐Ÿ› ๏ธ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก + +### ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฌธ์ž์—ด ์ฝ๋Š” ๊ธฐ๋Šฅ +- [x] camp.nextstep.edu.missionutils์—์„œ ์ œ๊ณตํ•˜๋Š” Console API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ +### ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ถ”์ถœ ๊ธฐ๋Šฅ +- [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ์„์‹œ, ๊ตฌ๋ถ„์ž List์— ์ถ”๊ฐ€ +- [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋Š” 1๊ฐœ๋กœ ์ œํ•œ (์ถ”ํ›„์— ๋ฆฌํŒฉํ† ๋ง ์˜ˆ์ •) +### ์ˆซ์ž ์ถ”์ถœ ๊ธฐ๋Šฅ +-[x] StringBuilder์™€ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ด์šฉํ•˜์—ฌ ์ˆซ์ž๋งŒ ์ถ”์ถœ +### ๊ณ„์‚ฐ ๊ธฐ๋Šฅ +-[x] ์ถ”์ถœํ•œ ์ˆซ์ž ๋ฐ”ํƒ•์œผ๋กœ ๋ง์…ˆ ์—ฐ์‚ฐ From 71d4d66735ce54f11e11601dd607b1aadf2d3669 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 18:55:35 +0900 Subject: [PATCH 02/24] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=EC=9E=85=EB=A0=A5=ED=95=9C=20=EB=AC=B8=EC=9E=90?= =?UTF-8?q?=EC=97=B4=20=EC=9D=BD=EB=8A=94=20=EA=B8=B0=EB=8A=A5=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/Application.java | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580fb40..58f10629bb 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,32 @@ package calculator; +import camp.nextstep.edu.missionutils.Console; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + public class Application { + + private List delimiters = new ArrayList<>(Arrays.asList(',', ':')); + private boolean isCustomDelimiter = false; + + + public void startApplication() { + List numbers = new ArrayList<>(); + + System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); + String input = Console.readLine(); + + long sum = 0; + + System.out.println("๊ฒฐ๊ณผ : " + sum); + } + public static void main(String[] args) { // TODO: ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ + Application app = new Application(); + app.startApplication(); } + } From 9b3087a607a7898f2b0f4e4ffe6c74f05cc72b5b Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 18:56:34 +0900 Subject: [PATCH 03/24] =?UTF-8?q?feat:=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=B6=94=EC=B6=9C=20=EA=B8=B0?= =?UTF-8?q?=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 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 58f10629bb..adb541c7f2 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -11,6 +11,12 @@ public class Application { private List delimiters = new ArrayList<>(Arrays.asList(',', ':')); private boolean isCustomDelimiter = false; + private void extractCustomDelimiter(String input, List delimiters) { + if(input.startsWith("//") && input.substring(3,5).equals("\\n")){ + delimiters.add(input.charAt(2)); + isCustomDelimiter = true; + } + } public void startApplication() { List numbers = new ArrayList<>(); @@ -18,6 +24,8 @@ public void startApplication() { System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); String input = Console.readLine(); + extractCustomDelimiter(input, delimiters); + long sum = 0; System.out.println("๊ฒฐ๊ณผ : " + sum); From 0ed76bf2814322e24a75339f0fdba18b71e08e6e Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 18:57:32 +0900 Subject: [PATCH 04/24] =?UTF-8?q?feat:=20=EC=88=AB=EC=9E=90=20=EC=B6=94?= =?UTF-8?q?=EC=B6=9C=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index adb541c7f2..f4d1a41488 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -18,6 +18,29 @@ private void extractCustomDelimiter(String input, List delimiters) { } } + private void extractNumbers(String input, List numbers) { + if(isCustomDelimiter) { + input = input.substring(5); + } + StringBuilder regex = new StringBuilder("["); + for (char delimiter : delimiters) { + regex.append("\\").append(delimiter); + } + regex.append("]"); + + // ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋“ค๋กœ ๋ถ„๋ฆฌ + String[] tokens = input.split(regex.toString()); + for (String token : tokens) { + if (!token.isEmpty()) { + try { + numbers.add(Long.parseLong(token)); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("์ž˜๋ชป๋œ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค."); + } + } + } + } + public void startApplication() { List numbers = new ArrayList<>(); From a4a5e4396d2fc9f7a56a4557d90ce0890ba8b738 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 18:59:03 +0900 Subject: [PATCH 05/24] =?UTF-8?q?feat:=20=EA=B3=84=EC=82=B0=20=EA=B8=B0?= =?UTF-8?q?=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 | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index f4d1a41488..bf0eda48f6 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -41,6 +41,14 @@ private void extractNumbers(String input, List numbers) { } } + private long calculateSum(List numbers) { + long sum = 0; + for(Long number : numbers) { + sum += number; + } + return sum; + } + public void startApplication() { List numbers = new ArrayList<>(); @@ -48,8 +56,8 @@ public void startApplication() { String input = Console.readLine(); extractCustomDelimiter(input, delimiters); - - long sum = 0; + extractNumbers(input, numbers); + long sum = calculateSum(numbers); System.out.println("๊ฒฐ๊ณผ : " + sum); } From b8100a9a7906556cafb7fa2ded581664f03ef6bb Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:00:55 +0900 Subject: [PATCH 06/24] =?UTF-8?q?docs:=20=EC=9D=8C=EC=88=98=20=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=20=EA=B8=B0=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 --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 628d43de90..ada11f9393 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ์„์‹œ, ๊ตฌ๋ถ„์ž List์— ์ถ”๊ฐ€ - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋Š” 1๊ฐœ๋กœ ์ œํ•œ (์ถ”ํ›„์— ๋ฆฌํŒฉํ† ๋ง ์˜ˆ์ •) ### ์ˆซ์ž ์ถ”์ถœ ๊ธฐ๋Šฅ --[x] StringBuilder์™€ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ด์šฉํ•˜์—ฌ ์ˆซ์ž๋งŒ ์ถ”์ถœ +- [x] StringBuilder์™€ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ด์šฉํ•˜์—ฌ ์ˆซ์ž๋งŒ ์ถ”์ถœ +- [x] ์Œ์ˆ˜ ํฌํ•จ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ ### ๊ณ„์‚ฐ ๊ธฐ๋Šฅ --[x] ์ถ”์ถœํ•œ ์ˆซ์ž ๋ฐ”ํƒ•์œผ๋กœ ๋ง์…ˆ ์—ฐ์‚ฐ +- [x] ์ถ”์ถœํ•œ ์ˆซ์ž ๋ฐ”ํƒ•์œผ๋กœ ๋ง์…ˆ ์—ฐ์‚ฐ From 84b427c6bbb73b4a25973712392ef5f2dcf837b4 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:03:53 +0900 Subject: [PATCH 07/24] =?UTF-8?q?feat:=20=EC=9D=8C=EC=88=98=20=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=20=EA=B8=B0=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/calculator/Application.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index bf0eda48f6..a1a9d28b97 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -33,7 +33,11 @@ private void extractNumbers(String input, List numbers) { for (String token : tokens) { if (!token.isEmpty()) { try { - numbers.add(Long.parseLong(token)); + Long number = Long.parseLong(token); + if(number < 0){ + throw new IllegalArgumentException("์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + } + numbers.add(number); } catch (NumberFormatException e) { throw new IllegalArgumentException("์ž˜๋ชป๋œ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค."); } From e1c9b0259c307fe73e8cce03f2fe6adb651a6257 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:13:10 +0900 Subject: [PATCH 08/24] =?UTF-8?q?refactor:=20MVC=20=ED=8C=A8=ED=84=B4=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=EC=9D=84=20=EC=9C=84=ED=95=9C=20InputView=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/main/java/calculator/view/InputView.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/calculator/view/InputView.java diff --git a/src/main/java/calculator/view/InputView.java b/src/main/java/calculator/view/InputView.java new file mode 100644 index 0000000000..682b99526c --- /dev/null +++ b/src/main/java/calculator/view/InputView.java @@ -0,0 +1,15 @@ +package calculator.view; + +import camp.nextstep.edu.missionutils.Console; + +public class InputView { + + public String read() { + System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); + return Console.readLine(); + } + + public void close() { + Console.close(); + } +} From 16f127d925f7511136c6b6db97ac4742136289be Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:13:20 +0900 Subject: [PATCH 09/24] =?UTF-8?q?refactor:=20MVC=20=ED=8C=A8=ED=84=B4=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=EC=9D=84=20=EC=9C=84=ED=95=9C=20OutputView?= =?UTF-8?q?=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/view/OutputView.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/calculator/view/OutputView.java diff --git a/src/main/java/calculator/view/OutputView.java b/src/main/java/calculator/view/OutputView.java new file mode 100644 index 0000000000..77cf224199 --- /dev/null +++ b/src/main/java/calculator/view/OutputView.java @@ -0,0 +1,8 @@ +package calculator.view; + +public class OutputView { + + public void print(long result) { + System.out.println("๊ฒฐ๊ณผ : " + result); + } +} From 8ebeb446c7a9109fae5af6eb466857522c690ea2 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:16:00 +0900 Subject: [PATCH 10/24] =?UTF-8?q?refactor:=20MVC=20=ED=8C=A8=ED=84=B4=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=EC=9D=84=20=EC=9C=84=ED=95=9C=20Calculator?= =?UTF-8?q?=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/model/Calculator.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/calculator/model/Calculator.java diff --git a/src/main/java/calculator/model/Calculator.java b/src/main/java/calculator/model/Calculator.java new file mode 100644 index 0000000000..9efa0322da --- /dev/null +++ b/src/main/java/calculator/model/Calculator.java @@ -0,0 +1,14 @@ +package calculator.model; + +import java.util.List; + +public class Calculator { + + private long calculateSum(List numbers) { + long sum = 0; + for(Long number : numbers) { + sum += number; + } + return sum; + } +} From 3e32b1aa073528877702d7a1cce330dd8f62440a Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:17:23 +0900 Subject: [PATCH 11/24] =?UTF-8?q?fix:=20Calculator=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=A0=91=EA=B7=BC=20=EC=A7=80=EC=A0=95=EC=9E=90=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Calculator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/Calculator.java b/src/main/java/calculator/model/Calculator.java index 9efa0322da..adf397a8b1 100644 --- a/src/main/java/calculator/model/Calculator.java +++ b/src/main/java/calculator/model/Calculator.java @@ -4,7 +4,7 @@ public class Calculator { - private long calculateSum(List numbers) { + public long calculateSum(List numbers) { long sum = 0; for(Long number : numbers) { sum += number; From ca103e31aa387b4a19b5d6ff744ae2851a4a2469 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:29:10 +0900 Subject: [PATCH 12/24] =?UTF-8?q?refactor:=20MVC=20=ED=8C=A8=ED=84=B4=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=EC=9D=84=20=EC=9C=84=ED=95=9C=20Extractor=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/main/java/calculator/model/Extractor.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/main/java/calculator/model/Extractor.java diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java new file mode 100644 index 0000000000..058a95e688 --- /dev/null +++ b/src/main/java/calculator/model/Extractor.java @@ -0,0 +1,61 @@ +package calculator.model; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class Extractor { + + private List delimiters = new ArrayList<>(Arrays.asList(',', ':')); + private boolean isCustomDelimiter = false; + + public void extractCustomDelimiter(String input, List delimiters) { + if(input.startsWith("//") && input.substring(3,5).equals("\\n")){ + delimiters.add(input.charAt(2)); + isCustomDelimiter = true; + } + } + + public void extractNumbers(String input, List numbers) { + + input = removeCustomDelimiter(input); + + String regex = makeRegex(); + + // ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋“ค๋กœ ๋ถ„๋ฆฌ + String[] tokens = input.split(regex); + for (String token : tokens) { + if (!token.isEmpty()) { + try { + Long number = Long.parseLong(token); + if(number < 0){ + throw new IllegalArgumentException("์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + } + numbers.add(number); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("์ž˜๋ชป๋œ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค."); + } + } + } + } + + //์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฉ”์†Œ๋“œ + private String removeCustomDelimiter(String input) { + if(isCustomDelimiter) { + input = input.substring(5); + } + return input; + } + + //๊ตฌ๋ถ„์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์†Œ๋“œ + private String makeRegex() { + StringBuilder regex = new StringBuilder("["); + for (char delimiter : delimiters) { + regex.append("\\").append(delimiter); + } + regex.append("]"); + + return regex.toString(); + } + +} From 3c0c4bbfbb3a9693cbb91ed6525700cf6c01f547 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:35:34 +0900 Subject: [PATCH 13/24] =?UTF-8?q?refactor:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EB=A1=9C=20=EC=9E=85=EB=A0=A5=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84=20=ED=9B=84=20=EB=AC=B8=EC=9E=90=20=EB=93=A4?= =?UTF-8?q?=EC=96=B4=20=EC=9E=88=EB=8B=A4=EB=A9=B4=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=EC=8B=9C=ED=82=A4=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=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/model/Extractor.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 058a95e688..77d6b9141e 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -26,15 +26,7 @@ public void extractNumbers(String input, List numbers) { String[] tokens = input.split(regex); for (String token : tokens) { if (!token.isEmpty()) { - try { - Long number = Long.parseLong(token); - if(number < 0){ - throw new IllegalArgumentException("์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); - } - numbers.add(number); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("์ž˜๋ชป๋œ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค."); - } + Long number = validateIsNumber(token); } } } @@ -58,4 +50,12 @@ private String makeRegex() { return regex.toString(); } + private Long validateIsNumber(String input) { + try{ + return Long.parseLong(input); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("์ž˜๋ชป๋œ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค."); + } + } + } From ee7f4e5badb0b02f44ce3228b619398c5b8cf80f Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:36:46 +0900 Subject: [PATCH 14/24] =?UTF-8?q?refactor:=20=EC=9D=8C=EC=88=98=EC=9D=B8?= =?UTF-8?q?=EC=A7=80=20=EC=B2=B4=ED=81=AC=ED=95=98=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=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/model/Extractor.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 77d6b9141e..e56a241218 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -27,6 +27,8 @@ public void extractNumbers(String input, List numbers) { for (String token : tokens) { if (!token.isEmpty()) { Long number = validateIsNumber(token); + validateNegativeNumber(number); + numbers.add(number); } } } @@ -58,4 +60,10 @@ private Long validateIsNumber(String input) { } } + private void validateNegativeNumber(Long number) { + if(number < 0) { + throw new IllegalArgumentException("์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + } + } + } From 829fb980d94e2da9efcb922d4f2ac9e4a94f3541 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:40:45 +0900 Subject: [PATCH 15/24] =?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=B6=94=EC=B6=9C=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EB=A7=A4=EA=B0=9C=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Extractor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index e56a241218..8aba492b71 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -9,7 +9,7 @@ public class Extractor { private List delimiters = new ArrayList<>(Arrays.asList(',', ':')); private boolean isCustomDelimiter = false; - public void extractCustomDelimiter(String input, List delimiters) { + public void extractCustomDelimiter(String input) { if(input.startsWith("//") && input.substring(3,5).equals("\\n")){ delimiters.add(input.charAt(2)); isCustomDelimiter = true; From c09784fb748745fd8243d5ef53d693956ea859c1 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:44:00 +0900 Subject: [PATCH 16/24] =?UTF-8?q?refactor:=20MVC=20=ED=8C=A8=ED=84=B4=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=EC=9D=84=20=EC=9C=84=ED=95=9C=20CalculatorCo?= =?UTF-8?q?ntroller=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 | 63 +------------------ .../controller/CalculatorController.java | 38 +++++++++++ 2 files changed, 41 insertions(+), 60 deletions(-) create mode 100644 src/main/java/calculator/controller/CalculatorController.java diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index a1a9d28b97..649496a434 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,5 +1,6 @@ package calculator; +import calculator.controller.CalculatorController; import camp.nextstep.edu.missionutils.Console; import java.util.ArrayList; @@ -8,68 +9,10 @@ public class Application { - private List delimiters = new ArrayList<>(Arrays.asList(',', ':')); - private boolean isCustomDelimiter = false; - - private void extractCustomDelimiter(String input, List delimiters) { - if(input.startsWith("//") && input.substring(3,5).equals("\\n")){ - delimiters.add(input.charAt(2)); - isCustomDelimiter = true; - } - } - - private void extractNumbers(String input, List numbers) { - if(isCustomDelimiter) { - input = input.substring(5); - } - StringBuilder regex = new StringBuilder("["); - for (char delimiter : delimiters) { - regex.append("\\").append(delimiter); - } - regex.append("]"); - - // ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋“ค๋กœ ๋ถ„๋ฆฌ - String[] tokens = input.split(regex.toString()); - for (String token : tokens) { - if (!token.isEmpty()) { - try { - Long number = Long.parseLong(token); - if(number < 0){ - throw new IllegalArgumentException("์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); - } - numbers.add(number); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("์ž˜๋ชป๋œ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค."); - } - } - } - } - - private long calculateSum(List numbers) { - long sum = 0; - for(Long number : numbers) { - sum += number; - } - return sum; - } - - public void startApplication() { - List numbers = new ArrayList<>(); - - System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); - String input = Console.readLine(); - - extractCustomDelimiter(input, delimiters); - extractNumbers(input, numbers); - long sum = calculateSum(numbers); - - System.out.println("๊ฒฐ๊ณผ : " + sum); - } - public static void main(String[] args) { // TODO: ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ - Application app = new Application(); - app.startApplication(); + CalculatorController calculatorController = new CalculatorController(); + calculatorController.run(); } } diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java new file mode 100644 index 0000000000..5ee814036a --- /dev/null +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -0,0 +1,38 @@ +package calculator.controller; + +import calculator.model.Calculator; +import calculator.model.Extractor; +import calculator.view.InputView; +import calculator.view.OutputView; + +import java.util.ArrayList; +import java.util.List; + +public class CalculatorController { + + private final Calculator calculator; + private final Extractor extractor; + private final InputView inputView; + private final OutputView outputView; + + public CalculatorController() { + this.calculator = new Calculator(); + this.extractor = new Extractor(); + this.inputView = new InputView(); + this.outputView = new OutputView(); + } + + public void run() { + List numbers = new ArrayList<>(); + + String input = inputView.read(); + inputView.close(); + + extractor.extractCustomDelimiter(input); + extractor.extractNumbers(input, numbers); + + long result = calculator.calculateSum(numbers); + + outputView.print(result); + } +} From b1d1c7b54acfb7ccae6b35315c8ab98bf0d472ff Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sat, 19 Oct 2024 19:49:01 +0900 Subject: [PATCH 17/24] =?UTF-8?q?fix:=20Extractor=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=A3=BC=EC=84=9D=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/model/Extractor.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 8aba492b71..c59c1b068d 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -23,6 +23,7 @@ public void extractNumbers(String input, List numbers) { String regex = makeRegex(); // ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋“ค๋กœ ๋ถ„๋ฆฌ + // ์ด๋•Œ ๊ตฌ๋ถ„์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ์—์„œ ๊ฑธ๋Ÿฌ์ง String[] tokens = input.split(regex); for (String token : tokens) { if (!token.isEmpty()) { @@ -52,6 +53,7 @@ private String makeRegex() { return regex.toString(); } + //๋ถ„๋ฆฌํ•œ ๋ฌธ์ž์—ด์ด ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ private Long validateIsNumber(String input) { try{ return Long.parseLong(input); @@ -60,6 +62,7 @@ private Long validateIsNumber(String input) { } } + //์Œ์ˆ˜์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ private void validateNegativeNumber(Long number) { if(number < 0) { throw new IllegalArgumentException("์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); From f7667337d2312644f6ee8f39b7a0d293a441edee Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sun, 20 Oct 2024 21:14:33 +0900 Subject: [PATCH 18/24] =?UTF-8?q?refactor:=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20import=EB=AC=B8=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/calculator/Application.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 649496a434..eebda43305 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,11 +1,6 @@ package calculator; import calculator.controller.CalculatorController; -import camp.nextstep.edu.missionutils.Console; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; public class Application { From c158903d252c042dbba803dfcb562d3e23781d2c Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sun, 20 Oct 2024 21:24:49 +0900 Subject: [PATCH 19/24] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index ada11f9393..83879be7ca 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,24 @@ # java-calculator-precourse --- + ## ๐Ÿ› ๏ธ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก ### ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฌธ์ž์—ด ์ฝ๋Š” ๊ธฐ๋Šฅ + - [x] camp.nextstep.edu.missionutils์—์„œ ์ œ๊ณตํ•˜๋Š” Console API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ + ### ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ถ”์ถœ ๊ธฐ๋Šฅ + - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ์„์‹œ, ๊ตฌ๋ถ„์ž List์— ์ถ”๊ฐ€ - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋Š” 1๊ฐœ๋กœ ์ œํ•œ (์ถ”ํ›„์— ๋ฆฌํŒฉํ† ๋ง ์˜ˆ์ •) +- [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋กœ ์ˆซ์ž๋Š” ๋ถˆ๊ฐ€๋Šฅ + ### ์ˆซ์ž ์ถ”์ถœ ๊ธฐ๋Šฅ + - [x] StringBuilder์™€ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ด์šฉํ•˜์—ฌ ์ˆซ์ž๋งŒ ์ถ”์ถœ - [x] ์Œ์ˆ˜ ํฌํ•จ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ + ### ๊ณ„์‚ฐ ๊ธฐ๋Šฅ + - [x] ์ถ”์ถœํ•œ ์ˆซ์ž ๋ฐ”ํƒ•์œผ๋กœ ๋ง์…ˆ ์—ฐ์‚ฐ From 166f009b5938845524f4ed8857437ad3d96f7f51 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Sun, 20 Oct 2024 21:25:58 +0900 Subject: [PATCH 20/24] =?UTF-8?q?feat:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EB=A1=9C=20=EC=88=AB=EC=9E=90=20=EB=93=A4=EC=96=B4=EC=98=AC=20?= =?UTF-8?q?=EC=8B=9C=20=EC=97=90=EB=9F=AC=20=EB=B0=9C=EC=83=9D=EC=8B=9C?= =?UTF-8?q?=ED=82=A4=EB=8A=94=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/model/Extractor.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index c59c1b068d..735a7af08b 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -10,8 +10,12 @@ public class Extractor { private boolean isCustomDelimiter = false; public void extractCustomDelimiter(String input) { - if(input.startsWith("//") && input.substring(3,5).equals("\\n")){ - delimiters.add(input.charAt(2)); + if (input.startsWith("//") && input.substring(3, 5).equals("\\n")) { + char delimiter = input.charAt(2); + + isNumber(delimiter); + + delimiters.add(delimiter); isCustomDelimiter = true; } } @@ -34,9 +38,15 @@ public void extractNumbers(String input, List numbers) { } } + private void isNumber(char input) { + if (Character.isDigit(input)) { + throw new IllegalArgumentException("์ˆซ์ž์ธ ๊ตฌ๋ถ„์ž๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + //์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฉ”์†Œ๋“œ private String removeCustomDelimiter(String input) { - if(isCustomDelimiter) { + if (isCustomDelimiter) { input = input.substring(5); } return input; @@ -55,7 +65,7 @@ private String makeRegex() { //๋ถ„๋ฆฌํ•œ ๋ฌธ์ž์—ด์ด ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ private Long validateIsNumber(String input) { - try{ + try { return Long.parseLong(input); } catch (NumberFormatException e) { throw new IllegalArgumentException("์ž˜๋ชป๋œ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค."); @@ -64,7 +74,7 @@ private Long validateIsNumber(String input) { //์Œ์ˆ˜์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ private void validateNegativeNumber(Long number) { - if(number < 0) { + if (number < 0) { throw new IllegalArgumentException("์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); } } From 8f8b0e22007cd4f81fd6b1284fa52bf04e46892e Mon Sep 17 00:00:00 2001 From: gyuseon Date: Mon, 21 Oct 2024 00:14:31 +0900 Subject: [PATCH 21/24] =?UTF-8?q?refactor:=20=EC=84=9C=EB=B9=84=EC=8A=A4?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=A7=80=EC=86=8D=EC=A0=81=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=82=AC=EC=9A=A9=EB=90=98=EB=8A=94=20=EC=83=81?= =?UTF-8?q?=EC=88=98=20enum=20=ED=83=80=EC=9E=85=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/CustomDelimiterIndex.java | 18 +++++++++++++ .../calculator/global/DefaultDelimiter.java | 17 +++++++++++++ .../calculator/global/DelimiterMarker.java | 17 +++++++++++++ .../calculator/global/MakeRegexDelimiter.java | 19 ++++++++++++++ src/main/java/calculator/model/Extractor.java | 25 +++++++++++++------ 5 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 src/main/java/calculator/global/CustomDelimiterIndex.java create mode 100644 src/main/java/calculator/global/DefaultDelimiter.java create mode 100644 src/main/java/calculator/global/DelimiterMarker.java create mode 100644 src/main/java/calculator/global/MakeRegexDelimiter.java diff --git a/src/main/java/calculator/global/CustomDelimiterIndex.java b/src/main/java/calculator/global/CustomDelimiterIndex.java new file mode 100644 index 0000000000..26ea9c4a48 --- /dev/null +++ b/src/main/java/calculator/global/CustomDelimiterIndex.java @@ -0,0 +1,18 @@ +package calculator.global; + +public enum CustomDelimiterIndex { + + CUSTOM_DELIMITER_INDEX(2), + CUSTOM_DELIMITER_SUFFIX_START(3), + CUSTOM_DELIMITER_SUFFIX_END(4); + + private final int key; + + CustomDelimiterIndex(int key) { + this.key = key; + } + + public int getKey() { + return key; + } +} diff --git a/src/main/java/calculator/global/DefaultDelimiter.java b/src/main/java/calculator/global/DefaultDelimiter.java new file mode 100644 index 0000000000..a4080d5d82 --- /dev/null +++ b/src/main/java/calculator/global/DefaultDelimiter.java @@ -0,0 +1,17 @@ +package calculator.global; + +public enum DefaultDelimiter { + + COMMA(','), + COLON(':'); + + private final char key; + + DefaultDelimiter(char key) { + this.key = key; + } + + public char getKey() { + return key; + } +} diff --git a/src/main/java/calculator/global/DelimiterMarker.java b/src/main/java/calculator/global/DelimiterMarker.java new file mode 100644 index 0000000000..1abb382094 --- /dev/null +++ b/src/main/java/calculator/global/DelimiterMarker.java @@ -0,0 +1,17 @@ +package calculator.global; + +public enum DelimiterMarker { + + PREFIX("//"), + SUFFIX("\\n"); + + private final String key; + + DelimiterMarker(String key) { + this.key = key; + } + + public String getKey() { + return key; + } +} diff --git a/src/main/java/calculator/global/MakeRegexDelimiter.java b/src/main/java/calculator/global/MakeRegexDelimiter.java new file mode 100644 index 0000000000..1e3fda25ce --- /dev/null +++ b/src/main/java/calculator/global/MakeRegexDelimiter.java @@ -0,0 +1,19 @@ +package calculator.global; + +public enum MakeRegexDelimiter { + + START("//"), // ์‹œ์ž‘ ๊ตฌ๋ถ„์ž + OPEN_BRACKET("["), // ์—ฌ๋Š” ๋Œ€๊ด„ํ˜ธ + CLOSE_BRACKET("]"); // ๋‹ซ๋Š” ๋Œ€๊ด„ํ˜ธ + + private final String key; + + MakeRegexDelimiter(String key) { + this.key = key; + } + + public String getKey() { + return key; + } + +} diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 735a7af08b..cc89437537 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -1,17 +1,28 @@ package calculator.model; +import calculator.global.CustomDelimiterIndex; +import calculator.global.DefaultDelimiter; +import calculator.global.DelimiterMarker; +import calculator.global.MakeRegexDelimiter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Extractor { - private List delimiters = new ArrayList<>(Arrays.asList(',', ':')); + private List delimiters = new ArrayList<>( + Arrays.asList(DefaultDelimiter.COMMA.getKey(), DefaultDelimiter.COLON.getKey())); private boolean isCustomDelimiter = false; public void extractCustomDelimiter(String input) { - if (input.startsWith("//") && input.substring(3, 5).equals("\\n")) { - char delimiter = input.charAt(2); + + if (input.startsWith(DelimiterMarker.PREFIX.getKey()) && + input.substring(CustomDelimiterIndex.CUSTOM_DELIMITER_SUFFIX_START.getKey(), + CustomDelimiterIndex.CUSTOM_DELIMITER_SUFFIX_END.getKey() + 1) + .equals(DelimiterMarker.SUFFIX.getKey()) + ) { + + char delimiter = input.charAt(CustomDelimiterIndex.CUSTOM_DELIMITER_INDEX.getKey()); isNumber(delimiter); @@ -47,18 +58,18 @@ private void isNumber(char input) { //์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฉ”์†Œ๋“œ private String removeCustomDelimiter(String input) { if (isCustomDelimiter) { - input = input.substring(5); + input = input.substring(CustomDelimiterIndex.CUSTOM_DELIMITER_SUFFIX_END.getKey() + 1); } return input; } //๊ตฌ๋ถ„์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์†Œ๋“œ private String makeRegex() { - StringBuilder regex = new StringBuilder("["); + StringBuilder regex = new StringBuilder(MakeRegexDelimiter.OPEN_BRACKET.getKey()); for (char delimiter : delimiters) { - regex.append("\\").append(delimiter); + regex.append(MakeRegexDelimiter.START.getKey()).append(delimiter); } - regex.append("]"); + regex.append(MakeRegexDelimiter.CLOSE_BRACKET.getKey()); return regex.toString(); } From 1f7cdefe5b975b6a52170bff78d9b2aec79f2106 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Mon, 21 Oct 2024 00:15:19 +0900 Subject: [PATCH 22/24] =?UTF-8?q?refactor:=20delimiters=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20final=EC=9C=BC=EB=A1=9C=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/calculator/model/Extractor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index cc89437537..b4abc54638 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -10,7 +10,7 @@ public class Extractor { - private List delimiters = new ArrayList<>( + private final List delimiters = new ArrayList<>( Arrays.asList(DefaultDelimiter.COMMA.getKey(), DefaultDelimiter.COLON.getKey())); private boolean isCustomDelimiter = false; From cdfa01b914c9c72a348c09707500300ea6fee6b3 Mon Sep 17 00:00:00 2001 From: gyuseon Date: Mon, 21 Oct 2024 00:17:10 +0900 Subject: [PATCH 23/24] =?UTF-8?q?refactor:=20extractNumbers=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EB=A7=A4=EA=B0=9C=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/controller/CalculatorController.java | 5 +---- src/main/java/calculator/model/Extractor.java | 6 +++++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 5ee814036a..d8103a2375 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -4,8 +4,6 @@ import calculator.model.Extractor; import calculator.view.InputView; import calculator.view.OutputView; - -import java.util.ArrayList; import java.util.List; public class CalculatorController { @@ -23,13 +21,12 @@ public CalculatorController() { } public void run() { - List numbers = new ArrayList<>(); String input = inputView.read(); inputView.close(); extractor.extractCustomDelimiter(input); - extractor.extractNumbers(input, numbers); + List numbers = extractor.extractNumbers(input); long result = calculator.calculateSum(numbers); diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index b4abc54638..8e4f5c2469 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -31,7 +31,9 @@ public void extractCustomDelimiter(String input) { } } - public void extractNumbers(String input, List numbers) { + public List extractNumbers(String input) { + + List numbers = new ArrayList<>(); input = removeCustomDelimiter(input); @@ -47,6 +49,8 @@ public void extractNumbers(String input, List numbers) { numbers.add(number); } } + + return numbers; } private void isNumber(char input) { From a2a0898f54de8cf1ef44b27763690f2b6e5feb7b Mon Sep 17 00:00:00 2001 From: gyuseon Date: Mon, 21 Oct 2024 00:26:23 +0900 Subject: [PATCH 24/24] =?UTF-8?q?fix:=20Javadoc=20=EC=A3=BC=EC=84=9D=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 --- .../calculator/global/CustomDelimiterIndex.java | 6 +++--- .../java/calculator/global/DelimiterMarker.java | 4 ++-- src/main/java/calculator/model/Calculator.java | 6 +++++- src/main/java/calculator/model/Extractor.java | 15 ++++++++++++--- src/main/java/calculator/view/InputView.java | 8 ++++++++ src/main/java/calculator/view/OutputView.java | 3 +++ 6 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/main/java/calculator/global/CustomDelimiterIndex.java b/src/main/java/calculator/global/CustomDelimiterIndex.java index 26ea9c4a48..7486f5e40d 100644 --- a/src/main/java/calculator/global/CustomDelimiterIndex.java +++ b/src/main/java/calculator/global/CustomDelimiterIndex.java @@ -2,9 +2,9 @@ public enum CustomDelimiterIndex { - CUSTOM_DELIMITER_INDEX(2), - CUSTOM_DELIMITER_SUFFIX_START(3), - CUSTOM_DELIMITER_SUFFIX_END(4); + CUSTOM_DELIMITER_INDEX(2), //์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ธ๋ฑ์Šค + CUSTOM_DELIMITER_SUFFIX_START(3), // \n ์‹œ์ž‘ ์ธ๋ฑ์Šค + CUSTOM_DELIMITER_SUFFIX_END(4); // \n ๋ ์ธ๋ฑ์Šค private final int key; diff --git a/src/main/java/calculator/global/DelimiterMarker.java b/src/main/java/calculator/global/DelimiterMarker.java index 1abb382094..56c28d7243 100644 --- a/src/main/java/calculator/global/DelimiterMarker.java +++ b/src/main/java/calculator/global/DelimiterMarker.java @@ -2,8 +2,8 @@ public enum DelimiterMarker { - PREFIX("//"), - SUFFIX("\\n"); + PREFIX("//"), // ์ปค์Šคํ…€ ์ƒ์„ฑ์ž ์•ž๋ถ€๋ถ„ + SUFFIX("\\n"); // ์ปค์Šคํ…€ ์ƒ์„ฑ์ž ๋’ท๋ถ€๋ถ„ private final String key; diff --git a/src/main/java/calculator/model/Calculator.java b/src/main/java/calculator/model/Calculator.java index adf397a8b1..6b7b93ab4d 100644 --- a/src/main/java/calculator/model/Calculator.java +++ b/src/main/java/calculator/model/Calculator.java @@ -4,9 +4,13 @@ public class Calculator { + /** + * @param numbers ๊ณ„์‚ฐํ•  Long ํƒ€์ž… List + * @return ๊ณ„์‚ฐ๋œ ํ•ฉ + */ public long calculateSum(List numbers) { long sum = 0; - for(Long number : numbers) { + for (Long number : numbers) { sum += number; } return sum; diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 8e4f5c2469..441829596a 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -12,8 +12,11 @@ public class Extractor { private final List delimiters = new ArrayList<>( Arrays.asList(DefaultDelimiter.COMMA.getKey(), DefaultDelimiter.COLON.getKey())); - private boolean isCustomDelimiter = false; + private boolean hasCustomDelimiter = false; + /** + * @param input ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ถ”์ถœํ•  ๋ฌธ์ž์—ด ์กฐ๊ฑด์— ๋งž๋Š” ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ถ”์ถœํ•˜์—ฌ delimiters ํ•„๋“œ์— ์ถ”๊ฐ€ hasCustomDelimiter ํ•„๋“œ๋ฅผ true ๋ณ€๊ฒฝ + */ public void extractCustomDelimiter(String input) { if (input.startsWith(DelimiterMarker.PREFIX.getKey()) && @@ -27,10 +30,15 @@ public void extractCustomDelimiter(String input) { isNumber(delimiter); delimiters.add(delimiter); - isCustomDelimiter = true; + hasCustomDelimiter = true; } } + /** + * @param input ์ˆซ์ž๋ฅผ ์ถ”์ถœํ•  ๋ฌธ์ž์—ด + * @return ์ถ”์ถœ๋œ ์ˆซ์ž์˜ List + */ + public List extractNumbers(String input) { List numbers = new ArrayList<>(); @@ -53,6 +61,7 @@ public List extractNumbers(String input) { return numbers; } + //์ˆซ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ private void isNumber(char input) { if (Character.isDigit(input)) { throw new IllegalArgumentException("์ˆซ์ž์ธ ๊ตฌ๋ถ„์ž๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); @@ -61,7 +70,7 @@ private void isNumber(char input) { //์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฉ”์†Œ๋“œ private String removeCustomDelimiter(String input) { - if (isCustomDelimiter) { + if (hasCustomDelimiter) { input = input.substring(CustomDelimiterIndex.CUSTOM_DELIMITER_SUFFIX_END.getKey() + 1); } return input; diff --git a/src/main/java/calculator/view/InputView.java b/src/main/java/calculator/view/InputView.java index 682b99526c..271c76bfc1 100644 --- a/src/main/java/calculator/view/InputView.java +++ b/src/main/java/calculator/view/InputView.java @@ -4,11 +4,19 @@ public class InputView { + /** + * ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›๋Š” ๋ฉ”์†Œ๋“œ + * + * @return ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ + */ public String read() { System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); return Console.readLine(); } + /** + * ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๊ณ , Console์„ ๋‹ซ๋Š” ๋ฉ”์†Œ๋“œ + */ public void close() { Console.close(); } diff --git a/src/main/java/calculator/view/OutputView.java b/src/main/java/calculator/view/OutputView.java index 77cf224199..cbf066e621 100644 --- a/src/main/java/calculator/view/OutputView.java +++ b/src/main/java/calculator/view/OutputView.java @@ -2,6 +2,9 @@ public class OutputView { + /** + * @param result ์ถœ๋ ฅํ•  ๊ฒฐ๊ณผ๊ฐ’ + */ public void print(long result) { System.out.println("๊ฒฐ๊ณผ : " + result); }