From 74857b765d92d76b7eb96888dd6e409c7a3c6adb Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Tue, 15 Oct 2024 16:44:23 +0900 Subject: [PATCH 001/116] =?UTF-8?q?docs:=20=EC=B4=88=EA=B8=B0=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84=20=EB=AA=A9=EB=A1=9D=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 --- README.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bd90ef0247..5acec5fdf4 100644 --- a/README.md +++ b/README.md @@ -1 +1,27 @@ -# java-calculator-precourse \ No newline at end of file +# java-calculator-precourse + +## ๐Ÿš€ ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก + +### โŒจ๏ธ ์ž…๋ ฅ + +- [ ] ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. + - [ ] ๋ง์…ˆ ๋ฌธ์ž์—ด ์ž…๋ ฅ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [ ] ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. + - [ ] ์ •๊ทœ์‹ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋๋Š”์ง€ ๊ฒ€์ฆํ•œ๋‹ค. + - [ ] ์–‘์ˆ˜, ์‰ผํ‘œ, ์ฝœ๋ก , ๋˜๋Š” ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์™ธ์˜ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•œ๋‹ค. + - [ ] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. + - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. + - [ ] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. + - [ ] ์ตœ์ข…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ˆซ์ž๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. + +### ๐Ÿ–ฅ ์ถœ๋ ฅ + +- [ ] ๋ง์…ˆ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [ ] "๊ฒฐ๊ณผ"๋ผ๋Š” ๋ฌธ์ž์—ด์™€ ๋ง์…ˆ ๊ฒฐ๊ณผ๋ฅผ ":" ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๊ตฌ๋ถ„ํ•œ๋‹ค. + +### โš™๏ธ ๋กœ์ง + +- [ ] ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋“ค์„ ๋”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. + - [ ] ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋“ค์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. \ No newline at end of file From def14f842850459cc7168cc348c8360cf4e561e2 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Tue, 15 Oct 2024 17:13:22 +0900 Subject: [PATCH 002/116] =?UTF-8?q?feat:=20InputView=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ด€๋ จ ํด๋ž˜์Šค --- src/main/java/calculator/view/InputView.java | 4 ++++ 1 file changed, 4 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..75f4ceb10d --- /dev/null +++ b/src/main/java/calculator/view/InputView.java @@ -0,0 +1,4 @@ +package calculator.view; + +public class InputView { +} From 92563d85ad218c868c2bb4c43d4eb025583feb3f Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Tue, 15 Oct 2024 17:21:25 +0900 Subject: [PATCH 003/116] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EB=A1=9C=EB=B6=80=ED=84=B0=20=EB=8D=A7=EC=85=88=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=97=B4=EC=9D=84=20=EC=9E=85=EB=A0=A5=EB=B0=9B?= =?UTF-8?q?=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 --- README.md | 20 ++++++++++---------- src/main/java/calculator/view/InputView.java | 6 ++++++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 5acec5fdf4..4b630d8ed0 100644 --- a/README.md +++ b/README.md @@ -5,16 +5,16 @@ ### โŒจ๏ธ ์ž…๋ ฅ - [ ] ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. - - [ ] ๋ง์…ˆ ๋ฌธ์ž์—ด ์ž…๋ ฅ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - - [ ] ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. - - [ ] ์ •๊ทœ์‹ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋๋Š”์ง€ ๊ฒ€์ฆํ•œ๋‹ค. - - [ ] ์–‘์ˆ˜, ์‰ผํ‘œ, ์ฝœ๋ก , ๋˜๋Š” ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์™ธ์˜ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•œ๋‹ค. - - [ ] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. - - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. - - [ ] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. - - [ ] ์ตœ์ข…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ˆซ์ž๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. + - [x] ๋ง์…ˆ ๋ฌธ์ž์—ด ์ž…๋ ฅ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [x] ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. + - [ ] ์ •๊ทœ์‹ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋๋Š”์ง€ ๊ฒ€์ฆํ•œ๋‹ค. + - [ ] ์–‘์ˆ˜, ์‰ผํ‘œ, ์ฝœ๋ก , ๋˜๋Š” ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์™ธ์˜ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•œ๋‹ค. + - [ ] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. + - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. + - [ ] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. + - [ ] ์ตœ์ข…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ˆซ์ž๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. ### ๐Ÿ–ฅ ์ถœ๋ ฅ diff --git a/src/main/java/calculator/view/InputView.java b/src/main/java/calculator/view/InputView.java index 75f4ceb10d..794896d0bf 100644 --- a/src/main/java/calculator/view/InputView.java +++ b/src/main/java/calculator/view/InputView.java @@ -1,4 +1,10 @@ package calculator.view; +import camp.nextstep.edu.missionutils.Console; + public class InputView { + public String readInput() { + System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); + return Console.readLine(); + } } From 433332e1876a8fbe5872f9d362902303120b801c Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Tue, 15 Oct 2024 19:38:40 +0900 Subject: [PATCH 004/116] =?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 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4b630d8ed0..45550a3ab7 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,17 @@ - [ ] ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. - [x] ๋ง์…ˆ ๋ฌธ์ž์—ด ์ž…๋ ฅ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. - - [ ] ์ •๊ทœ์‹ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋๋Š”์ง€ ๊ฒ€์ฆํ•œ๋‹ค. - - [ ] ์–‘์ˆ˜, ์‰ผํ‘œ, ์ฝœ๋ก , ๋˜๋Š” ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์™ธ์˜ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ๊ฒ€์ฆํ•œ๋‹ค. + - [ ] ์ˆซ์ž, ๊ตฌ๋ถ„์ž ์™ธ์˜ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•œ๋‹ค. + - [ ] ๋นˆ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋กœ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [ ] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. - [ ] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. + - [ ] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [ ] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ตœ์ข…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ˆซ์ž๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. ### ๐Ÿ–ฅ ์ถœ๋ ฅ From e2cad86a38d93b16ce7bfb090e21254c8ae7c2c0 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Tue, 15 Oct 2024 20:42:55 +0900 Subject: [PATCH 005/116] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EA=B0=92=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=EC=9D=84=20=EB=8B=B4=EB=8B=B9=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/InputValidator.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/java/calculator/model/InputValidator.java diff --git a/src/main/java/calculator/model/InputValidator.java b/src/main/java/calculator/model/InputValidator.java new file mode 100644 index 0000000000..625dee01f0 --- /dev/null +++ b/src/main/java/calculator/model/InputValidator.java @@ -0,0 +1,4 @@ +package calculator.model; + +public class InputValidator { +} From c845e49fcae98633e5c8e3c7bda216ae56bda71b Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Tue, 15 Oct 2024 20:43:50 +0900 Subject: [PATCH 006/116] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EA=B0=92?= =?UTF-8?q?=EC=97=90=20=EC=88=AB=EC=9E=90=EA=B0=80=20=ED=8F=AC=ED=95=A8?= =?UTF-8?q?=EB=90=98=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EA=B2=BD=EC=9A=B0,?= =?UTF-8?q?=20=EC=98=88=EC=99=B8=EB=A5=BC=20=EB=B0=98=ED=99=98=ED=95=98?= =?UTF-8?q?=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 --- README.md | 2 ++ src/main/java/calculator/model/InputValidator.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/README.md b/README.md index 45550a3ab7..8a07484d69 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ - [x] ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ๊ฒ€์ฆํ•œ๋‹ค. - [ ] ์ˆซ์ž, ๊ตฌ๋ถ„์ž ์™ธ์˜ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [x] ์ˆซ์ž๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [ ] ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•œ๋‹ค. - [ ] ๋นˆ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋กœ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputValidator.java b/src/main/java/calculator/model/InputValidator.java index 625dee01f0..4f616e951c 100644 --- a/src/main/java/calculator/model/InputValidator.java +++ b/src/main/java/calculator/model/InputValidator.java @@ -1,4 +1,18 @@ package calculator.model; +import java.util.List; + public class InputValidator { + List delimiters; + + public void validateHasNumber(String input) { + if (!hasNumber(input)) { + throw new IllegalArgumentException("์ˆซ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + + private boolean hasNumber(String input) { + return input.chars() + .anyMatch(Character::isDigit); + } } From d08f26238100f81d41533de2b46b31fb2cf468fe Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Tue, 15 Oct 2024 20:51:25 +0900 Subject: [PATCH 007/116] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EA=B0=92?= =?UTF-8?q?=EC=97=90=20=EA=B8=B0=EB=B3=B8=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=ED=8F=AC=ED=95=A8=EB=90=98=EC=96=B4=20=EC=9E=88?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EA=B2=BD=EC=9A=B0,=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=EB=A5=BC=20=EB=B0=98=ED=99=98=ED=95=98?= =?UTF-8?q?=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 --- README.md | 2 +- .../java/calculator/model/InputValidator.java | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8a07484d69..c7554f8773 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ๊ฒ€์ฆํ•œ๋‹ค. - [ ] ์ˆซ์ž, ๊ตฌ๋ถ„์ž ์™ธ์˜ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [x] ์ˆซ์ž๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - - [ ] ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [x] ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•œ๋‹ค. - [ ] ๋นˆ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋กœ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputValidator.java b/src/main/java/calculator/model/InputValidator.java index 4f616e951c..d579d513e5 100644 --- a/src/main/java/calculator/model/InputValidator.java +++ b/src/main/java/calculator/model/InputValidator.java @@ -1,13 +1,14 @@ package calculator.model; +import java.util.Arrays; import java.util.List; public class InputValidator { - List delimiters; + List delimiters = Arrays.asList(",", ":"); public void validateHasNumber(String input) { if (!hasNumber(input)) { - throw new IllegalArgumentException("์ˆซ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."); + throw new IllegalArgumentException("์ž…๋ ฅ๊ฐ’์— ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค."); } } @@ -15,4 +16,15 @@ private boolean hasNumber(String input) { return input.chars() .anyMatch(Character::isDigit); } + + public void validateHasDelimiter(String input) { + if (!hasDelimiter(input)) { + throw new IllegalArgumentException("์ž…๋ ฅ๊ฐ’์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค."); + } + } + + private boolean hasDelimiter(String input) { + return delimiters.stream() + .anyMatch(input::contains); + } } From 28c579c13b3a8b1a8b7e71562ab98ab2725f54fc Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Tue, 15 Oct 2024 20:57:38 +0900 Subject: [PATCH 008/116] =?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 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index c7554f8773..21f9599bb8 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,10 @@ - [x] ๋ง์…ˆ ๋ฌธ์ž์—ด ์ž…๋ ฅ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ๊ฒ€์ฆํ•œ๋‹ค. - - [ ] ์ˆซ์ž, ๊ตฌ๋ถ„์ž ์™ธ์˜ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [x] ์ˆซ์ž๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [x] ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•œ๋‹ค. - [ ] ๋นˆ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋กœ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑ ๋ฐ ์ถ”๊ฐ€ ๊ฒ€์ฆํ•œ๋‹ค. - [ ] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. From 82aa67182728d4cac0bf1cef63e234be46f07f17 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Tue, 15 Oct 2024 21:13:57 +0900 Subject: [PATCH 009/116] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EA=B0=92?= =?UTF-8?q?=EC=97=90=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=EA=B5=AC=EB=B6=84?= =?UTF-8?q?=EC=9E=90=EA=B0=80=20=ED=8F=AC=ED=95=A8=EB=90=98=EC=96=B4=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=EC=A7=80=20=ED=99=95=EC=9D=B8=ED=95=98?= =?UTF-8?q?=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 --- README.md | 2 +- src/main/java/calculator/model/InputParser.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 src/main/java/calculator/model/InputParser.java diff --git a/README.md b/README.md index 21f9599bb8..0b69321ae4 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ - [x] ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ๋นˆ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋กœ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑ ๋ฐ ์ถ”๊ฐ€ ๊ฒ€์ฆํ•œ๋‹ค. - - [ ] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. - [ ] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java new file mode 100644 index 0000000000..2b9cbc740f --- /dev/null +++ b/src/main/java/calculator/model/InputParser.java @@ -0,0 +1,12 @@ +package calculator.model; + +import java.util.Arrays; +import java.util.List; + +public class InputParser { + List delimiters = Arrays.asList(",", ":"); + + private boolean hasCustomDelimiter(String input) { + return input.startsWith("//"); + } +} From 24676f9cebaa30754c21be576bd784cbeecb8c50 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Tue, 15 Oct 2024 21:15:01 +0900 Subject: [PATCH 010/116] =?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=EB=A5=BC=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EA=B0=92=EC=97=90=EC=84=9C=20=EC=9E=98=EB=9D=BC=EB=82=B4?= =?UTF-8?q?=EC=96=B4=20=EA=B5=AC=EB=B6=84=EC=9E=90=20=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=EC=97=90=20=ED=8F=AC=ED=95=A8=EC=8B=9C=ED=82=A4=EB=8A=94=20?= =?UTF-8?q?=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 --- README.md | 2 +- src/main/java/calculator/model/InputParser.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0b69321ae4..de93d6e1ec 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ - [ ] ๋นˆ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋กœ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑ ๋ฐ ์ถ”๊ฐ€ ๊ฒ€์ฆํ•œ๋‹ค. - [x] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. + - [x] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. - [ ] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 2b9cbc740f..122316f211 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -6,6 +6,13 @@ public class InputParser { List delimiters = Arrays.asList(",", ":"); + private String addCustomDelimiter(String input) { + int delimiterStart = input.indexOf("//") + 2; + int delimiterEnd = input.indexOf("\n"); + + return input.substring(delimiterStart, delimiterEnd); + } + private boolean hasCustomDelimiter(String input) { return input.startsWith("//"); } From e4cd131ffcfbe73a28d6bc0d3bc6bd96188b9f5b Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Thu, 17 Oct 2024 17:57:41 +0900 Subject: [PATCH 011/116] =?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 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index de93d6e1ec..f39a31e0a9 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,12 @@ - [x] ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ๋นˆ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋กœ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑ ๋ฐ ์ถ”๊ฐ€ ๊ฒ€์ฆํ•œ๋‹ค. - - [x] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - - [x] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. + - [ ] ์ž…๋ ฅ๊ฐ’์—์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ˆซ์ž๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. + - [x] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. + - [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋บธ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ตœ์ข… ์ €์žฅํ•œ๋‹ค. - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. - - [ ] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. - [ ] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. From bdc73641993c869a71fd9b6f4705424dc0d52069 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Thu, 17 Oct 2024 18:00:01 +0900 Subject: [PATCH 012/116] =?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=EB=A5=BC=20=EB=BA=B8=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=97=B4=EC=9D=84=20=EC=9E=85=EB=A0=A5=EA=B0=92?= =?UTF-8?q?=EC=9D=84=20=EC=B5=9C=EC=A2=85=20=EC=A0=80=EC=9E=A5=ED=95=98?= =?UTF-8?q?=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 --- README.md | 2 +- src/main/java/calculator/model/InputParser.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f39a31e0a9..7399f0d27d 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ - [ ] ์ž…๋ ฅ๊ฐ’์—์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ˆซ์ž๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. - [x] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. - - [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋บธ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ตœ์ข… ์ €์žฅํ•œ๋‹ค. + - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋บธ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ตœ์ข… ์ €์žฅํ•œ๋‹ค. - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. - [x] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 122316f211..873e29208f 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -13,6 +13,16 @@ private String addCustomDelimiter(String input) { return input.substring(delimiterStart, delimiterEnd); } + public String removeCustomDelimiter(String input) { + if (hasCustomDelimiter(input)) { + int delimiterEnd = input.indexOf("\n"); + + return input.substring(delimiterEnd + 1); // \n ์ดํ›„์˜ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ + } + + return input; // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์›๋ณธ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ + } + private boolean hasCustomDelimiter(String input) { return input.startsWith("//"); } From d5c49b29869f48716d20ed547b33152f5f30ec9e Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Thu, 17 Oct 2024 22:02:33 +0900 Subject: [PATCH 013/116] =?UTF-8?q?refactor:=20=EC=9E=85=EB=A0=A5=EA=B0=92?= =?UTF-8?q?=20=ED=8C=8C=EC=8B=B1=20=EC=A0=84=EC=9D=98=20=EC=A0=84=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EA=B3=BC=EC=A0=95=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/model/InputParser.java | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 873e29208f..ca52e10f0d 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -2,17 +2,41 @@ import java.util.Arrays; import java.util.List; +import java.util.Optional; public class InputParser { - List delimiters = Arrays.asList(",", ":"); + private final String input; + List delimiters; + + public InputParser(String input) { + // ์›๋ณธ ๋ฌธ์ž์—ด์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋นผ๊ณ , delimiters ์— ์ถ”๊ฐ€ํ•œ๋‹ค. + this.input = removeCustomDelimiter(input); + + // ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด, ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋”ฐ๋กœ ์ถ”์ถœํ•ด์„œ ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•œ๋‹ค.. + List delimiters = Arrays.asList(",", ":"); + extractCustomDelimiter(input).ifPresent(delimiters::add); + this.delimiters = delimiters; + validateDelimiter(this.input); + } - private String addCustomDelimiter(String input) { - int delimiterStart = input.indexOf("//") + 2; - int delimiterEnd = input.indexOf("\n"); + /** + * ๋ฌธ์ž์—ด ์ „์ฒ˜๋ฆฌ + */ + // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ถ”์ถœ (์—†์„ ์ˆ˜ ์žˆ์Œ) + private Optional extractCustomDelimiter(String input) { + Optional customDelimiter = Optional.empty(); - return input.substring(delimiterStart, delimiterEnd); + if (hasCustomDelimiter(input)) { + int delimiterStart = input.indexOf("//") + 2; + int delimiterEnd = input.indexOf("\n"); + + customDelimiter = Optional.of(input.substring(delimiterStart, delimiterEnd)); + } + + return customDelimiter; } + // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ public String removeCustomDelimiter(String input) { if (hasCustomDelimiter(input)) { int delimiterEnd = input.indexOf("\n"); @@ -23,7 +47,15 @@ public String removeCustomDelimiter(String input) { return input; // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์›๋ณธ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ } + // ์ž…๋ ฅ๊ฐ’์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ private boolean hasCustomDelimiter(String input) { return input.startsWith("//"); } + + private void validateDelimiter(String input) { + if (input.chars() + .anyMatch(c -> !delimiters.contains(String.valueOf((char)c)))) { + throw new IllegalArgumentException("์ž…๋ ฅ๊ฐ’์— ์•ฝ์†๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + } + } } From 84ad4a6b6215c8dc7482b822db3a0f4fede2be98 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Thu, 17 Oct 2024 22:03:43 +0900 Subject: [PATCH 014/116] =?UTF-8?q?feat:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=EA=B8=B0=EC=A4=80=EC=9C=BC=EB=A1=9C=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=97=B4=EC=9D=84=20=EB=B6=84=EB=A6=AC=ED=95=98?= =?UTF-8?q?=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 --- README.md | 2 +- src/main/java/calculator/model/InputParser.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7399f0d27d..5145bb11ed 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋บธ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ตœ์ข… ์ €์žฅํ•œ๋‹ค. - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. - [x] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. + - [x] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. - [ ] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ตœ์ข…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ˆซ์ž๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index ca52e10f0d..e1c4e8ad0c 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -1,8 +1,10 @@ package calculator.model; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; +import java.util.regex.Pattern; public class InputParser { private final String input; @@ -19,6 +21,20 @@ public InputParser(String input) { validateDelimiter(this.input); } + /** + * ํ•ต์‹ฌ ๋กœ์ง + */ + // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ + private String[] splitInput(String input, List delimiters) { + String regex = String.join("|", + delimiters.stream() + .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ (ํŠน์ˆ˜ ๋ฌธ์ž์˜ ๊ฒฝ์šฐ ํ˜ผ๋™์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Œ) + .toArray(String[]::new) + ); + + return input.split(regex); + } + /** * ๋ฌธ์ž์—ด ์ „์ฒ˜๋ฆฌ */ From 9cea28ff05f4a2af6769d5c999a632d0cb9fbcdc Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Thu, 17 Oct 2024 22:05:07 +0900 Subject: [PATCH 015/116] =?UTF-8?q?feat:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=ED=86=B5=ED=95=B4=20=EB=B6=84=EB=A6=AC=EB=90=9C=20?= =?UTF-8?q?=EA=B0=92=EC=9D=B4=20=EC=88=AB=EC=9E=90=EA=B0=80=20=EC=95=84?= =?UTF-8?q?=EB=8B=90=20=EA=B2=BD=EC=9A=B0,=20=EC=98=88=EC=99=B8=EB=A5=BC?= =?UTF-8?q?=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/calculator/model/InputParser.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5145bb11ed..e3dff6ea8b 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. - [x] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. - - [ ] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [x] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ตœ์ข…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ˆซ์ž๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index e1c4e8ad0c..d596e0b5eb 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -35,6 +35,14 @@ private String[] splitInput(String input, List delimiters) { return input.split(regex); } + private void validateNumber(String s) { + try { + Integer.parseInt(s); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("๊ตฌ๋ถ„์ž ์‚ฌ์ด์— ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + } + } + /** * ๋ฌธ์ž์—ด ์ „์ฒ˜๋ฆฌ */ From ea427f94b8e60831ef2131659bfa6a3e12d486a7 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Thu, 17 Oct 2024 22:07:05 +0900 Subject: [PATCH 016/116] =?UTF-8?q?Feat:=20=EB=AC=B8=EC=9E=90=EC=97=B4?= =?UTF-8?q?=EB=A1=9C=EB=B6=80=ED=84=B0=20=EC=88=AB=EC=9E=90=EB=93=A4?= =?UTF-8?q?=EC=9D=84=20=EC=B6=94=EC=B6=9C=ED=95=98=EB=8A=94=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 --- README.md | 4 ++-- .../java/calculator/model/InputParser.java | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e3dff6ea8b..7ae7b28340 100644 --- a/README.md +++ b/README.md @@ -16,11 +16,11 @@ - [x] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋บธ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ตœ์ข… ์ €์žฅํ•œ๋‹ค. - - [ ] ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. + - [x] ๋ฌธ์ž์—ด๋กœ๋ถ€ํ„ฐ ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•œ๋‹ค. - [x] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. - [x] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - - [ ] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [ ] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ตœ์ข…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ˆซ์ž๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. ### ๐Ÿ–ฅ ์ถœ๋ ฅ diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index d596e0b5eb..a9875c83c0 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -24,6 +24,13 @@ public InputParser(String input) { /** * ํ•ต์‹ฌ ๋กœ์ง */ + // 1์ฐจ ๊ฐ€๊ณต๋œ ์ž…๋ ฅ๊ฐ’์—์„œ ์ˆซ์ž๋ฅผ ์ถ”์ถœ + public List extractNumbers(String input, List delimiters) { + String[] splitParts = splitInput(input, delimiters); + + return saveNumbers(splitParts); + } + // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ private String[] splitInput(String input, List delimiters) { String regex = String.join("|", @@ -35,6 +42,20 @@ private String[] splitInput(String input, List delimiters) { return input.split(regex); } + // ๋ถ„๋ฆฌ๋œ ๊ฐ ๋ถ€๋ถ„์—์„œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ + private List saveNumbers(String[] splitParts) { + List numbers = new ArrayList<>(); + Arrays.stream(splitParts) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .forEach(part -> { + validateNumber(part); + numbers.add(Integer.parseInt(part)); + }); + + return numbers; + } + private void validateNumber(String s) { try { Integer.parseInt(s); From 76e8e17354864a1f90e0902e324c7a6b41deeb90 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Thu, 17 Oct 2024 22:08:06 +0900 Subject: [PATCH 017/116] =?UTF-8?q?feat:=20Calculator=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๊ณ„์‚ฐ ๊ธฐ๋Šฅ ๊ด€๋ จ ํด๋ž˜์Šค ์ƒ์„ฑ --- src/main/java/calculator/model/Calculator.java | 4 ++++ 1 file changed, 4 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..c485fc9b15 --- /dev/null +++ b/src/main/java/calculator/model/Calculator.java @@ -0,0 +1,4 @@ +package calculator.model; + +public class Calculator { +} From 6764b1ac19e086c3df899f9e68e8c294cc1039c6 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 00:26:53 +0900 Subject: [PATCH 018/116] =?UTF-8?q?feat:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=ED=86=B5=ED=95=B4=20=EB=B6=84=EB=A6=AC=EB=90=9C=20?= =?UTF-8?q?=EA=B0=92=EC=9D=B4=20=EC=9D=8C=EC=88=98=EC=9D=BC=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0,=20=EC=98=88=EC=99=B8=EB=A5=BC=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=ED=95=98=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 --- README.md | 2 +- src/main/java/calculator/model/InputParser.java | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7ae7b28340..d2685c3906 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ - [x] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. - [x] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - - [ ] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - [x] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ตœ์ข…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ˆซ์ž๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. ### ๐Ÿ–ฅ ์ถœ๋ ฅ diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index a9875c83c0..68023c11d0 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -47,9 +47,10 @@ private List saveNumbers(String[] splitParts) { List numbers = new ArrayList<>(); Arrays.stream(splitParts) .map(String::trim) - .filter(s -> !s.isEmpty()) + .filter(part -> !part.isEmpty()) .forEach(part -> { validateNumber(part); + validateNumberPositive(part); numbers.add(Integer.parseInt(part)); }); @@ -64,6 +65,12 @@ private void validateNumber(String s) { } } + private void validateNumberPositive(String s) { + if (Integer.parseInt(s) <= 0) { + throw new IllegalArgumentException("์Œ์ˆ˜๋Š” ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + /** * ๋ฌธ์ž์—ด ์ „์ฒ˜๋ฆฌ */ From ea3f44ce4f1995acdd460b5bfdf245882114f943 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 00:54:57 +0900 Subject: [PATCH 019/116] =?UTF-8?q?feat:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=ED=86=B5=ED=95=B4=20=EB=B6=84=EB=A6=AC=EB=90=9C=20?= =?UTF-8?q?=EA=B0=92=EC=9D=B4=20=EB=B9=88=20=EB=AC=B8=EC=9E=90=EC=97=B4?= =?UTF-8?q?=EC=9D=BC=20=EA=B2=BD=EC=9A=B0,=20=EA=B2=B0=EA=B3=BC=EB=A1=9C?= =?UTF-8?q?=200=EC=9D=84=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=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 --- README.md | 2 +- src/main/java/calculator/model/InputParser.java | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d2685c3906..6eec1c2d5f 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ๊ฒ€์ฆํ•œ๋‹ค. - [x] ์ˆซ์ž๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [x] ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - - [ ] ๋นˆ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋กœ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑ ๋ฐ ์ถ”๊ฐ€ ๊ฒ€์ฆํ•œ๋‹ค. - [ ] ์ž…๋ ฅ๊ฐ’์—์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ˆซ์ž๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. - [x] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. @@ -19,6 +18,7 @@ - [x] ๋ฌธ์ž์—ด๋กœ๋ถ€ํ„ฐ ์ˆซ์ž๋“ค์„ ์ถ”์ถœํ•œ๋‹ค. - [x] ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค. + - [x] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ๋นˆ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋กœ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [x] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [x] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [ ] ์ตœ์ข…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ˆซ์ž๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 68023c11d0..7dd7510884 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -47,7 +47,7 @@ private List saveNumbers(String[] splitParts) { List numbers = new ArrayList<>(); Arrays.stream(splitParts) .map(String::trim) - .filter(part -> !part.isEmpty()) + .map(this::replaceBlankWithZero) .forEach(part -> { validateNumber(part); validateNumberPositive(part); @@ -57,6 +57,14 @@ private List saveNumbers(String[] splitParts) { return numbers; } + private String replaceBlankWithZero(String part) { + if (part.isBlank()) { + return "0"; + } + + return part; + } + private void validateNumber(String s) { try { Integer.parseInt(s); From 6e2e254b154ddca308379dd7454863f387165226 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 00:56:05 +0900 Subject: [PATCH 020/116] =?UTF-8?q?feat:=20Calculator=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=9D=98=20=EC=88=AB=EC=9E=90=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=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 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/calculator/model/Calculator.java b/src/main/java/calculator/model/Calculator.java index c485fc9b15..da92ea54e2 100644 --- a/src/main/java/calculator/model/Calculator.java +++ b/src/main/java/calculator/model/Calculator.java @@ -1,4 +1,7 @@ package calculator.model; +import java.util.List; + public class Calculator { + private List numbers; } From ac8e1406c8eef97c2215c400d8ac8ed128ad61d3 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 00:56:40 +0900 Subject: [PATCH 021/116] =?UTF-8?q?feat:=20Calculator=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=9D=98=20=EC=83=9D=EC=84=B1=EC=9E=90=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/model/Calculator.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/calculator/model/Calculator.java b/src/main/java/calculator/model/Calculator.java index da92ea54e2..0d5d59fcf1 100644 --- a/src/main/java/calculator/model/Calculator.java +++ b/src/main/java/calculator/model/Calculator.java @@ -4,4 +4,8 @@ public class Calculator { private List numbers; + + public Calculator(List numbers) { + this.numbers = numbers; + } } From 2c2a8a7adb30aaa7e3d6ee63bdf455cb4dc6b53e Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 00:57:34 +0900 Subject: [PATCH 022/116] =?UTF-8?q?feat:=20Calculator=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=9D=98=20=EB=8D=A7=EC=85=88=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/calculator/model/Calculator.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6eec1c2d5f..9ff88fc9ab 100644 --- a/README.md +++ b/README.md @@ -31,4 +31,4 @@ ### โš™๏ธ ๋กœ์ง - [ ] ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋“ค์„ ๋”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. - - [ ] ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋“ค์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. \ No newline at end of file + - [x] ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋“ค์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. \ No newline at end of file diff --git a/src/main/java/calculator/model/Calculator.java b/src/main/java/calculator/model/Calculator.java index 0d5d59fcf1..dc1d84759f 100644 --- a/src/main/java/calculator/model/Calculator.java +++ b/src/main/java/calculator/model/Calculator.java @@ -8,4 +8,13 @@ public class Calculator { public Calculator(List numbers) { this.numbers = numbers; } + + public int sum() { + int sum = 0; + for (int number : numbers) { + sum += number; + } + + return sum; + } } From 83a6ebf38f08a22a6f61311a367cdc8b3d7aafab Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 00:57:56 +0900 Subject: [PATCH 023/116] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C=EB=90=98=EC=97=88=EC=A7=80=EB=A7=8C=20=EB=AF=B8?= =?UTF-8?q?=EC=B2=98=20=EC=B2=B4=ED=81=AC=EB=90=98=EC=A7=80=20=EB=AA=BB?= =?UTF-8?q?=ED=95=9C=20=EA=B8=B0=EB=8A=A5=EB=93=A4=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9ff88fc9ab..bee6c41af7 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,11 @@ - [ ] ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. - [x] ๋ง์…ˆ ๋ฌธ์ž์—ด ์ž…๋ ฅ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. - - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ๊ฒ€์ฆํ•œ๋‹ค. + - [x] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ๊ฒ€์ฆํ•œ๋‹ค. - [x] ์ˆซ์ž๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [x] ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - - [ ] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑ ๋ฐ ์ถ”๊ฐ€ ๊ฒ€์ฆํ•œ๋‹ค. - - [ ] ์ž…๋ ฅ๊ฐ’์—์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ˆซ์ž๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. + - [x] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑ ๋ฐ ์ถ”๊ฐ€ ๊ฒ€์ฆํ•œ๋‹ค. + - [x] ์ž…๋ ฅ๊ฐ’์—์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ˆซ์ž๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. - [x] ๋ฌธ์ž์—ด์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋ฌธ์ž์—ด ์•ž ๋ถ€๋ถ„์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋บธ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ตœ์ข… ์ €์žฅํ•œ๋‹ค. @@ -21,7 +21,7 @@ - [x] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ๋นˆ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋กœ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [x] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - [x] ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - - [ ] ์ตœ์ข…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ˆซ์ž๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. + - [x] ์ตœ์ข…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ˆซ์ž๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. ### ๐Ÿ–ฅ ์ถœ๋ ฅ From 7fb4892cb54e6ba1d15b82ddf81d2aa451a9a8b9 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 01:02:30 +0900 Subject: [PATCH 024/116] =?UTF-8?q?feat:=20OutputView=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ์‚ฌ์šฉ์ž ์ถœ๋ ฅ ๊ด€๋ จ ํด๋ž˜์Šค --- src/main/java/calculator/view/OutputView.java | 4 ++++ 1 file changed, 4 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..4a2a4b0b17 --- /dev/null +++ b/src/main/java/calculator/view/OutputView.java @@ -0,0 +1,4 @@ +package calculator.view; + +public class OutputView { +} From 9e3388e182968fd9e1a1cfdb2a937984f098ff5b Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 01:03:53 +0900 Subject: [PATCH 025/116] =?UTF-8?q?feat:=20=EB=8D=A7=EC=85=88=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=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 --- README.md | 2 +- src/main/java/calculator/view/OutputView.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bee6c41af7..de5b707b96 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ ### ๐Ÿ–ฅ ์ถœ๋ ฅ - [ ] ๋ง์…ˆ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - - [ ] "๊ฒฐ๊ณผ"๋ผ๋Š” ๋ฌธ์ž์—ด์™€ ๋ง์…ˆ ๊ฒฐ๊ณผ๋ฅผ ":" ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๊ตฌ๋ถ„ํ•œ๋‹ค. + - [x] "๊ฒฐ๊ณผ"๋ผ๋Š” ๋ฌธ์ž์—ด์™€ ๋ง์…ˆ ๊ฒฐ๊ณผ๋ฅผ ":" ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๊ตฌ๋ถ„ํ•œ๋‹ค. ### โš™๏ธ ๋กœ์ง diff --git a/src/main/java/calculator/view/OutputView.java b/src/main/java/calculator/view/OutputView.java index 4a2a4b0b17..aee3e4c4dd 100644 --- a/src/main/java/calculator/view/OutputView.java +++ b/src/main/java/calculator/view/OutputView.java @@ -1,4 +1,7 @@ package calculator.view; public class OutputView { + public void printResult(int result) { + System.out.println("๊ฒฐ๊ณผ : " + result); + } } From f881ad6e440b2d4db03c912a515b21c0919badb7 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 01:04:58 +0900 Subject: [PATCH 026/116] =?UTF-8?q?feat:=20CalculatorController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๊ณ„์‚ฐ ๊ด€๋ จ Model๊ณผ View๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค --- src/main/java/calculator/controller/CalculatorController.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/java/calculator/controller/CalculatorController.java diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java new file mode 100644 index 0000000000..f2844877e4 --- /dev/null +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -0,0 +1,4 @@ +package calculator.controller; + +public class CalculatorController { +} From db6ca6a2475efbdbe07b05d951a1086c76afb995 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 01:26:54 +0900 Subject: [PATCH 027/116] =?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=A0=9C=EA=B1=B0=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EB=A5=BC=20private=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=20=EC=A0=9C=ED=95=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/InputParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 7dd7510884..5c8da54524 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -97,7 +97,7 @@ private Optional extractCustomDelimiter(String input) { } // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ - public String removeCustomDelimiter(String input) { + private String removeCustomDelimiter(String input) { if (hasCustomDelimiter(input)) { int delimiterEnd = input.indexOf("\n"); From 16a3b77d89d8cebdf99ad1561b550ed8195773d9 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 01:28:18 +0900 Subject: [PATCH 028/116] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EA=B0=92?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=EB=B6=80=ED=84=B0=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=EC=B6=94=EC=B6=9C=ED=95=98=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EC=9D=98=20=EA=B5=AC=EB=B6=84=EC=9E=90=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EA=B4=80=EB=A0=A8=20=ED=8C=8C=EB=9D=BC?= =?UTF-8?q?=EB=AF=B8=ED=84=B0=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/model/InputParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 5c8da54524..993b0bfc94 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -25,7 +25,7 @@ public InputParser(String input) { * ํ•ต์‹ฌ ๋กœ์ง */ // 1์ฐจ ๊ฐ€๊ณต๋œ ์ž…๋ ฅ๊ฐ’์—์„œ ์ˆซ์ž๋ฅผ ์ถ”์ถœ - public List extractNumbers(String input, List delimiters) { + public List extractNumbers(String input) { String[] splitParts = splitInput(input, delimiters); return saveNumbers(splitParts); From 613606da38f0e7f7cbf3dd2457956ed983c24204 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 01:40:26 +0900 Subject: [PATCH 029/116] =?UTF-8?q?refactor:=20=EA=B8=B0=EC=A1=B4=20InputP?= =?UTF-8?q?arser=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20input=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20=EA=B7=B8?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit input ํ•„๋“œ ์ œ๊ฑฐ์— ๋”ฐ๋ผ ๊ธฐ์กด์— ์ƒ์„ฑ์ž ๋‚ด์—์„œ ์ง„ํ–‰๋๋˜ ์ „์ฒ˜๋ฆฌ, ๊ฒ€์ฆ ๋กœ์ง๋“ค์˜ ๋‹ค์ˆ˜๊ฐ€ ๋ฉ”์„œ๋“œ๋กœ ์ด๋™ --- src/main/java/calculator/model/InputParser.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 993b0bfc94..a7ed98cfca 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -7,18 +7,13 @@ import java.util.regex.Pattern; public class InputParser { - private final String input; List delimiters; public InputParser(String input) { - // ์›๋ณธ ๋ฌธ์ž์—ด์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋นผ๊ณ , delimiters ์— ์ถ”๊ฐ€ํ•œ๋‹ค. - this.input = removeCustomDelimiter(input); - // ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด, ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋”ฐ๋กœ ์ถ”์ถœํ•ด์„œ ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•œ๋‹ค.. - List delimiters = Arrays.asList(",", ":"); - extractCustomDelimiter(input).ifPresent(delimiters::add); - this.delimiters = delimiters; - validateDelimiter(this.input); + List delimiter = Arrays.asList(",", ":"); + extractCustomDelimiter(input).ifPresent(delimiter::add); + this.delimiters = delimiter; } /** @@ -33,13 +28,16 @@ public List extractNumbers(String input) { // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ private String[] splitInput(String input, List delimiters) { + String processedInput = removeCustomDelimiter(input); + validateDelimiter(processedInput); + String regex = String.join("|", delimiters.stream() .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ (ํŠน์ˆ˜ ๋ฌธ์ž์˜ ๊ฒฝ์šฐ ํ˜ผ๋™์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Œ) .toArray(String[]::new) ); - return input.split(regex); + return processedInput.split(regex); } // ๋ถ„๋ฆฌ๋œ ๊ฐ ๋ถ€๋ถ„์—์„œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ From 0bb7a9d4c357a1deb323e31da5ca873ccbc8f5f4 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 01:41:27 +0900 Subject: [PATCH 030/116] =?UTF-8?q?refactor:=20=EC=97=AC=EB=9F=AC=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=93=A4?= =?UTF-8?q?=EC=9D=84=20=EB=AC=B6=EC=96=B4=EC=A3=BC=EB=8A=94=20=ED=86=B5?= =?UTF-8?q?=ED=95=A9=20=EA=B2=80=EC=A6=9D=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B8=B0=EC=A1=B4=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20private=EC=9C=BC=EB=A1=9C=20=EC=A0=91?= =?UTF-8?q?=EA=B7=BC=20=EC=A0=9C=ED=95=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/InputValidator.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/model/InputValidator.java b/src/main/java/calculator/model/InputValidator.java index d579d513e5..cbb8215c72 100644 --- a/src/main/java/calculator/model/InputValidator.java +++ b/src/main/java/calculator/model/InputValidator.java @@ -6,7 +6,12 @@ public class InputValidator { List delimiters = Arrays.asList(",", ":"); - public void validateHasNumber(String input) { + public void validateInput(String input) { + validateHasNumber(input); + validateHasDelimiter(input); + } + + private void validateHasNumber(String input) { if (!hasNumber(input)) { throw new IllegalArgumentException("์ž…๋ ฅ๊ฐ’์— ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค."); } @@ -17,7 +22,7 @@ private boolean hasNumber(String input) { .anyMatch(Character::isDigit); } - public void validateHasDelimiter(String input) { + private void validateHasDelimiter(String input) { if (!hasDelimiter(input)) { throw new IllegalArgumentException("์ž…๋ ฅ๊ฐ’์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค."); } From a91b7350a8138e1dc183c0a17b54e55b503b57ba Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 01:46:39 +0900 Subject: [PATCH 031/116] =?UTF-8?q?refactor:=20InputValidator=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20delimiters=20=ED=95=84=EB=93=9C?= =?UTF-8?q?=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=8B=9C=EC=A0=90=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๊ธฐ์กด ํ•„๋“œ ์ดˆ๊ธฐํ™”์—์„œ ์ƒ์„ฑ์ž ์ดˆ๊ธฐํ™”๋กœ ๋ณ€๊ฒฝ --- src/main/java/calculator/model/InputValidator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/InputValidator.java b/src/main/java/calculator/model/InputValidator.java index cbb8215c72..ae2826d895 100644 --- a/src/main/java/calculator/model/InputValidator.java +++ b/src/main/java/calculator/model/InputValidator.java @@ -4,9 +4,10 @@ import java.util.List; public class InputValidator { - List delimiters = Arrays.asList(",", ":"); + List delimiters; public void validateInput(String input) { + delimiters = Arrays.asList(",", ":"); validateHasNumber(input); validateHasDelimiter(input); } From 35dec0df606454976627ac80d6f3b9e9e930ec24 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 15:42:49 +0900 Subject: [PATCH 032/116] =?UTF-8?q?feat:=20CalculatorController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=ED=95=84=EB=93=9C=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=20=EB=B0=8F=20=EC=83=9D=EC=84=B1=EC=9E=90=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 --- .../calculator/controller/CalculatorController.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index f2844877e4..eaa321af11 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -1,4 +1,17 @@ package calculator.controller; +import calculator.model.InputValidator; +import calculator.view.InputView; +import calculator.view.OutputView; + public class CalculatorController { + private final InputView inputView; + private final InputValidator inputValidator; + private final OutputView outputView; + + public CalculatorController() { + this.inputView = new InputView(); + this.outputView = new OutputView(); + this.inputValidator = new InputValidator(); + } } From 1e2e160075ff20507829bc27bdfb03281bc9eecb Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 15:44:11 +0900 Subject: [PATCH 033/116] =?UTF-8?q?feat:=20=EC=9E=85=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EB=B0=8F=20=ED=95=B5=EC=8B=AC=20=EB=A1=9C=EC=A7=81=EC=9D=84=20?= =?UTF-8?q?CalculatorController=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20?= =?UTF-8?q?=EC=A2=85=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- .../controller/CalculatorController.java | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index de5b707b96..a7e0e5677e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ### โŒจ๏ธ ์ž…๋ ฅ -- [ ] ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. +- [x] ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. - [x] ๋ง์…ˆ ๋ฌธ์ž์—ด ์ž…๋ ฅ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. - [x] ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ๊ฒ€์ฆํ•œ๋‹ค. @@ -25,10 +25,10 @@ ### ๐Ÿ–ฅ ์ถœ๋ ฅ -- [ ] ๋ง์…ˆ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. +- [x] ๋ง์…ˆ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] "๊ฒฐ๊ณผ"๋ผ๋Š” ๋ฌธ์ž์—ด์™€ ๋ง์…ˆ ๊ฒฐ๊ณผ๋ฅผ ":" ๊ตฌ๋ถ„์ž๋ฅผ ํ†ตํ•ด ๊ตฌ๋ถ„ํ•œ๋‹ค. ### โš™๏ธ ๋กœ์ง -- [ ] ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋“ค์„ ๋”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. +- [x] ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋“ค์„ ๋”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. - [x] ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋“ค์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. \ No newline at end of file diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index eaa321af11..fc06a98065 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -1,5 +1,9 @@ package calculator.controller; +import java.util.List; + +import calculator.model.Calculator; +import calculator.model.InputParser; import calculator.model.InputValidator; import calculator.view.InputView; import calculator.view.OutputView; @@ -14,4 +18,14 @@ public CalculatorController() { this.outputView = new OutputView(); this.inputValidator = new InputValidator(); } + + public void run() { + String input = inputView.readInput(); + inputValidator.validateInput(input); + InputParser inputParser = new InputParser(input); + List numbers = inputParser.extractNumbers(input); + + Calculator calculator = new Calculator(numbers); + outputView.printResult(calculator.sum()); + } } From 868d62990220d8f877c9fe11ce9c7677888a16ab Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 15:44:39 +0900 Subject: [PATCH 034/116] =?UTF-8?q?feat:=20=EA=B3=84=EC=82=B0=EA=B8=B0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=201=EC=B0=A8=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580fb40..5ddf01d383 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,11 @@ package calculator; +import calculator.controller.CalculatorController; + public class Application { - public static void main(String[] args) { - // TODO: ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ - } + + public static void main(String[] args) { + CalculatorController calculatorController = new CalculatorController(); + calculatorController.run(); + } } From 18d5c8888ec9899b40c040082379b9099478641f Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 16:02:58 +0900 Subject: [PATCH 035/116] =?UTF-8?q?fix:=20=ED=97=88=EC=9A=A9=EB=90=9C=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84=EC=9E=90=EA=B0=80=20=EB=93=A4=EC=96=B4?= =?UTF-8?q?=EA=B0=94=EC=9D=8C=EC=97=90=EB=8F=84=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EB=A5=BC=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=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/InputParser.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index a7ed98cfca..838bfd9c46 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -111,9 +111,10 @@ private boolean hasCustomDelimiter(String input) { } private void validateDelimiter(String input) { - if (input.chars() - .anyMatch(c -> !delimiters.contains(String.valueOf((char)c)))) { - throw new IllegalArgumentException("์ž…๋ ฅ๊ฐ’์— ์•ฝ์†๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + String regex = String.join("|", delimiters); + + if (!input.matches("[\\d" + regex + "]+")) { + throw new IllegalArgumentException("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); } } } From 8b9ced4b551f19753e8ebfda35c585bbe66dbc1b Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 16:40:07 +0900 Subject: [PATCH 036/116] =?UTF-8?q?fix:=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EA=B5=AC=EB=B6=84=EC=9E=90=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/InputValidator.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/main/java/calculator/model/InputValidator.java b/src/main/java/calculator/model/InputValidator.java index ae2826d895..0f5d36211f 100644 --- a/src/main/java/calculator/model/InputValidator.java +++ b/src/main/java/calculator/model/InputValidator.java @@ -9,7 +9,6 @@ public class InputValidator { public void validateInput(String input) { delimiters = Arrays.asList(",", ":"); validateHasNumber(input); - validateHasDelimiter(input); } private void validateHasNumber(String input) { @@ -22,15 +21,4 @@ private boolean hasNumber(String input) { return input.chars() .anyMatch(Character::isDigit); } - - private void validateHasDelimiter(String input) { - if (!hasDelimiter(input)) { - throw new IllegalArgumentException("์ž…๋ ฅ๊ฐ’์— ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค."); - } - } - - private boolean hasDelimiter(String input) { - return delimiters.stream() - .anyMatch(input::contains); - } } From f18b5a40d001c429eb775e8b8feaebe2c69df913 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 17:05:02 +0900 Subject: [PATCH 037/116] =?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=EC=9D=98=20=EB=81=9D=EC=9D=84=20?= =?UTF-8?q?=EC=9D=B8=EC=8B=9D=ED=95=98=EC=A7=80=20=EB=AA=BB=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EC=97=90=EB=9F=AC=20=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/InputParser.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 838bfd9c46..be5e3667a2 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -86,7 +86,10 @@ private Optional extractCustomDelimiter(String input) { if (hasCustomDelimiter(input)) { int delimiterStart = input.indexOf("//") + 2; - int delimiterEnd = input.indexOf("\n"); + int delimiterEnd = input.indexOf("\\n"); + if (delimiterEnd == -1) { + throw new IllegalArgumentException("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ๋์„ ์˜๋ฏธํ•˜๋Š” \\n์ด ์—†์Šต๋‹ˆ๋‹ค."); + } customDelimiter = Optional.of(input.substring(delimiterStart, delimiterEnd)); } From 6af00a77439fa623fc603e51b836ac1ef85b8b47 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 17:05:32 +0900 Subject: [PATCH 038/116] =?UTF-8?q?fix:=20=EB=B6=88=EB=B3=80=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=B4=20add=20=EC=97=B0?= =?UTF-8?q?=EC=82=B0=EC=9D=B4=20=EC=A0=9C=ED=95=9C=EB=90=98=EB=8A=94=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=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/InputParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index be5e3667a2..558fa45dc4 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -11,7 +11,7 @@ public class InputParser { public InputParser(String input) { // ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด, ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋”ฐ๋กœ ์ถ”์ถœํ•ด์„œ ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•œ๋‹ค.. - List delimiter = Arrays.asList(",", ":"); + List delimiter = new ArrayList<>(List.of(",", ":")); extractCustomDelimiter(input).ifPresent(delimiter::add); this.delimiters = delimiter; } From edde85f264de523b2ca70ed512dccf6aecf46f88 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 17:53:32 +0900 Subject: [PATCH 039/116] =?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=EB=B6=80=EB=B6=84=EC=9D=84=20?= =?UTF-8?q?=EC=A0=9C=EB=8C=80=EB=A1=9C=20=EC=A0=9C=EA=B1=B0=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EB=AA=BB=ED=95=98=EB=8A=94=20=EC=97=90=EB=9F=AC=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/InputParser.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 558fa45dc4..03ad5e5449 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -100,9 +100,9 @@ private Optional extractCustomDelimiter(String input) { // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ private String removeCustomDelimiter(String input) { if (hasCustomDelimiter(input)) { - int delimiterEnd = input.indexOf("\n"); + int delimiterEnd = input.indexOf("\\n"); - return input.substring(delimiterEnd + 1); // \n ์ดํ›„์˜ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ + return input.substring(delimiterEnd + 2); // \n ์ดํ›„์˜ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ } return input; // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์›๋ณธ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ From 32927099f5f0e24e5533f106b17f5cf242d53c2d Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 17:54:40 +0900 Subject: [PATCH 040/116] =?UTF-8?q?refactor:=20=EB=AF=B8=ED=97=88=EA=B0=80?= =?UTF-8?q?=20=EA=B5=AC=EB=B6=84=EC=9E=90=20=EA=B2=80=EC=A6=9D=20=EC=8B=9C?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9=EB=90=98=EB=8A=94=20=EC=A0=95=EA=B7=9C?= =?UTF-8?q?=EC=8B=9D=EC=9D=84=20=EB=B3=B4=EB=8B=A4=20=EC=A7=81=EA=B4=80?= =?UTF-8?q?=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EB=B3=B4=EC=9D=B4=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/InputParser.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 03ad5e5449..2cd6430e70 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -114,9 +114,9 @@ private boolean hasCustomDelimiter(String input) { } private void validateDelimiter(String input) { - String regex = String.join("|", delimiters); + String regex = "[\\d" + String.join("", delimiters) + "]*"; - if (!input.matches("[\\d" + regex + "]+")) { + if (!input.matches(regex)) { throw new IllegalArgumentException("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); } } From 36b8e73a994b9eaa48d09b070b596431d85ccbfa Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 17:55:06 +0900 Subject: [PATCH 041/116] =?UTF-8?q?refactor:=20=EB=AF=B8=ED=97=88=EA=B0=80?= =?UTF-8?q?=20=EA=B5=AC=EB=B6=84=EC=9E=90=20=EA=B2=80=EC=A6=9D=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EB=AA=85=EC=9D=84=20=EB=B3=B4=EB=8B=A4=20?= =?UTF-8?q?=EC=A7=81=EA=B4=80=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/InputParser.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 2cd6430e70..782b4716af 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -29,7 +29,7 @@ public List extractNumbers(String input) { // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ private String[] splitInput(String input, List delimiters) { String processedInput = removeCustomDelimiter(input); - validateDelimiter(processedInput); + validateInvalidDelimiter(processedInput); String regex = String.join("|", delimiters.stream() @@ -113,7 +113,7 @@ private boolean hasCustomDelimiter(String input) { return input.startsWith("//"); } - private void validateDelimiter(String input) { + private void validateInvalidDelimiter(String input) { String regex = "[\\d" + String.join("", delimiters) + "]*"; if (!input.matches(regex)) { From 2b2b320b92cd5bbb47e77ec500e20ccab75d93ca Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Fri, 18 Oct 2024 18:06:58 +0900 Subject: [PATCH 042/116] =?UTF-8?q?feat:=20=ED=97=88=EC=9A=A9=EB=90=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=EC=97=90=EB=9F=AC=20=EB=A9=94=EC=8B=9C=EC=A7=80?= =?UTF-8?q?=EC=97=90=20=EC=B6=94=EA=B0=80=ED=95=98=EB=8A=94=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/model/InputParser.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 782b4716af..0aeb68f493 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -115,9 +115,10 @@ private boolean hasCustomDelimiter(String input) { private void validateInvalidDelimiter(String input) { String regex = "[\\d" + String.join("", delimiters) + "]*"; + String filteredInput = input.replaceAll(regex, ""); if (!input.matches(regex)) { - throw new IllegalArgumentException("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + throw new IllegalArgumentException("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค: " + filteredInput); } } } From d6cde41dc6a1f105e096e94d0161a3ab8e3ef1fc Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sat, 19 Oct 2024 01:58:40 +0900 Subject: [PATCH 043/116] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EC=A2=85=EB=A3=8C=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=EB=A9=94=EC=84=9C=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/view/InputView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/calculator/view/InputView.java b/src/main/java/calculator/view/InputView.java index 794896d0bf..5c93a3fd8e 100644 --- a/src/main/java/calculator/view/InputView.java +++ b/src/main/java/calculator/view/InputView.java @@ -7,4 +7,8 @@ public String readInput() { System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); return Console.readLine(); } + + public void closeRead() { + Console.close(); + } } From ebdde3ba9f0c72cc0f6be9e05f8d24c9a7b6e28b Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sat, 19 Oct 2024 02:01:03 +0900 Subject: [PATCH 044/116] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EC=A2=85=EB=A3=8C=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/controller/CalculatorController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index fc06a98065..85830f409f 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -21,7 +21,9 @@ public CalculatorController() { public void run() { String input = inputView.readInput(); + inputView.closeRead(); inputValidator.validateInput(input); + InputParser inputParser = new InputParser(input); List numbers = inputParser.extractNumbers(input); From 99a3daa0ad4f41d7874d3509385f812720e5056a Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sat, 19 Oct 2024 02:30:40 +0900 Subject: [PATCH 045/116] =?UTF-8?q?refactor:=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EB=8B=B4=EB=8B=B9=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20?= =?UTF-8?q?=EB=94=94=EB=A0=89=ED=86=A0=EB=A6=AC=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/controller/CalculatorController.java | 2 +- .../java/calculator/{model => validation}/InputValidator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/java/calculator/{model => validation}/InputValidator.java (94%) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 85830f409f..89714df6ac 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -4,7 +4,7 @@ import calculator.model.Calculator; import calculator.model.InputParser; -import calculator.model.InputValidator; +import calculator.validation.InputValidator; import calculator.view.InputView; import calculator.view.OutputView; diff --git a/src/main/java/calculator/model/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java similarity index 94% rename from src/main/java/calculator/model/InputValidator.java rename to src/main/java/calculator/validation/InputValidator.java index 0f5d36211f..a919a2cb97 100644 --- a/src/main/java/calculator/model/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -1,4 +1,4 @@ -package calculator.model; +package calculator.validation; import java.util.Arrays; import java.util.List; From b8fe0c7b6b4023fb81dc970c72d3730435faacb6 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sat, 19 Oct 2024 18:07:32 +0900 Subject: [PATCH 046/116] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EA=B0=92?= =?UTF-8?q?=EC=9D=B4=20=EB=B9=88=20=EB=AC=B8=EC=9E=90=EC=97=B4=EC=9D=BC=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0,=20Calculator=20=EA=B0=9D=EC=B2=B4=EC=97=90?= =?UTF-8?q?=20=EB=B9=88=20=EC=88=AB=EC=9E=90=20=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=A5=BC=20=EC=A0=84=EB=8B=AC=ED=95=98=EB=8A=94=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/model/InputParser.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 0aeb68f493..00a1452920 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -21,6 +21,9 @@ public InputParser(String input) { */ // 1์ฐจ ๊ฐ€๊ณต๋œ ์ž…๋ ฅ๊ฐ’์—์„œ ์ˆซ์ž๋ฅผ ์ถ”์ถœ public List extractNumbers(String input) { + if (input.isBlank()) { + return List.of(); + } String[] splitParts = splitInput(input, delimiters); return saveNumbers(splitParts); From 099b53651242e4e2c6e5273644dbfd739572d72e Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sat, 19 Oct 2024 18:16:52 +0900 Subject: [PATCH 047/116] =?UTF-8?q?refactor:=20=EC=A0=95=EC=88=98=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=20?= =?UTF-8?q?=EB=B0=8F=20=EB=82=B4=EB=B6=80=EC=97=90=EC=84=9C=20=EB=8D=98?= =?UTF-8?q?=EC=A7=80=EB=8A=94=20=EC=97=90=EB=9F=AC=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=EB=A5=BC=20=EC=A7=81=EA=B4=80=EC=A0=81=EC=9C=BC?= =?UTF-8?q?=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/InputParser.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 00a1452920..96cf00824f 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -50,7 +50,7 @@ private List saveNumbers(String[] splitParts) { .map(String::trim) .map(this::replaceBlankWithZero) .forEach(part -> { - validateNumber(part); + validateDigit(part); validateNumberPositive(part); numbers.add(Integer.parseInt(part)); }); @@ -66,11 +66,11 @@ private String replaceBlankWithZero(String part) { return part; } - private void validateNumber(String s) { + private void validateDigit(String s) { try { Integer.parseInt(s); } catch (NumberFormatException e) { - throw new IllegalArgumentException("๊ตฌ๋ถ„์ž ์‚ฌ์ด์— ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + throw new IllegalArgumentException("๊ตฌ๋ถ„์ž ์‚ฌ์ด์— ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); } } From 3276f8ec209b339ca391963beffe5a106c4a3aba Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sat, 19 Oct 2024 18:32:59 +0900 Subject: [PATCH 048/116] =?UTF-8?q?refactor:=20=EC=96=91=EC=88=98=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EB=A9=94=EC=84=9C=EB=93=9C=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EB=A9=94=EC=8B=9C=EC=A7=80=EB=A5=BC=20=EC=A7=81?= =?UTF-8?q?=EA=B4=80=EC=A0=81=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/InputParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 96cf00824f..d3ba09dcc0 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -76,7 +76,7 @@ private void validateDigit(String s) { private void validateNumberPositive(String s) { if (Integer.parseInt(s) <= 0) { - throw new IllegalArgumentException("์Œ์ˆ˜๋Š” ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + throw new IllegalArgumentException("0 ๋˜๋Š” ์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); } } From be4be3190556a78b0d911776ec4c6f4dd8957592 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sat, 19 Oct 2024 19:34:27 +0900 Subject: [PATCH 049/116] =?UTF-8?q?docs:=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=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 | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a7e0e5677e..8e964ae57f 100644 --- a/README.md +++ b/README.md @@ -31,4 +31,47 @@ ### โš™๏ธ ๋กœ์ง - [x] ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋“ค์„ ๋”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. - - [x] ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋“ค์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. \ No newline at end of file + - [x] ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋“ค์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + +--- + +## ๐Ÿ› ๏ธ ๋ฆฌํŒฉํ† ๋ง ๋ชฉ๋ก + +### 1๏ธโƒฃ ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ์žˆ๋Š” ํ˜„ ๊ฒ€์ฆ ๋กœ์ง โ†’ ๋” ๋งŽ์€ ์˜ˆ์™ธ์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด, ๋” ๋งŽ์€ ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ + +- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž("\\")๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์‹ค์ œ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ๋ฒ•("\")์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๋‚˜ ์•ŒํŒŒ๋ฒณ์ด ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด("")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๊ณต๋ฐฑ(" ")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [ ] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [ ] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ("."์„ ํฌํ•จ)์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. + - [ ] ๊ธฐ์กด ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ (".")์ด ์žˆ์„ ๊ฒฝ์šฐ, ์†Œ์ˆ˜ ์ž…๋ ฅ์ด ๋ถˆ๊ฐ€ํ•˜๋„๋ก ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. + - [ ] ๊ธฐ์กด ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ (".")์ด ์—†์„ ๊ฒฝ์šฐ, ์†Œ์ˆ˜ ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. + - [ ] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์— ์ (".")์ด ํฌํ•จ๋˜์–ด ์žˆ๋”๋ผ๋„ ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. + +### 2๏ธโƒฃ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ๊ณผ ํŒŒ์‹ฑ ๋กœ์ง์ด ํ˜ผ์šฉ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ โ†’ ํ™•์‹คํ•˜๊ฒŒ ์ฑ…์ž„์„ ๋ถ„๋ฆฌ + +- [ ] ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋“ค์€ ๋ชจ๋‘ `InputValidator`์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ์ด๋™์‹œํ‚จ๋‹ค. +- [ ] ์ž…๋ ฅ๊ฐ’ ํŒŒ์‹ฑ ๊ณผ์ •์—์„œ ์“ฐ์ด๋Š” ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ๋“ค์€ `InputParser` ๋‚ด์—์„œ `InputValidator`๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. + +### 3๏ธโƒฃ ๋งค์ง ๋„˜๋ฒ„ ๋ฐ ๋ฆฌํ„ฐ๋Ÿด ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์ถ”ํ›„ ์œ ์ง€๋ณด์ˆ˜์—์„œ์˜ ์–ด๋ ค์›€ ์˜ˆ์ƒ โ†’ ํด๋ž˜์Šค ๋ฐ ์ƒ์ˆ˜๋กœ์„œ ๊ด€๋ฆฌ + +- [ ] ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ Enum์„ ํ†ตํ•ด ์ƒ์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. +- [ ] ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ Enum์„ ํ†ตํ•ด ์ƒ์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. + +### 4๏ธโƒฃ ์ˆซ์ž ๊ฐ’๋“ค์ด ๊ฐ ๊ฐ์ฒด์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฑฐ์น˜๋ฉฐ ๋ณ€๊ฒฝ๋  ์—ฌ์ง€๊ฐ€ ์žˆ์Œ โ†’ ๋ถˆ๋ณ€ ๊ฐœ๋… ์ ์šฉ + +- [ ] ์ˆซ์ž ๊ฐ’๋“ค์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก `final` ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [ ] ์ˆซ์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ์ „๋‹ฌํ•  ๋–„, ๋ถˆ๋ณ€ ๋ฆฌ์ŠคํŠธ๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋„๋ก List.of ๋˜๋Š” unmodifiableList๋ฅผ ์ ์šฉํ•œ๋‹ค. + +### 5๏ธโƒฃ ์ •์งํ•˜๊ฒŒ ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ์—๋งŒ ์ง‘์ค‘ํ•œ ์ฝ”๋“œ โ†’ ์ถ”ํ›„ ํ™•์žฅ ์‹œ ๋” ๋งŽ์€ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์กฐ ๋ณ€๊ฒฝ + +- [ ] `Calculator` ํด๋ž˜์Šค์˜ ๋ง์…ˆ ์—ฐ์‚ฐ์ด ์†Œ์ˆ˜ ๋ง์…ˆ์„ ์ง€์›ํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. +- [ ] ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ, ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. +- [ ] ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. + +### 6๏ธโƒฃ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋‹จ 2๊ฐœ๋ฐ–์— ์—†๋Š” ์ƒํ™ฉ โ†’ ๋” ๋งŽ์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ํ–ฅ์ƒ + +- [ ] ๊ฐ ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [ ] ๊ทธ ์™ธ์— ๊ฐ ๋ฉ”์„œ๋“œ๋“ค์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. \ No newline at end of file From 32efd806f0adfa30a5cfde92bd12ef0e2788cd51 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sun, 20 Oct 2024 17:19:59 +0900 Subject: [PATCH 050/116] =?UTF-8?q?refactor:=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EA=B2=80=EC=A6=9D=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/validation/InputValidator.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index a919a2cb97..0f74a41216 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -8,17 +8,5 @@ public class InputValidator { public void validateInput(String input) { delimiters = Arrays.asList(",", ":"); - validateHasNumber(input); - } - - private void validateHasNumber(String input) { - if (!hasNumber(input)) { - throw new IllegalArgumentException("์ž…๋ ฅ๊ฐ’์— ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค."); - } - } - - private boolean hasNumber(String input) { - return input.chars() - .anyMatch(Character::isDigit); } } From 3686a82fa7837d7e668894e249cdd63a726aa9f7 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sun, 20 Oct 2024 17:33:03 +0900 Subject: [PATCH 051/116] =?UTF-8?q?refactor:=20=EA=B0=80=EB=8F=85=EC=84=B1?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=9C=20InputParser=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=82=B4=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/model/InputParser.java | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index d3ba09dcc0..180b00dd59 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -43,6 +43,31 @@ private String[] splitInput(String input, List delimiters) { return processedInput.split(regex); } + // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ + private String removeCustomDelimiter(String input) { + if (hasCustomDelimiter(input)) { + int delimiterEnd = input.indexOf("\\n"); + + return input.substring(delimiterEnd + 2); // \n ์ดํ›„์˜ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ + } + + return input; // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์›๋ณธ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ + } + + // ์ž…๋ ฅ๊ฐ’์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ + private boolean hasCustomDelimiter(String input) { + return input.startsWith("//"); + } + + private void validateInvalidDelimiter(String input) { + String regex = "[\\d" + String.join("", delimiters) + "]*"; + String filteredInput = input.replaceAll(regex, ""); + + if (!input.matches(regex)) { + throw new IllegalArgumentException("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค: " + filteredInput); + } + } + // ๋ถ„๋ฆฌ๋œ ๊ฐ ๋ถ€๋ถ„์—์„œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ private List saveNumbers(String[] splitParts) { List numbers = new ArrayList<>(); @@ -99,29 +124,4 @@ private Optional extractCustomDelimiter(String input) { return customDelimiter; } - - // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ - private String removeCustomDelimiter(String input) { - if (hasCustomDelimiter(input)) { - int delimiterEnd = input.indexOf("\\n"); - - return input.substring(delimiterEnd + 2); // \n ์ดํ›„์˜ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ - } - - return input; // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์›๋ณธ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ - } - - // ์ž…๋ ฅ๊ฐ’์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ - private boolean hasCustomDelimiter(String input) { - return input.startsWith("//"); - } - - private void validateInvalidDelimiter(String input) { - String regex = "[\\d" + String.join("", delimiters) + "]*"; - String filteredInput = input.replaceAll(regex, ""); - - if (!input.matches(regex)) { - throw new IllegalArgumentException("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค: " + filteredInput); - } - } } From dd96717b2904bd6bcb858c64f3c6a04fc8e468f9 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sun, 20 Oct 2024 17:39:45 +0900 Subject: [PATCH 052/116] =?UTF-8?q?refactor:=20=EA=B8=B0=EC=A1=B4=EC=97=90?= =?UTF-8?q?=20InputParser=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20?= =?UTF-8?q?=ED=98=BC=EC=9E=AC=EB=90=90=EB=8D=98=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9D=84=20InputValidator=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../calculator/validation/InputValidator.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8e964ae57f..2bb840194c 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ ### 2๏ธโƒฃ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ๊ณผ ํŒŒ์‹ฑ ๋กœ์ง์ด ํ˜ผ์šฉ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ โ†’ ํ™•์‹คํ•˜๊ฒŒ ์ฑ…์ž„์„ ๋ถ„๋ฆฌ -- [ ] ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋“ค์€ ๋ชจ๋‘ `InputValidator`์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ์ด๋™์‹œํ‚จ๋‹ค. +- [x] ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋“ค์€ ๋ชจ๋‘ `InputValidator`์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ์ด๋™์‹œํ‚จ๋‹ค. - [ ] ์ž…๋ ฅ๊ฐ’ ํŒŒ์‹ฑ ๊ณผ์ •์—์„œ ์“ฐ์ด๋Š” ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ๋“ค์€ `InputParser` ๋‚ด์—์„œ `InputValidator`๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. ### 3๏ธโƒฃ ๋งค์ง ๋„˜๋ฒ„ ๋ฐ ๋ฆฌํ„ฐ๋Ÿด ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์ถ”ํ›„ ์œ ์ง€๋ณด์ˆ˜์—์„œ์˜ ์–ด๋ ค์›€ ์˜ˆ์ƒ โ†’ ํด๋ž˜์Šค ๋ฐ ์ƒ์ˆ˜๋กœ์„œ ๊ด€๋ฆฌ diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 0f74a41216..3530d9d314 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -9,4 +9,27 @@ public class InputValidator { public void validateInput(String input) { delimiters = Arrays.asList(",", ":"); } + + public void validateInvalidDelimiter(String input) { + String regex = "[\\d" + String.join("", delimiters) + "]*"; + String filteredInput = input.replaceAll(regex, ""); + + if (!input.matches(regex)) { + throw new IllegalArgumentException("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค: " + filteredInput); + } + } + + public void validateDigit(String s) { + try { + Integer.parseInt(s); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("๊ตฌ๋ถ„์ž ์‚ฌ์ด์— ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + } + } + + public void validateNumberPositive(String s) { + if (Integer.parseInt(s) <= 0) { + throw new IllegalArgumentException("0 ๋˜๋Š” ์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + } + } } From b1301961a03016cbd0080931d9241332da18bc3f Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sun, 20 Oct 2024 17:41:54 +0900 Subject: [PATCH 053/116] =?UTF-8?q?refactor:=20InputParser=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=EC=84=9C=20InputValidator=EB=A5=BC?= =?UTF-8?q?=20=EC=B0=B8=EC=A1=B0=ED=95=98=EC=97=AC=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9D=84=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EB=8F=84=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 | 2 +- .../java/calculator/model/InputParser.java | 33 ++++--------------- 2 files changed, 8 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 2bb840194c..b9f1f2ed6c 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ ### 2๏ธโƒฃ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ๊ณผ ํŒŒ์‹ฑ ๋กœ์ง์ด ํ˜ผ์šฉ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ โ†’ ํ™•์‹คํ•˜๊ฒŒ ์ฑ…์ž„์„ ๋ถ„๋ฆฌ - [x] ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋“ค์€ ๋ชจ๋‘ `InputValidator`์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ์ด๋™์‹œํ‚จ๋‹ค. -- [ ] ์ž…๋ ฅ๊ฐ’ ํŒŒ์‹ฑ ๊ณผ์ •์—์„œ ์“ฐ์ด๋Š” ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ๋“ค์€ `InputParser` ๋‚ด์—์„œ `InputValidator`๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. +- [x] ์ž…๋ ฅ๊ฐ’ ํŒŒ์‹ฑ ๊ณผ์ •์—์„œ ์“ฐ์ด๋Š” ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ๋“ค์€ `InputParser` ๋‚ด์—์„œ `InputValidator`๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. ### 3๏ธโƒฃ ๋งค์ง ๋„˜๋ฒ„ ๋ฐ ๋ฆฌํ„ฐ๋Ÿด ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์ถ”ํ›„ ์œ ์ง€๋ณด์ˆ˜์—์„œ์˜ ์–ด๋ ค์›€ ์˜ˆ์ƒ โ†’ ํด๋ž˜์Šค ๋ฐ ์ƒ์ˆ˜๋กœ์„œ ๊ด€๋ฆฌ diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 180b00dd59..1a69cc1498 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -6,10 +6,14 @@ import java.util.Optional; import java.util.regex.Pattern; +import calculator.validation.InputValidator; + public class InputParser { List delimiters; + private final InputValidator inputValidator; public InputParser(String input) { + this.inputValidator = new InputValidator(); // ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด, ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋”ฐ๋กœ ์ถ”์ถœํ•ด์„œ ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•œ๋‹ค.. List delimiter = new ArrayList<>(List.of(",", ":")); extractCustomDelimiter(input).ifPresent(delimiter::add); @@ -32,7 +36,7 @@ public List extractNumbers(String input) { // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ private String[] splitInput(String input, List delimiters) { String processedInput = removeCustomDelimiter(input); - validateInvalidDelimiter(processedInput); + inputValidator.validateInvalidDelimiter(processedInput); String regex = String.join("|", delimiters.stream() @@ -59,15 +63,6 @@ private boolean hasCustomDelimiter(String input) { return input.startsWith("//"); } - private void validateInvalidDelimiter(String input) { - String regex = "[\\d" + String.join("", delimiters) + "]*"; - String filteredInput = input.replaceAll(regex, ""); - - if (!input.matches(regex)) { - throw new IllegalArgumentException("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค: " + filteredInput); - } - } - // ๋ถ„๋ฆฌ๋œ ๊ฐ ๋ถ€๋ถ„์—์„œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ private List saveNumbers(String[] splitParts) { List numbers = new ArrayList<>(); @@ -75,8 +70,8 @@ private List saveNumbers(String[] splitParts) { .map(String::trim) .map(this::replaceBlankWithZero) .forEach(part -> { - validateDigit(part); - validateNumberPositive(part); + inputValidator.validateDigit(part); + inputValidator.validateNumberPositive(part); numbers.add(Integer.parseInt(part)); }); @@ -91,20 +86,6 @@ private String replaceBlankWithZero(String part) { return part; } - private void validateDigit(String s) { - try { - Integer.parseInt(s); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("๊ตฌ๋ถ„์ž ์‚ฌ์ด์— ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); - } - } - - private void validateNumberPositive(String s) { - if (Integer.parseInt(s) <= 0) { - throw new IllegalArgumentException("0 ๋˜๋Š” ์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); - } - } - /** * ๋ฌธ์ž์—ด ์ „์ฒ˜๋ฆฌ */ From f8c5efad9311d8d7fa5b9c9e63503188193edd32 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sun, 20 Oct 2024 17:47:04 +0900 Subject: [PATCH 054/116] =?UTF-8?q?feat:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EC=97=90=20=EC=9D=98=ED=95=B4=20=EB=B6=84=EB=A6=AC=EB=90=9C=20?= =?UTF-8?q?=EA=B0=92=EC=9D=B4=20Blank=EC=9D=BC=20=EA=B2=BD=EC=9A=B0=200?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=B9=98=ED=99=98=EB=90=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/calculator/model/InputParser.java | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/README.md b/README.md index b9f1f2ed6c..3fcc96972e 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ - [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๋‚˜ ์•ŒํŒŒ๋ฒณ์ด ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด("")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๊ณต๋ฐฑ(" ")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. -- [ ] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [x] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ("."์„ ํฌํ•จ)์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ๊ธฐ์กด ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ (".")์ด ์žˆ์„ ๊ฒฝ์šฐ, ์†Œ์ˆ˜ ์ž…๋ ฅ์ด ๋ถˆ๊ฐ€ํ•˜๋„๋ก ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ๊ธฐ์กด ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ (".")์ด ์—†์„ ๊ฒฝ์šฐ, ์†Œ์ˆ˜ ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 1a69cc1498..cac7c9d540 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -68,7 +68,6 @@ private List saveNumbers(String[] splitParts) { List numbers = new ArrayList<>(); Arrays.stream(splitParts) .map(String::trim) - .map(this::replaceBlankWithZero) .forEach(part -> { inputValidator.validateDigit(part); inputValidator.validateNumberPositive(part); @@ -78,14 +77,6 @@ private List saveNumbers(String[] splitParts) { return numbers; } - private String replaceBlankWithZero(String part) { - if (part.isBlank()) { - return "0"; - } - - return part; - } - /** * ๋ฌธ์ž์—ด ์ „์ฒ˜๋ฆฌ */ From 423b7f1bfdbc9326233a014ebffcded471258070 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sun, 20 Oct 2024 18:22:45 +0900 Subject: [PATCH 055/116] =?UTF-8?q?refactor:=20=ED=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=97=86=EB=8A=94=20=ED=86=B5=ED=95=A9=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/controller/CalculatorController.java | 1 - src/main/java/calculator/validation/InputValidator.java | 5 ----- 2 files changed, 6 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 89714df6ac..efc0437c5f 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -22,7 +22,6 @@ public CalculatorController() { public void run() { String input = inputView.readInput(); inputView.closeRead(); - inputValidator.validateInput(input); InputParser inputParser = new InputParser(input); List numbers = inputParser.extractNumbers(input); diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 3530d9d314..ef24f8f6c0 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -1,15 +1,10 @@ package calculator.validation; -import java.util.Arrays; import java.util.List; public class InputValidator { List delimiters; - public void validateInput(String input) { - delimiters = Arrays.asList(",", ":"); - } - public void validateInvalidDelimiter(String input) { String regex = "[\\d" + String.join("", delimiters) + "]*"; String filteredInput = input.replaceAll(regex, ""); From c7a9c64918351352521501f2e4c105453de87cff Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Sun, 20 Oct 2024 18:23:19 +0900 Subject: [PATCH 056/116] =?UTF-8?q?refactor:=20InputValidator=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=EC=84=9C=20=EA=B5=AC=EB=B6=84?= =?UTF-8?q?=EC=9E=90=20=EB=AA=A9=EB=A1=9D=EC=9D=84=20=EC=A7=81=EC=A0=91=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=95=98=EC=A7=80=20=EC=95=8A=EA=B3=A0=20?= =?UTF-8?q?=EC=A3=BC=EC=9E=85=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/model/InputParser.java | 23 ++++++++++--------- .../calculator/validation/InputValidator.java | 4 +--- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index cac7c9d540..54702f8391 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -36,7 +36,7 @@ public List extractNumbers(String input) { // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ private String[] splitInput(String input, List delimiters) { String processedInput = removeCustomDelimiter(input); - inputValidator.validateInvalidDelimiter(processedInput); + inputValidator.validateInvalidDelimiter(processedInput, delimiters); String regex = String.join("|", delimiters.stream() @@ -82,18 +82,19 @@ private List saveNumbers(String[] splitParts) { */ // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ถ”์ถœ (์—†์„ ์ˆ˜ ์žˆ์Œ) private Optional extractCustomDelimiter(String input) { - Optional customDelimiter = Optional.empty(); - - if (hasCustomDelimiter(input)) { - int delimiterStart = input.indexOf("//") + 2; - int delimiterEnd = input.indexOf("\\n"); - if (delimiterEnd == -1) { - throw new IllegalArgumentException("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ๋์„ ์˜๋ฏธํ•˜๋Š” \\n์ด ์—†์Šต๋‹ˆ๋‹ค."); - } + if (!hasCustomDelimiter(input)) { + return Optional.empty(); + } - customDelimiter = Optional.of(input.substring(delimiterStart, delimiterEnd)); + int delimiterStart = input.indexOf("//") + 2; + int delimiterEnd = input.indexOf("\\n"); + if (delimiterEnd == -1) { + throw new IllegalArgumentException("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ๋์„ ์˜๋ฏธํ•˜๋Š” \\n์ด ์—†์Šต๋‹ˆ๋‹ค."); } - return customDelimiter; + String customDelimiter = input.substring(delimiterStart, delimiterEnd) + .replace("\\\\", "\\"); // \\๋Š” \๋กœ ๋ณ€ํ™˜ + + return Optional.of(customDelimiter); } } diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index ef24f8f6c0..0bda965a1c 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -3,9 +3,7 @@ import java.util.List; public class InputValidator { - List delimiters; - - public void validateInvalidDelimiter(String input) { + public void validateInvalidDelimiter(String input, List delimiters) { String regex = "[\\d" + String.join("", delimiters) + "]*"; String filteredInput = input.replaceAll(regex, ""); From 8c9f357a70921c9ad03037a853016538d94d7eab Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 00:01:18 +0900 Subject: [PATCH 057/116] =?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=EC=97=90=20=EC=9D=B4=EC=8A=A4?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=ED=94=84=20=EB=AC=B8=EC=9E=90("\")=EA=B0=80?= =?UTF-8?q?=20=ED=8F=AC=ED=95=A8=EB=90=9C=20=EA=B2=BD=EC=9A=B0=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC=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 --- README.md | 3 +-- src/main/java/calculator/model/InputParser.java | 11 ++++++----- .../java/calculator/validation/InputValidator.java | 5 ++++- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3fcc96972e..5358f1505e 100644 --- a/README.md +++ b/README.md @@ -39,8 +39,7 @@ ### 1๏ธโƒฃ ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ์žˆ๋Š” ํ˜„ ๊ฒ€์ฆ ๋กœ์ง โ†’ ๋” ๋งŽ์€ ์˜ˆ์™ธ์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด, ๋” ๋งŽ์€ ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ -- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž("\\")๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. -- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์‹ค์ œ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ๋ฒ•("\")์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์‹ค์ œ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ๋ฒ•("\")์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๋‚˜ ์•ŒํŒŒ๋ฒณ์ด ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด("")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๊ณต๋ฐฑ(" ")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 54702f8391..e3f1744735 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -85,16 +85,17 @@ private Optional extractCustomDelimiter(String input) { if (!hasCustomDelimiter(input)) { return Optional.empty(); } + String customDelimiter = parseCustomDelimiter(input); + return Optional.of(customDelimiter); + } + + private String parseCustomDelimiter(String input) { int delimiterStart = input.indexOf("//") + 2; int delimiterEnd = input.indexOf("\\n"); if (delimiterEnd == -1) { throw new IllegalArgumentException("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ๋์„ ์˜๋ฏธํ•˜๋Š” \\n์ด ์—†์Šต๋‹ˆ๋‹ค."); } - - String customDelimiter = input.substring(delimiterStart, delimiterEnd) - .replace("\\\\", "\\"); // \\๋Š” \๋กœ ๋ณ€ํ™˜ - - return Optional.of(customDelimiter); + return input.substring(delimiterStart, delimiterEnd); } } diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 0bda965a1c..3c898bb030 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -1,10 +1,13 @@ package calculator.validation; import java.util.List; +import java.util.regex.Pattern; public class InputValidator { public void validateInvalidDelimiter(String input, List delimiters) { - String regex = "[\\d" + String.join("", delimiters) + "]*"; + String regex = "[\\d" + String.join("", delimiters.stream() + .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ + .toArray(String[]::new)) + "]*"; String filteredInput = input.replaceAll(regex, ""); if (!input.matches(regex)) { From cd704cef3c51c61ec6ab488dea77cc49de939744 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 00:09:26 +0900 Subject: [PATCH 058/116] =?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=EA=B0=80=20=EB=B9=88=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=97=B4("")=EC=9D=BC=20=EA=B2=BD=EC=9A=B0=EC=97=90?= =?UTF-8?q?=20=EB=8C=80=ED=95=9C=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC?= =?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 --- README.md | 2 +- src/main/java/calculator/model/InputParser.java | 1 + .../java/calculator/validation/InputValidator.java | 14 ++++++++++---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5358f1505e..9bcb3d4dae 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์‹ค์ œ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ๋ฒ•("\")์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๋‚˜ ์•ŒํŒŒ๋ฒณ์ด ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. -- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด("")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด("")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๊ณต๋ฐฑ(" ")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [x] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ("."์„ ํฌํ•จ)์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index e3f1744735..86263d676b 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -86,6 +86,7 @@ private Optional extractCustomDelimiter(String input) { return Optional.empty(); } String customDelimiter = parseCustomDelimiter(input); + inputValidator.validateEmpty(customDelimiter); return Optional.of(customDelimiter); } diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 3c898bb030..f2dfaef5cd 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -15,17 +15,23 @@ public void validateInvalidDelimiter(String input, List delimiters) { } } - public void validateDigit(String s) { + public void validateDigit(String input) { try { - Integer.parseInt(s); + Integer.parseInt(input); } catch (NumberFormatException e) { throw new IllegalArgumentException("๊ตฌ๋ถ„์ž ์‚ฌ์ด์— ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); } } - public void validateNumberPositive(String s) { - if (Integer.parseInt(s) <= 0) { + public void validateNumberPositive(String input) { + if (Integer.parseInt(input) <= 0) { throw new IllegalArgumentException("0 ๋˜๋Š” ์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); } } + + public void validateEmpty(String input) { + if (input.isEmpty()) { + throw new IllegalArgumentException("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์—๋Š” ๋นˆ ๋ฌธ์ž์—ด์ด ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } } From e1ef257930388c19e4c6aac34a541831c228e40c Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 00:13:43 +0900 Subject: [PATCH 059/116] =?UTF-8?q?docs:=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=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 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 9bcb3d4dae..6636d0a682 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,8 @@ ### 1๏ธโƒฃ ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ์žˆ๋Š” ํ˜„ ๊ฒ€์ฆ ๋กœ์ง โ†’ ๋” ๋งŽ์€ ์˜ˆ์™ธ์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด, ๋” ๋งŽ์€ ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์‹ค์ œ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ๋ฒ•("\")์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. -- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๋‚˜ ์•ŒํŒŒ๋ฒณ์ด ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด("")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. -- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๊ณต๋ฐฑ(" ")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [x] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ("."์„ ํฌํ•จ)์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ๊ธฐ์กด ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ (".")์ด ์žˆ์„ ๊ฒฝ์šฐ, ์†Œ์ˆ˜ ์ž…๋ ฅ์ด ๋ถˆ๊ฐ€ํ•˜๋„๋ก ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. From 193dfdbd2d76e7b4a1fbf054b31c01e2fdc2e19a Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 00:48:30 +0900 Subject: [PATCH 060/116] =?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=EC=97=90=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=ED=8F=AC=ED=95=A8=EB=90=98=EB=8A=94=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=EC=97=90=20=EB=8C=80=ED=95=9C=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=EB=A5=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/calculator/model/InputParser.java | 1 + .../calculator/validation/InputValidator.java | 16 ++++++++++++---- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6636d0a682..e728e64a3c 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ ### 1๏ธโƒฃ ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ์žˆ๋Š” ํ˜„ ๊ฒ€์ฆ ๋กœ์ง โ†’ ๋” ๋งŽ์€ ์˜ˆ์™ธ์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด, ๋” ๋งŽ์€ ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์‹ค์ œ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ๋ฒ•("\")์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. -- [ ] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด("")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [x] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ("."์„ ํฌํ•จ)์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 86263d676b..ba61e2587e 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -87,6 +87,7 @@ private Optional extractCustomDelimiter(String input) { } String customDelimiter = parseCustomDelimiter(input); inputValidator.validateEmpty(customDelimiter); + inputValidator.validateNonDigit(customDelimiter); return Optional.of(customDelimiter); } diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index f2dfaef5cd..abd2233e1d 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -16,13 +16,21 @@ public void validateInvalidDelimiter(String input, List delimiters) { } public void validateDigit(String input) { - try { - Integer.parseInt(input); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("๊ตฌ๋ถ„์ž ์‚ฌ์ด์— ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + if (!isDigit(input)) { + throw new IllegalArgumentException("๊ตฌ๋ถ„์ž ์‚ฌ์ด์— ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); } } + public void validateNonDigit(String input) { + if (isDigit(input)) { + throw new IllegalArgumentException("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค."); + } + } + + private boolean isDigit(String input) { + return input.chars().allMatch(Character::isDigit); + } + public void validateNumberPositive(String input) { if (Integer.parseInt(input) <= 0) { throw new IllegalArgumentException("0 ๋˜๋Š” ์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); From fe9902f3e0500ebf03498ac8efeb2f3caed586e0 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 15:11:19 +0900 Subject: [PATCH 061/116] =?UTF-8?q?feat:=20=EC=97=90=EB=9F=AC=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EA=B4=80=EB=A6=AC=20Enum=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 --- .../calculator/exception/ErrorMessage.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/calculator/exception/ErrorMessage.java diff --git a/src/main/java/calculator/exception/ErrorMessage.java b/src/main/java/calculator/exception/ErrorMessage.java new file mode 100644 index 0000000000..1e63f4af3b --- /dev/null +++ b/src/main/java/calculator/exception/ErrorMessage.java @@ -0,0 +1,21 @@ +package calculator.exception; + +public enum ErrorMessage { + + ERROR_PREFIX("[ERROR] "), + INVALID_DELIMITER("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."), + NON_INTEGER_VALUE("๊ตฌ๋ถ„์ž ์‚ฌ์ด์— ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."), + INVALID_CUSTOM_DELIMITER("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋Š” ์ •์ˆ˜์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."), + NON_POSITIVE_NUMBER("๊ณ„์‚ฐ๊ธฐ์— ์ž…๋ ฅ๋  ์ˆซ์ž๋Š” ์–‘์ˆ˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."), + EMPTY_CUSTOM_DELIMITER("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋Š” ๋นˆ ๋ฌธ์ž์—ด์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + + private final String message; + + ErrorMessage(String message) { + this.message = message; + } + + public String getMessage() { + return ERROR_PREFIX.message + message; + } +} From a4212d0696133e979f435648930fe34e679b0cbb Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 15:13:47 +0900 Subject: [PATCH 062/116] =?UTF-8?q?feat:=20=EC=97=90=EB=9F=AC=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20?= =?UTF-8?q?=EC=82=AC=ED=95=A0=20InputValidator=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=97=90=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../java/calculator/validation/InputValidator.java | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e728e64a3c..af99765879 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ ### 3๏ธโƒฃ ๋งค์ง ๋„˜๋ฒ„ ๋ฐ ๋ฆฌํ„ฐ๋Ÿด ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์ถ”ํ›„ ์œ ์ง€๋ณด์ˆ˜์—์„œ์˜ ์–ด๋ ค์›€ ์˜ˆ์ƒ โ†’ ํด๋ž˜์Šค ๋ฐ ์ƒ์ˆ˜๋กœ์„œ ๊ด€๋ฆฌ -- [ ] ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ Enum์„ ํ†ตํ•ด ์ƒ์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. +- [x] ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ Enum์„ ํ†ตํ•ด ์ƒ์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. - [ ] ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ Enum์„ ํ†ตํ•ด ์ƒ์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. ### 4๏ธโƒฃ ์ˆซ์ž ๊ฐ’๋“ค์ด ๊ฐ ๊ฐ์ฒด์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฑฐ์น˜๋ฉฐ ๋ณ€๊ฒฝ๋  ์—ฌ์ง€๊ฐ€ ์žˆ์Œ โ†’ ๋ถˆ๋ณ€ ๊ฐœ๋… ์ ์šฉ diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index abd2233e1d..1ac34b8974 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -1,5 +1,7 @@ package calculator.validation; +import static calculator.exception.ErrorMessage.*; + import java.util.List; import java.util.regex.Pattern; @@ -11,19 +13,19 @@ public void validateInvalidDelimiter(String input, List delimiters) { String filteredInput = input.replaceAll(regex, ""); if (!input.matches(regex)) { - throw new IllegalArgumentException("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค: " + filteredInput); + throw new IllegalArgumentException(INVALID_DELIMITER.getMessage()); } } public void validateDigit(String input) { if (!isDigit(input)) { - throw new IllegalArgumentException("๊ตฌ๋ถ„์ž ์‚ฌ์ด์— ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + throw new IllegalArgumentException(NON_INTEGER_VALUE.getMessage()); } } public void validateNonDigit(String input) { if (isDigit(input)) { - throw new IllegalArgumentException("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค."); + throw new IllegalArgumentException(INVALID_CUSTOM_DELIMITER.getMessage()); } } @@ -33,13 +35,13 @@ private boolean isDigit(String input) { public void validateNumberPositive(String input) { if (Integer.parseInt(input) <= 0) { - throw new IllegalArgumentException("0 ๋˜๋Š” ์Œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + throw new IllegalArgumentException(NON_POSITIVE_NUMBER.getMessage()); } } public void validateEmpty(String input) { if (input.isEmpty()) { - throw new IllegalArgumentException("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์—๋Š” ๋นˆ ๋ฌธ์ž์—ด์ด ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + throw new IllegalArgumentException(EMPTY_CUSTOM_DELIMITER.getMessage()); } } } From 1146400f0a704c04924331f0a3ee43a1ebc26fd1 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 15:15:16 +0900 Subject: [PATCH 063/116] =?UTF-8?q?docs:=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=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 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index af99765879..5a249cfe48 100644 --- a/README.md +++ b/README.md @@ -72,4 +72,8 @@ ### 6๏ธโƒฃ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋‹จ 2๊ฐœ๋ฐ–์— ์—†๋Š” ์ƒํ™ฉ โ†’ ๋” ๋งŽ์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ํ–ฅ์ƒ - [ ] ๊ฐ ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. -- [ ] ๊ทธ ์™ธ์— ๊ฐ ๋ฉ”์„œ๋“œ๋“ค์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. \ No newline at end of file +- [ ] ๊ทธ ์™ธ์— ๊ฐ ๋ฉ”์„œ๋“œ๋“ค์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. + +### 7๏ธโƒฃ ๊ตฌ๋ถ„์ž๋ฅผ ๋‹จ์ˆœ ํ•„๋“œ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ์ค‘ โ†’ ๊ตฌ๋ถ„์ž ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ณ„๋„ ํด๋ž˜์Šค ์ƒ์„ฑ + +- [ ] `Delimiter` ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. \ No newline at end of file From 5c951a97f242068fba0598dc75d496bafa9ff721 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 15:39:59 +0900 Subject: [PATCH 064/116] =?UTF-8?q?feat:=20=EA=B5=AC=EB=B6=84=EC=9E=90=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=EC=9D=84=20=EA=B4=80=EB=A6=AC=ED=95=A0=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8A=94=20Delimiters=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=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 --- README.md | 2 +- .../java/calculator/model/Delimiters.java | 26 +++++++++++++++++++ .../java/calculator/model/InputParser.java | 2 -- 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 src/main/java/calculator/model/Delimiters.java diff --git a/README.md b/README.md index 5a249cfe48..2155878b01 100644 --- a/README.md +++ b/README.md @@ -76,4 +76,4 @@ ### 7๏ธโƒฃ ๊ตฌ๋ถ„์ž๋ฅผ ๋‹จ์ˆœ ํ•„๋“œ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ์ค‘ โ†’ ๊ตฌ๋ถ„์ž ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ณ„๋„ ํด๋ž˜์Šค ์ƒ์„ฑ -- [ ] `Delimiter` ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. \ No newline at end of file +- [x] `Delimiters` ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. \ No newline at end of file diff --git a/src/main/java/calculator/model/Delimiters.java b/src/main/java/calculator/model/Delimiters.java new file mode 100644 index 0000000000..42c944ff74 --- /dev/null +++ b/src/main/java/calculator/model/Delimiters.java @@ -0,0 +1,26 @@ +package calculator.model; + +import java.util.HashSet; +import java.util.Set; + +import calculator.validation.InputValidator; + +public class Delimiters { + private final Set delimiters; + private final InputValidator inputValidator; + + public Delimiters() { + this.delimiters = new HashSet<>(Set.of(",", ":")); + this.inputValidator = new InputValidator(); + } + + public void addCustomDelimiter(String delimiterInput) { + inputValidator.validateEmpty(delimiterInput); + inputValidator.validateNonDigit(delimiterInput); + delimiters.add(delimiterInput); + } + + public boolean isRegisteredDelimiter(String delimiter) { + return delimiters.contains(delimiter); + } +} diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index ba61e2587e..e3f1744735 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -86,8 +86,6 @@ private Optional extractCustomDelimiter(String input) { return Optional.empty(); } String customDelimiter = parseCustomDelimiter(input); - inputValidator.validateEmpty(customDelimiter); - inputValidator.validateNonDigit(customDelimiter); return Optional.of(customDelimiter); } From 7f00236421dfe60a8d0437ad9b70fb72122ce240 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 15:51:06 +0900 Subject: [PATCH 065/116] =?UTF-8?q?feat:=20=EA=B8=B0=EB=B3=B8=20=EA=B5=AC?= =?UTF-8?q?=EB=B6=84=EC=9E=90=20=EA=B4=80=EB=A0=A8=20Enum=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 --- .../java/calculator/model/DefaultDelimiters.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/calculator/model/DefaultDelimiters.java diff --git a/src/main/java/calculator/model/DefaultDelimiters.java b/src/main/java/calculator/model/DefaultDelimiters.java new file mode 100644 index 0000000000..8416dcc863 --- /dev/null +++ b/src/main/java/calculator/model/DefaultDelimiters.java @@ -0,0 +1,16 @@ +package calculator.model; + +public enum DefaultDelimiters { + COMMA(","), + COLON(":"); + + private final String delimiter; + + DefaultDelimiters(String delimiter) { + this.delimiter = delimiter; + } + + public String getDelimiter() { + return delimiter; + } +} From 5ab4468a08ecbcd09531e6d7b5dea40f36c62a6d Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 15:51:15 +0900 Subject: [PATCH 066/116] =?UTF-8?q?feat:=20=EA=B8=B0=EB=B3=B8=20=EA=B5=AC?= =?UTF-8?q?=EB=B6=84=EC=9E=90=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Delimiters.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/model/Delimiters.java b/src/main/java/calculator/model/Delimiters.java index 42c944ff74..dc15512831 100644 --- a/src/main/java/calculator/model/Delimiters.java +++ b/src/main/java/calculator/model/Delimiters.java @@ -1,16 +1,17 @@ package calculator.model; +import java.util.Arrays; import java.util.HashSet; import java.util.Set; import calculator.validation.InputValidator; public class Delimiters { - private final Set delimiters; + private final Set delimiters = new HashSet<>(); private final InputValidator inputValidator; public Delimiters() { - this.delimiters = new HashSet<>(Set.of(",", ":")); + initDefaultDelimiters(); this.inputValidator = new InputValidator(); } @@ -23,4 +24,9 @@ public void addCustomDelimiter(String delimiterInput) { public boolean isRegisteredDelimiter(String delimiter) { return delimiters.contains(delimiter); } + + private void initDefaultDelimiters() { + Arrays.stream(DefaultDelimiters.values()) + .forEach(delimiter -> this.delimiters.add(delimiter.getDelimiter())); + } } From c96593c1e550571811a25ae9b46fab7f8058abb3 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 16:11:34 +0900 Subject: [PATCH 067/116] =?UTF-8?q?refactor:=20Delimiters=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=AA=85=20Delimiter=EB=A1=9C=20=EC=A7=81?= =?UTF-8?q?=EA=B4=80=EC=A0=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/model/{Delimiters.java => Delimiter.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/main/java/calculator/model/{Delimiters.java => Delimiter.java} (94%) diff --git a/src/main/java/calculator/model/Delimiters.java b/src/main/java/calculator/model/Delimiter.java similarity index 94% rename from src/main/java/calculator/model/Delimiters.java rename to src/main/java/calculator/model/Delimiter.java index dc15512831..e8ae7cb6ca 100644 --- a/src/main/java/calculator/model/Delimiters.java +++ b/src/main/java/calculator/model/Delimiter.java @@ -6,11 +6,11 @@ import calculator.validation.InputValidator; -public class Delimiters { +public class Delimiter { private final Set delimiters = new HashSet<>(); private final InputValidator inputValidator; - public Delimiters() { + public Delimiter() { initDefaultDelimiters(); this.inputValidator = new InputValidator(); } From 439a5f0ccb82db0838f0edaa392609164479ed67 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 16:11:58 +0900 Subject: [PATCH 068/116] =?UTF-8?q?refactor:=20DefaultDelimiters=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=AA=85=20DefaultDelimiter?= =?UTF-8?q?=EB=A1=9C=20=EC=A7=81=EA=B4=80=EC=A0=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/{DefaultDelimiters.java => DefaultDelimiter.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/main/java/calculator/model/{DefaultDelimiters.java => DefaultDelimiter.java} (71%) diff --git a/src/main/java/calculator/model/DefaultDelimiters.java b/src/main/java/calculator/model/DefaultDelimiter.java similarity index 71% rename from src/main/java/calculator/model/DefaultDelimiters.java rename to src/main/java/calculator/model/DefaultDelimiter.java index 8416dcc863..1c9b1aee86 100644 --- a/src/main/java/calculator/model/DefaultDelimiters.java +++ b/src/main/java/calculator/model/DefaultDelimiter.java @@ -1,12 +1,12 @@ package calculator.model; -public enum DefaultDelimiters { +public enum DefaultDelimiter { COMMA(","), COLON(":"); private final String delimiter; - DefaultDelimiters(String delimiter) { + DefaultDelimiter(String delimiter) { this.delimiter = delimiter; } From 46fbd96a143440ecd96745288d7a3aa91791f96d Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 16:12:30 +0900 Subject: [PATCH 069/116] =?UTF-8?q?refactor:=20Delimiter=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=20=EB=B6=88=EB=B3=80=20Set=EC=9D=84?= =?UTF-8?q?=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20getter=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Delimiter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/Delimiter.java b/src/main/java/calculator/model/Delimiter.java index e8ae7cb6ca..7bb144ffbe 100644 --- a/src/main/java/calculator/model/Delimiter.java +++ b/src/main/java/calculator/model/Delimiter.java @@ -1,6 +1,7 @@ package calculator.model; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -26,7 +27,11 @@ public boolean isRegisteredDelimiter(String delimiter) { } private void initDefaultDelimiters() { - Arrays.stream(DefaultDelimiters.values()) + Arrays.stream(DefaultDelimiter.values()) .forEach(delimiter -> this.delimiters.add(delimiter.getDelimiter())); } + + public Set getDelimiters() { + return Collections.unmodifiableSet(delimiters); + } } From ca9e3404b574300a7886d9b34d5508f8c6113752 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 16:17:43 +0900 Subject: [PATCH 070/116] =?UTF-8?q?refactor:=20Delimiter=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=A0=81=EC=9A=A9=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=82=AC=ED=95=AD=20=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/InputParser.java | 15 ++++++--------- .../calculator/validation/InputValidator.java | 7 ++++--- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index e3f1744735..f507ef228f 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -9,37 +9,34 @@ import calculator.validation.InputValidator; public class InputParser { - List delimiters; private final InputValidator inputValidator; public InputParser(String input) { this.inputValidator = new InputValidator(); // ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด, ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋”ฐ๋กœ ์ถ”์ถœํ•ด์„œ ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•œ๋‹ค.. - List delimiter = new ArrayList<>(List.of(",", ":")); - extractCustomDelimiter(input).ifPresent(delimiter::add); - this.delimiters = delimiter; + // extractCustomDelimiter(input).ifPresent(delimiter::add); } /** * ํ•ต์‹ฌ ๋กœ์ง */ // 1์ฐจ ๊ฐ€๊ณต๋œ ์ž…๋ ฅ๊ฐ’์—์„œ ์ˆซ์ž๋ฅผ ์ถ”์ถœ - public List extractNumbers(String input) { + public List extractNumbers(String input, Delimiter delimiter) { if (input.isBlank()) { return List.of(); } - String[] splitParts = splitInput(input, delimiters); + String[] splitParts = splitInput(input, delimiter); return saveNumbers(splitParts); } // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ - private String[] splitInput(String input, List delimiters) { + private String[] splitInput(String input, Delimiter delimiter) { String processedInput = removeCustomDelimiter(input); - inputValidator.validateInvalidDelimiter(processedInput, delimiters); + inputValidator.validateInvalidDelimiter(processedInput, delimiter); String regex = String.join("|", - delimiters.stream() + delimiter.getDelimiters().stream() .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ (ํŠน์ˆ˜ ๋ฌธ์ž์˜ ๊ฒฝ์šฐ ํ˜ผ๋™์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Œ) .toArray(String[]::new) ); diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 1ac34b8974..0730d30c4e 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -2,12 +2,13 @@ import static calculator.exception.ErrorMessage.*; -import java.util.List; import java.util.regex.Pattern; +import calculator.model.Delimiter; + public class InputValidator { - public void validateInvalidDelimiter(String input, List delimiters) { - String regex = "[\\d" + String.join("", delimiters.stream() + public void validateInvalidDelimiter(String input, Delimiter delimiter) { + String regex = "[\\d" + String.join("", delimiter.getDelimiters().stream() .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ .toArray(String[]::new)) + "]*"; String filteredInput = input.replaceAll(regex, ""); From ec8f471044118c562544f9b7a22c3c044d28a4f4 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 16:22:05 +0900 Subject: [PATCH 071/116] =?UTF-8?q?refactor:=20InputValidator=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=A5=BC=20=EC=A0=95=EC=A0=81=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=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 --- .../calculator/validation/InputValidator.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 0730d30c4e..9bfca6d0b9 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -7,7 +7,11 @@ import calculator.model.Delimiter; public class InputValidator { - public void validateInvalidDelimiter(String input, Delimiter delimiter) { + private InputValidator() { + + } + + public static void validateInvalidDelimiter(String input, Delimiter delimiter) { String regex = "[\\d" + String.join("", delimiter.getDelimiters().stream() .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ .toArray(String[]::new)) + "]*"; @@ -18,29 +22,29 @@ public void validateInvalidDelimiter(String input, Delimiter delimiter) { } } - public void validateDigit(String input) { + public static void validateDigit(String input) { if (!isDigit(input)) { throw new IllegalArgumentException(NON_INTEGER_VALUE.getMessage()); } } - public void validateNonDigit(String input) { + public static void validateNonDigit(String input) { if (isDigit(input)) { throw new IllegalArgumentException(INVALID_CUSTOM_DELIMITER.getMessage()); } } - private boolean isDigit(String input) { + private static boolean isDigit(String input) { return input.chars().allMatch(Character::isDigit); } - public void validateNumberPositive(String input) { + public static void validateNumberPositive(String input) { if (Integer.parseInt(input) <= 0) { throw new IllegalArgumentException(NON_POSITIVE_NUMBER.getMessage()); } } - public void validateEmpty(String input) { + public static void validateEmpty(String input) { if (input.isEmpty()) { throw new IllegalArgumentException(EMPTY_CUSTOM_DELIMITER.getMessage()); } From 52a7b3073ed0c5e7dac651ba33e99fa8d52a22a6 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 16:25:11 +0900 Subject: [PATCH 072/116] =?UTF-8?q?refactor:=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EB=A1=9C=EC=A7=81=EC=9D=84=20=EC=A0=95?= =?UTF-8?q?=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=B2=98=EB=A6=AC=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculator/controller/CalculatorController.java | 3 --- src/main/java/calculator/model/Delimiter.java | 6 ++---- src/main/java/calculator/model/InputParser.java | 10 +++------- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index efc0437c5f..b8b35dbf6c 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -4,19 +4,16 @@ import calculator.model.Calculator; import calculator.model.InputParser; -import calculator.validation.InputValidator; import calculator.view.InputView; import calculator.view.OutputView; public class CalculatorController { private final InputView inputView; - private final InputValidator inputValidator; private final OutputView outputView; public CalculatorController() { this.inputView = new InputView(); this.outputView = new OutputView(); - this.inputValidator = new InputValidator(); } public void run() { diff --git a/src/main/java/calculator/model/Delimiter.java b/src/main/java/calculator/model/Delimiter.java index 7bb144ffbe..b3cc7e866a 100644 --- a/src/main/java/calculator/model/Delimiter.java +++ b/src/main/java/calculator/model/Delimiter.java @@ -9,16 +9,14 @@ public class Delimiter { private final Set delimiters = new HashSet<>(); - private final InputValidator inputValidator; public Delimiter() { initDefaultDelimiters(); - this.inputValidator = new InputValidator(); } public void addCustomDelimiter(String delimiterInput) { - inputValidator.validateEmpty(delimiterInput); - inputValidator.validateNonDigit(delimiterInput); + InputValidator.validateEmpty(delimiterInput); + InputValidator.validateNonDigit(delimiterInput); delimiters.add(delimiterInput); } diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index f507ef228f..c1551a20f9 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -9,11 +9,7 @@ import calculator.validation.InputValidator; public class InputParser { - private final InputValidator inputValidator; - public InputParser(String input) { - this.inputValidator = new InputValidator(); - // ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด, ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ๋”ฐ๋กœ ์ถ”์ถœํ•ด์„œ ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•œ๋‹ค.. // extractCustomDelimiter(input).ifPresent(delimiter::add); } @@ -33,7 +29,7 @@ public List extractNumbers(String input, Delimiter delimiter) { // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ private String[] splitInput(String input, Delimiter delimiter) { String processedInput = removeCustomDelimiter(input); - inputValidator.validateInvalidDelimiter(processedInput, delimiter); + InputValidator.validateInvalidDelimiter(processedInput, delimiter); String regex = String.join("|", delimiter.getDelimiters().stream() @@ -66,8 +62,8 @@ private List saveNumbers(String[] splitParts) { Arrays.stream(splitParts) .map(String::trim) .forEach(part -> { - inputValidator.validateDigit(part); - inputValidator.validateNumberPositive(part); + InputValidator.validateDigit(part); + InputValidator.validateNumberPositive(part); numbers.add(Integer.parseInt(part)); }); From 8ee1c498ba1cb2119a8f40286710e727fe714b3b Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 16:28:03 +0900 Subject: [PATCH 073/116] =?UTF-8?q?refactor:=20InputParser=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=A5=BC=20=EC=A0=95=EC=A0=81=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=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/InputParser.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index c1551a20f9..2d3a1d6398 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -9,7 +9,7 @@ import calculator.validation.InputValidator; public class InputParser { - public InputParser(String input) { + private InputParser() { // extractCustomDelimiter(input).ifPresent(delimiter::add); } @@ -17,7 +17,7 @@ public InputParser(String input) { * ํ•ต์‹ฌ ๋กœ์ง */ // 1์ฐจ ๊ฐ€๊ณต๋œ ์ž…๋ ฅ๊ฐ’์—์„œ ์ˆซ์ž๋ฅผ ์ถ”์ถœ - public List extractNumbers(String input, Delimiter delimiter) { + public static List extractNumbers(String input, Delimiter delimiter) { if (input.isBlank()) { return List.of(); } @@ -27,7 +27,7 @@ public List extractNumbers(String input, Delimiter delimiter) { } // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ - private String[] splitInput(String input, Delimiter delimiter) { + private static String[] splitInput(String input, Delimiter delimiter) { String processedInput = removeCustomDelimiter(input); InputValidator.validateInvalidDelimiter(processedInput, delimiter); @@ -41,7 +41,7 @@ private String[] splitInput(String input, Delimiter delimiter) { } // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ - private String removeCustomDelimiter(String input) { + private static String removeCustomDelimiter(String input) { if (hasCustomDelimiter(input)) { int delimiterEnd = input.indexOf("\\n"); @@ -52,12 +52,12 @@ private String removeCustomDelimiter(String input) { } // ์ž…๋ ฅ๊ฐ’์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ - private boolean hasCustomDelimiter(String input) { + private static boolean hasCustomDelimiter(String input) { return input.startsWith("//"); } // ๋ถ„๋ฆฌ๋œ ๊ฐ ๋ถ€๋ถ„์—์„œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ - private List saveNumbers(String[] splitParts) { + private static List saveNumbers(String[] splitParts) { List numbers = new ArrayList<>(); Arrays.stream(splitParts) .map(String::trim) @@ -74,7 +74,7 @@ private List saveNumbers(String[] splitParts) { * ๋ฌธ์ž์—ด ์ „์ฒ˜๋ฆฌ */ // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ถ”์ถœ (์—†์„ ์ˆ˜ ์žˆ์Œ) - private Optional extractCustomDelimiter(String input) { + private static Optional extractCustomDelimiter(String input) { if (!hasCustomDelimiter(input)) { return Optional.empty(); } @@ -83,7 +83,7 @@ private Optional extractCustomDelimiter(String input) { return Optional.of(customDelimiter); } - private String parseCustomDelimiter(String input) { + private static String parseCustomDelimiter(String input) { int delimiterStart = input.indexOf("//") + 2; int delimiterEnd = input.indexOf("\\n"); if (delimiterEnd == -1) { From 578f3121fcc8c064faf5ba651c826a3d1d678fc6 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 16:29:40 +0900 Subject: [PATCH 074/116] =?UTF-8?q?refactor:=20=ED=8C=8C=EC=8B=B1=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9D=84=20=EC=A0=95=EC=A0=81=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=B2=98=EB=A6=AC=ED=95=98=EB=8F=84=EB=A1=9D=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 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index b8b35dbf6c..2deabb557c 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -3,6 +3,7 @@ import java.util.List; import calculator.model.Calculator; +import calculator.model.Delimiter; import calculator.model.InputParser; import calculator.view.InputView; import calculator.view.OutputView; @@ -20,8 +21,10 @@ public void run() { String input = inputView.readInput(); inputView.closeRead(); - InputParser inputParser = new InputParser(input); - List numbers = inputParser.extractNumbers(input); + + + Delimiter delimiter = new Delimiter(); + List numbers = InputParser.extractNumbers(input, delimiter); Calculator calculator = new Calculator(numbers); outputView.printResult(calculator.sum()); From 1f5f76fddfa3900f6b0a348c590e70ec24f60a86 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 16:34:41 +0900 Subject: [PATCH 075/116] =?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=EA=B0=80=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/controller/CalculatorController.java | 6 ++++-- src/main/java/calculator/model/InputParser.java | 3 +-- src/main/java/calculator/validation/InputValidator.java | 1 - 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 2deabb557c..281ee6a0bc 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -1,6 +1,7 @@ package calculator.controller; import java.util.List; +import java.util.Optional; import calculator.model.Calculator; import calculator.model.Delimiter; @@ -21,9 +22,10 @@ public void run() { String input = inputView.readInput(); inputView.closeRead(); - - Delimiter delimiter = new Delimiter(); + + Optional customDelimiter = InputParser.extractCustomDelimiter(input); + customDelimiter.ifPresent(delimiter::addCustomDelimiter); List numbers = InputParser.extractNumbers(input, delimiter); Calculator calculator = new Calculator(numbers); diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 2d3a1d6398..a455b3bc77 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -10,7 +10,6 @@ public class InputParser { private InputParser() { - // extractCustomDelimiter(input).ifPresent(delimiter::add); } /** @@ -74,7 +73,7 @@ private static List saveNumbers(String[] splitParts) { * ๋ฌธ์ž์—ด ์ „์ฒ˜๋ฆฌ */ // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ถ”์ถœ (์—†์„ ์ˆ˜ ์žˆ์Œ) - private static Optional extractCustomDelimiter(String input) { + public static Optional extractCustomDelimiter(String input) { if (!hasCustomDelimiter(input)) { return Optional.empty(); } diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 9bfca6d0b9..0b3888aa87 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -8,7 +8,6 @@ public class InputValidator { private InputValidator() { - } public static void validateInvalidDelimiter(String input, Delimiter delimiter) { From e90fc3978f32e0623afa03c130c8d9966d7959f2 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 17:39:27 +0900 Subject: [PATCH 076/116] =?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=ED=8C=A8=ED=84=B4=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20Enum=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculator/model/CustomDelimiterPattern.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/calculator/model/CustomDelimiterPattern.java diff --git a/src/main/java/calculator/model/CustomDelimiterPattern.java b/src/main/java/calculator/model/CustomDelimiterPattern.java new file mode 100644 index 0000000000..9ba79ac942 --- /dev/null +++ b/src/main/java/calculator/model/CustomDelimiterPattern.java @@ -0,0 +1,16 @@ +package calculator.model; + +public enum CustomDelimiterPattern { + START("//"), + END("\\n"); + + private final String pattern; + + CustomDelimiterPattern(String pattern) { + this.pattern = pattern; + } + + public String getPattern() { + return pattern; + } +} From 9ecad4551ae16dd791c9b182356392db8b70c449 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 18:10:33 +0900 Subject: [PATCH 077/116] =?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=ED=8C=A8=ED=84=B4=20Enum=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/CustomDelimiterPattern.java | 4 ++++ src/main/java/calculator/model/InputParser.java | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/model/CustomDelimiterPattern.java b/src/main/java/calculator/model/CustomDelimiterPattern.java index 9ba79ac942..a7a66c1c38 100644 --- a/src/main/java/calculator/model/CustomDelimiterPattern.java +++ b/src/main/java/calculator/model/CustomDelimiterPattern.java @@ -13,4 +13,8 @@ public enum CustomDelimiterPattern { public String getPattern() { return pattern; } + + public int getPatternLength() { + return pattern.length(); + } } diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index a455b3bc77..1469fc218b 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -1,5 +1,7 @@ package calculator.model; +import static calculator.model.CustomDelimiterPattern.*; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -83,8 +85,8 @@ public static Optional extractCustomDelimiter(String input) { } private static String parseCustomDelimiter(String input) { - int delimiterStart = input.indexOf("//") + 2; - int delimiterEnd = input.indexOf("\\n"); + int delimiterStart = input.indexOf(START.getPattern()) + START.getPatternLength(); + int delimiterEnd = input.indexOf(END.getPattern()); if (delimiterEnd == -1) { throw new IllegalArgumentException("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ๋์„ ์˜๋ฏธํ•˜๋Š” \\n์ด ์—†์Šต๋‹ˆ๋‹ค."); } From ca68a6df9efe6f9edbb3d88e793bfde733329d2a Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 18:54:12 +0900 Subject: [PATCH 078/116] =?UTF-8?q?docs:=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=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 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2155878b01..0f405a4b9f 100644 --- a/README.md +++ b/README.md @@ -76,4 +76,8 @@ ### 7๏ธโƒฃ ๊ตฌ๋ถ„์ž๋ฅผ ๋‹จ์ˆœ ํ•„๋“œ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ์ค‘ โ†’ ๊ตฌ๋ถ„์ž ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ณ„๋„ ํด๋ž˜์Šค ์ƒ์„ฑ -- [x] `Delimiters` ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. \ No newline at end of file +- [x] `Delimiters` ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. + +### 8๏ธโƒฃ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ `InputParser` ํด๋ž˜์Šค์—์„œ ์ „๋‹ดํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ โ†’ `CustomDelimiterProcessor` ํด๋ž˜์Šค ์ƒ์„ฑ์„ ํ†ตํ•œ ์ฑ…์ž„ ๋ถ„๋ฆฌ + +- [ ] ๊ธฐ์กด `InputParser` ํด๋ž˜์Šค์— ์žˆ๋˜ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ฒ˜๋ฆฌ ๋กœ์ง์„ `CustomDelimiterProcessor` ํด๋ž˜์Šค๋กœ ์ด๋™์‹œํ‚จ๋‹ค. \ No newline at end of file From ce48b60cecf17bb54c842eae9e32aed10a65d295 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 18:56:04 +0900 Subject: [PATCH 079/116] =?UTF-8?q?refactor:=20=EA=B8=B0=EC=A1=B4=20InputP?= =?UTF-8?q?arser=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20=EC=9E=88?= =?UTF-8?q?=EB=8D=98=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=EA=B5=AC=EB=B6=84?= =?UTF-8?q?=EC=9E=90=20=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20CustomDel?= =?UTF-8?q?imiterProcessor=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/CustomDelimiterProcessor.java | 43 +++++++++++++++++++ .../java/calculator/model/InputParser.java | 25 ----------- 2 files changed, 43 insertions(+), 25 deletions(-) create mode 100644 src/main/java/calculator/model/CustomDelimiterProcessor.java diff --git a/src/main/java/calculator/model/CustomDelimiterProcessor.java b/src/main/java/calculator/model/CustomDelimiterProcessor.java new file mode 100644 index 0000000000..cf56b029b2 --- /dev/null +++ b/src/main/java/calculator/model/CustomDelimiterProcessor.java @@ -0,0 +1,43 @@ +package calculator.model; + +import static calculator.model.CustomDelimiterPattern.*; + +import java.util.Optional; + +import calculator.validation.InputValidator; + +public class CustomDelimiterProcessor { + public Optional extractCustomDelimiter(String input) { + if (!hasCustomDelimiterPattern(input)) { + return Optional.empty(); + } + int startIndex = findStartIndex(input); + int endIndex = findEndIndex(input); + + return Optional.of(extractCustomDelimiter(input, startIndex, endIndex)); + } + + private boolean hasCustomDelimiterPattern(String input) { + return input.contains(START.getPattern()) && input.contains(END.getPattern()); + } + + private int findStartIndex(String input) { + int startIndex = input.indexOf(START.getPattern()); + InputValidator.validateStartPattern(startIndex); + + return startIndex + START.getPatternLength(); + } + + private int findEndIndex(String input) { + int endIndex = input.indexOf(END.getPattern()); + InputValidator.validateEndPattern(endIndex); + + return endIndex; + } + + private String extractCustomDelimiter(String input, int start, int end) { + InputValidator.validatePatternPosition(start, end); + + return input.substring(start, end); + } +} diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index 1469fc218b..c71a392e90 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -1,11 +1,8 @@ package calculator.model; -import static calculator.model.CustomDelimiterPattern.*; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Optional; import java.util.regex.Pattern; import calculator.validation.InputValidator; @@ -70,26 +67,4 @@ private static List saveNumbers(String[] splitParts) { return numbers; } - - /** - * ๋ฌธ์ž์—ด ์ „์ฒ˜๋ฆฌ - */ - // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ถ”์ถœ (์—†์„ ์ˆ˜ ์žˆ์Œ) - public static Optional extractCustomDelimiter(String input) { - if (!hasCustomDelimiter(input)) { - return Optional.empty(); - } - String customDelimiter = parseCustomDelimiter(input); - - return Optional.of(customDelimiter); - } - - private static String parseCustomDelimiter(String input) { - int delimiterStart = input.indexOf(START.getPattern()) + START.getPatternLength(); - int delimiterEnd = input.indexOf(END.getPattern()); - if (delimiterEnd == -1) { - throw new IllegalArgumentException("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ๋์„ ์˜๋ฏธํ•˜๋Š” \\n์ด ์—†์Šต๋‹ˆ๋‹ค."); - } - return input.substring(delimiterStart, delimiterEnd); - } } From 4ea06f9bc03dd6b7876be66f04b9a049f77937e3 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 18:59:04 +0900 Subject: [PATCH 080/116] =?UTF-8?q?refactor:=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=EB=A5=BC=20=EA=B0=80=EB=8F=85?= =?UTF-8?q?=EC=84=B1=EC=9E=88=EA=B2=8C=20=EB=B6=84=EB=A5=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/exception/ErrorMessage.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/calculator/exception/ErrorMessage.java b/src/main/java/calculator/exception/ErrorMessage.java index 1e63f4af3b..fd7d87c961 100644 --- a/src/main/java/calculator/exception/ErrorMessage.java +++ b/src/main/java/calculator/exception/ErrorMessage.java @@ -2,12 +2,17 @@ public enum ErrorMessage { + // prefix ERROR_PREFIX("[ERROR] "), + + // delimiter INVALID_DELIMITER("ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."), - NON_INTEGER_VALUE("๊ตฌ๋ถ„์ž ์‚ฌ์ด์— ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."), INVALID_CUSTOM_DELIMITER("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋Š” ์ •์ˆ˜์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."), - NON_POSITIVE_NUMBER("๊ณ„์‚ฐ๊ธฐ์— ์ž…๋ ฅ๋  ์ˆซ์ž๋Š” ์–‘์ˆ˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."), - EMPTY_CUSTOM_DELIMITER("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋Š” ๋นˆ ๋ฌธ์ž์—ด์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + EMPTY_CUSTOM_DELIMITER("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋Š” ๋นˆ ๋ฌธ์ž์—ด์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."), + + // calculator + NON_INTEGER_VALUE("๊ณ„์‚ฐ๊ธฐ์— ์ž…๋ ฅ๋  ์ˆซ์ž๋Š” ์ •์ˆ˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."), + NON_POSITIVE_NUMBER("๊ณ„์‚ฐ๊ธฐ์— ์ž…๋ ฅ๋  ์ˆซ์ž๋Š” ์–‘์ˆ˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."); private final String message; From e96c7253a730542d8d40e879735d82591484cee1 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 18:59:26 +0900 Subject: [PATCH 081/116] =?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=ED=8C=A8=ED=84=B4=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=97=90=EB=9F=AC=20=EB=A9=94=EC=8B=9C=EC=A7=80=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/exception/ErrorMessage.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/exception/ErrorMessage.java b/src/main/java/calculator/exception/ErrorMessage.java index fd7d87c961..bd746098f0 100644 --- a/src/main/java/calculator/exception/ErrorMessage.java +++ b/src/main/java/calculator/exception/ErrorMessage.java @@ -12,7 +12,11 @@ public enum ErrorMessage { // calculator NON_INTEGER_VALUE("๊ณ„์‚ฐ๊ธฐ์— ์ž…๋ ฅ๋  ์ˆซ์ž๋Š” ์ •์ˆ˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."), - NON_POSITIVE_NUMBER("๊ณ„์‚ฐ๊ธฐ์— ์ž…๋ ฅ๋  ์ˆซ์ž๋Š” ์–‘์ˆ˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."); + NON_POSITIVE_NUMBER("๊ณ„์‚ฐ๊ธฐ์— ์ž…๋ ฅ๋  ์ˆซ์ž๋Š” ์–‘์ˆ˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."), + + // custom delimiter pattern + INVALID_START_PATTERN("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ์‹œ์ž‘ ํŒจํ„ด์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค."), + INVALID_END_PATTERN("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ์ข…๋ฃŒ ํŒจํ„ด์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค."); private final String message; From b9ebb9068177c5305de10ec46e2f32b9f0bd2227 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 18:59:36 +0900 Subject: [PATCH 082/116] =?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=ED=8C=A8=ED=84=B4=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculator/validation/InputValidator.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 0b3888aa87..baf3154471 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -48,4 +48,22 @@ public static void validateEmpty(String input) { throw new IllegalArgumentException(EMPTY_CUSTOM_DELIMITER.getMessage()); } } + + public static void validateStartPattern(int startIndex) { + if (startIndex == -1) { + throw new IllegalArgumentException(INVALID_START_PATTERN.getMessage()); + } + } + + public static void validateEndPattern(int endIndex) { + if (endIndex == -1) { + throw new IllegalArgumentException(INVALID_END_PATTERN.getMessage()); + } + } + + public static void validatePatternPosition(int start, int end) { + if (start >= end) { + throw new IllegalArgumentException("๊ตฌ๋ถ„์ž์˜ ์‹œ์ž‘ ํŒจํ„ด ๋ฐ ์ข…๋ฃŒ ํŒจํ„ด ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค."); + } + } } From 2256d1ce5704a7b01a256286a288a4f159ce4a6d Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 19:00:35 +0900 Subject: [PATCH 083/116] =?UTF-8?q?refactor:=20=EA=B8=B0=EC=A1=B4=20Calcul?= =?UTF-8?q?atorController=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20?= =?UTF-8?q?=EC=BB=A4=EC=8A=A4=ED=85=80=20=EA=B5=AC=EB=B6=84=EC=9E=90=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=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 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 281ee6a0bc..0206063088 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -4,6 +4,7 @@ import java.util.Optional; import calculator.model.Calculator; +import calculator.model.CustomDelimiterProcessor; import calculator.model.Delimiter; import calculator.model.InputParser; import calculator.view.InputView; @@ -12,10 +13,12 @@ public class CalculatorController { private final InputView inputView; private final OutputView outputView; + private final CustomDelimiterProcessor customDelimiterProcessor; public CalculatorController() { this.inputView = new InputView(); this.outputView = new OutputView(); + this.customDelimiterProcessor = new CustomDelimiterProcessor(); } public void run() { @@ -24,7 +27,7 @@ public void run() { Delimiter delimiter = new Delimiter(); - Optional customDelimiter = InputParser.extractCustomDelimiter(input); + Optional customDelimiter = customDelimiterProcessor.extractCustomDelimiter(input); customDelimiter.ifPresent(delimiter::addCustomDelimiter); List numbers = InputParser.extractNumbers(input, delimiter); From ac112020c7f1d53bbd84e0a4439ae3772e346870 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 19:18:35 +0900 Subject: [PATCH 084/116] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EC=9E=85=EB=A0=A5=EA=B0=92=EC=9C=BC=EB=A1=9C=EB=B6=80?= =?UTF-8?q?=ED=84=B0=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=EA=B5=AC=EB=B6=84?= =?UTF-8?q?=EC=9E=90=20=ED=8C=A8=ED=84=B4=EC=9D=84=20=EC=A0=9C=EA=B1=B0?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CalculatorController.java | 5 ++-- .../model/CustomDelimiterProcessor.java | 9 +++++++ .../java/calculator/model/InputParser.java | 25 +++---------------- 3 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 0206063088..0d7437d771 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -26,10 +26,11 @@ public void run() { inputView.closeRead(); Delimiter delimiter = new Delimiter(); - Optional customDelimiter = customDelimiterProcessor.extractCustomDelimiter(input); customDelimiter.ifPresent(delimiter::addCustomDelimiter); - List numbers = InputParser.extractNumbers(input, delimiter); + + String processedInput = customDelimiterProcessor.removeCustomDelimiterPattern(input); + List numbers = InputParser.extractNumbers(processedInput, delimiter); Calculator calculator = new Calculator(numbers); outputView.printResult(calculator.sum()); diff --git a/src/main/java/calculator/model/CustomDelimiterProcessor.java b/src/main/java/calculator/model/CustomDelimiterProcessor.java index cf56b029b2..99119e0fd1 100644 --- a/src/main/java/calculator/model/CustomDelimiterProcessor.java +++ b/src/main/java/calculator/model/CustomDelimiterProcessor.java @@ -7,6 +7,15 @@ import calculator.validation.InputValidator; public class CustomDelimiterProcessor { + public String removeCustomDelimiterPattern(String input) { + if (!hasCustomDelimiterPattern(input)) { + return input; + } + int endIndex = findEndIndex(input); + + return input.substring(endIndex + END.getPatternLength()); + } + public Optional extractCustomDelimiter(String input) { if (!hasCustomDelimiterPattern(input)) { return Optional.empty(); diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputParser.java index c71a392e90..95c31d0719 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputParser.java @@ -15,18 +15,17 @@ private InputParser() { * ํ•ต์‹ฌ ๋กœ์ง */ // 1์ฐจ ๊ฐ€๊ณต๋œ ์ž…๋ ฅ๊ฐ’์—์„œ ์ˆซ์ž๋ฅผ ์ถ”์ถœ - public static List extractNumbers(String input, Delimiter delimiter) { - if (input.isBlank()) { + public static List extractNumbers(String processedInput, Delimiter delimiter) { + if (processedInput.isBlank()) { return List.of(); } - String[] splitParts = splitInput(input, delimiter); + String[] splitParts = splitInput(processedInput, delimiter); return saveNumbers(splitParts); } // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ - private static String[] splitInput(String input, Delimiter delimiter) { - String processedInput = removeCustomDelimiter(input); + private static String[] splitInput(String processedInput, Delimiter delimiter) { InputValidator.validateInvalidDelimiter(processedInput, delimiter); String regex = String.join("|", @@ -38,22 +37,6 @@ private static String[] splitInput(String input, Delimiter delimiter) { return processedInput.split(regex); } - // ์ž…๋ ฅ๊ฐ’์—์„œ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ - private static String removeCustomDelimiter(String input) { - if (hasCustomDelimiter(input)) { - int delimiterEnd = input.indexOf("\\n"); - - return input.substring(delimiterEnd + 2); // \n ์ดํ›„์˜ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ - } - - return input; // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์›๋ณธ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ - } - - // ์ž…๋ ฅ๊ฐ’์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ - private static boolean hasCustomDelimiter(String input) { - return input.startsWith("//"); - } - // ๋ถ„๋ฆฌ๋œ ๊ฐ ๋ถ€๋ถ„์—์„œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ private static List saveNumbers(String[] splitParts) { List numbers = new ArrayList<>(); From 878c7479ce93ef381861e0fe15eb9bef736c7e14 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 19:21:52 +0900 Subject: [PATCH 085/116] =?UTF-8?q?refactor:=20InputParser=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=AA=85=EC=9D=84=20InputFilter=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 --- README.md | 6 +++--- .../java/calculator/controller/CalculatorController.java | 4 ++-- .../calculator/model/{InputParser.java => InputFilter.java} | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) rename src/main/java/calculator/model/{InputParser.java => InputFilter.java} (96%) diff --git a/README.md b/README.md index 0f405a4b9f..3bf470cb42 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ ### 2๏ธโƒฃ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ๊ณผ ํŒŒ์‹ฑ ๋กœ์ง์ด ํ˜ผ์šฉ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ โ†’ ํ™•์‹คํ•˜๊ฒŒ ์ฑ…์ž„์„ ๋ถ„๋ฆฌ - [x] ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋“ค์€ ๋ชจ๋‘ `InputValidator`์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ์ด๋™์‹œํ‚จ๋‹ค. -- [x] ์ž…๋ ฅ๊ฐ’ ํŒŒ์‹ฑ ๊ณผ์ •์—์„œ ์“ฐ์ด๋Š” ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ๋“ค์€ `InputParser` ๋‚ด์—์„œ `InputValidator`๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. +- [x] ์ž…๋ ฅ๊ฐ’ ํŒŒ์‹ฑ ๊ณผ์ •์—์„œ ์“ฐ์ด๋Š” ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ๋“ค์€ `InputFilter` ๋‚ด์—์„œ `InputValidator`๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. ### 3๏ธโƒฃ ๋งค์ง ๋„˜๋ฒ„ ๋ฐ ๋ฆฌํ„ฐ๋Ÿด ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์ถ”ํ›„ ์œ ์ง€๋ณด์ˆ˜์—์„œ์˜ ์–ด๋ ค์›€ ์˜ˆ์ƒ โ†’ ํด๋ž˜์Šค ๋ฐ ์ƒ์ˆ˜๋กœ์„œ ๊ด€๋ฆฌ @@ -78,6 +78,6 @@ - [x] `Delimiters` ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. -### 8๏ธโƒฃ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ `InputParser` ํด๋ž˜์Šค์—์„œ ์ „๋‹ดํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ โ†’ `CustomDelimiterProcessor` ํด๋ž˜์Šค ์ƒ์„ฑ์„ ํ†ตํ•œ ์ฑ…์ž„ ๋ถ„๋ฆฌ +### 8๏ธโƒฃ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ `InputFilter` ํด๋ž˜์Šค์—์„œ ์ „๋‹ดํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ โ†’ `CustomDelimiterProcessor` ํด๋ž˜์Šค ์ƒ์„ฑ์„ ํ†ตํ•œ ์ฑ…์ž„ ๋ถ„๋ฆฌ -- [ ] ๊ธฐ์กด `InputParser` ํด๋ž˜์Šค์— ์žˆ๋˜ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ฒ˜๋ฆฌ ๋กœ์ง์„ `CustomDelimiterProcessor` ํด๋ž˜์Šค๋กœ ์ด๋™์‹œํ‚จ๋‹ค. \ No newline at end of file +- [ ] ๊ธฐ์กด `InputFilter` ํด๋ž˜์Šค์— ์žˆ๋˜ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ฒ˜๋ฆฌ ๋กœ์ง์„ `CustomDelimiterProcessor` ํด๋ž˜์Šค๋กœ ์ด๋™์‹œํ‚จ๋‹ค. \ No newline at end of file diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 0d7437d771..118cd0925d 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -6,7 +6,7 @@ import calculator.model.Calculator; import calculator.model.CustomDelimiterProcessor; import calculator.model.Delimiter; -import calculator.model.InputParser; +import calculator.model.InputFilter; import calculator.view.InputView; import calculator.view.OutputView; @@ -30,7 +30,7 @@ public void run() { customDelimiter.ifPresent(delimiter::addCustomDelimiter); String processedInput = customDelimiterProcessor.removeCustomDelimiterPattern(input); - List numbers = InputParser.extractNumbers(processedInput, delimiter); + List numbers = InputFilter.extractNumbers(processedInput, delimiter); Calculator calculator = new Calculator(numbers); outputView.printResult(calculator.sum()); diff --git a/src/main/java/calculator/model/InputParser.java b/src/main/java/calculator/model/InputFilter.java similarity index 96% rename from src/main/java/calculator/model/InputParser.java rename to src/main/java/calculator/model/InputFilter.java index 95c31d0719..df97002229 100644 --- a/src/main/java/calculator/model/InputParser.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -7,8 +7,8 @@ import calculator.validation.InputValidator; -public class InputParser { - private InputParser() { +public class InputFilter { + private InputFilter() { } /** From cdf1ecc9aa42dfcb462f23dd29ffe39e41078964 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 19:37:43 +0900 Subject: [PATCH 086/116] =?UTF-8?q?refactor:=20=EC=BB=A4=EC=8A=A4=ED=85=80?= =?UTF-8?q?=20=EA=B5=AC=EB=B6=84=EC=9E=90=20=EC=A0=9C=EA=B1=B0=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=A7=81=EA=B4=80=EC=A0=81=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 --- .../java/calculator/model/CustomDelimiterProcessor.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/calculator/model/CustomDelimiterProcessor.java b/src/main/java/calculator/model/CustomDelimiterProcessor.java index 99119e0fd1..490fb6a7b2 100644 --- a/src/main/java/calculator/model/CustomDelimiterProcessor.java +++ b/src/main/java/calculator/model/CustomDelimiterProcessor.java @@ -8,12 +8,13 @@ public class CustomDelimiterProcessor { public String removeCustomDelimiterPattern(String input) { - if (!hasCustomDelimiterPattern(input)) { - return input; + if (hasCustomDelimiterPattern(input)) { + int endIndex = findEndIndex(input); + + return input.substring(endIndex + END.getPatternLength()); } - int endIndex = findEndIndex(input); - return input.substring(endIndex + END.getPatternLength()); + return input; } public Optional extractCustomDelimiter(String input) { From def0b171d9957461bcdf55a36c53147f4aa669d3 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 19:40:49 +0900 Subject: [PATCH 087/116] =?UTF-8?q?refactor:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=94=94?= =?UTF-8?q?=EB=A0=89=ED=86=A0=EB=A6=AC=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/controller/CalculatorController.java | 4 ++-- src/main/java/calculator/model/InputFilter.java | 1 + .../model/{ => delimiter}/CustomDelimiterPattern.java | 2 +- .../model/{ => delimiter}/CustomDelimiterProcessor.java | 4 ++-- .../calculator/model/{ => delimiter}/DefaultDelimiter.java | 2 +- src/main/java/calculator/model/{ => delimiter}/Delimiter.java | 2 +- src/main/java/calculator/validation/InputValidator.java | 2 +- 7 files changed, 9 insertions(+), 8 deletions(-) rename src/main/java/calculator/model/{ => delimiter}/CustomDelimiterPattern.java (88%) rename src/main/java/calculator/model/{ => delimiter}/CustomDelimiterProcessor.java (92%) rename src/main/java/calculator/model/{ => delimiter}/DefaultDelimiter.java (86%) rename src/main/java/calculator/model/{ => delimiter}/Delimiter.java (95%) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 118cd0925d..387b485310 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -4,8 +4,8 @@ import java.util.Optional; import calculator.model.Calculator; -import calculator.model.CustomDelimiterProcessor; -import calculator.model.Delimiter; +import calculator.model.delimiter.CustomDelimiterProcessor; +import calculator.model.delimiter.Delimiter; import calculator.model.InputFilter; import calculator.view.InputView; import calculator.view.OutputView; diff --git a/src/main/java/calculator/model/InputFilter.java b/src/main/java/calculator/model/InputFilter.java index df97002229..bb611a33dd 100644 --- a/src/main/java/calculator/model/InputFilter.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.regex.Pattern; +import calculator.model.delimiter.Delimiter; import calculator.validation.InputValidator; public class InputFilter { diff --git a/src/main/java/calculator/model/CustomDelimiterPattern.java b/src/main/java/calculator/model/delimiter/CustomDelimiterPattern.java similarity index 88% rename from src/main/java/calculator/model/CustomDelimiterPattern.java rename to src/main/java/calculator/model/delimiter/CustomDelimiterPattern.java index a7a66c1c38..b15d29c171 100644 --- a/src/main/java/calculator/model/CustomDelimiterPattern.java +++ b/src/main/java/calculator/model/delimiter/CustomDelimiterPattern.java @@ -1,4 +1,4 @@ -package calculator.model; +package calculator.model.delimiter; public enum CustomDelimiterPattern { START("//"), diff --git a/src/main/java/calculator/model/CustomDelimiterProcessor.java b/src/main/java/calculator/model/delimiter/CustomDelimiterProcessor.java similarity index 92% rename from src/main/java/calculator/model/CustomDelimiterProcessor.java rename to src/main/java/calculator/model/delimiter/CustomDelimiterProcessor.java index 490fb6a7b2..cda8a1f9b9 100644 --- a/src/main/java/calculator/model/CustomDelimiterProcessor.java +++ b/src/main/java/calculator/model/delimiter/CustomDelimiterProcessor.java @@ -1,6 +1,6 @@ -package calculator.model; +package calculator.model.delimiter; -import static calculator.model.CustomDelimiterPattern.*; +import static calculator.model.delimiter.CustomDelimiterPattern.*; import java.util.Optional; diff --git a/src/main/java/calculator/model/DefaultDelimiter.java b/src/main/java/calculator/model/delimiter/DefaultDelimiter.java similarity index 86% rename from src/main/java/calculator/model/DefaultDelimiter.java rename to src/main/java/calculator/model/delimiter/DefaultDelimiter.java index 1c9b1aee86..f9bf69eec8 100644 --- a/src/main/java/calculator/model/DefaultDelimiter.java +++ b/src/main/java/calculator/model/delimiter/DefaultDelimiter.java @@ -1,4 +1,4 @@ -package calculator.model; +package calculator.model.delimiter; public enum DefaultDelimiter { COMMA(","), diff --git a/src/main/java/calculator/model/Delimiter.java b/src/main/java/calculator/model/delimiter/Delimiter.java similarity index 95% rename from src/main/java/calculator/model/Delimiter.java rename to src/main/java/calculator/model/delimiter/Delimiter.java index b3cc7e866a..a911d6e0ac 100644 --- a/src/main/java/calculator/model/Delimiter.java +++ b/src/main/java/calculator/model/delimiter/Delimiter.java @@ -1,4 +1,4 @@ -package calculator.model; +package calculator.model.delimiter; import java.util.Arrays; import java.util.Collections; diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index baf3154471..f30d1783d0 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -4,7 +4,7 @@ import java.util.regex.Pattern; -import calculator.model.Delimiter; +import calculator.model.delimiter.Delimiter; public class InputValidator { private InputValidator() { From 6ea48ec822c53bf74fdc5e2f6cd6a0e417f5c51a Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 19:42:39 +0900 Subject: [PATCH 088/116] =?UTF-8?q?refactor:=20Calculator=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=A5=BC=20stateless=ED=95=98=EA=B2=8C=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 --- .../controller/CalculatorController.java | 4 ++-- src/main/java/calculator/model/Calculator.java | 17 ++++------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 387b485310..197bd7a722 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -32,7 +32,7 @@ public void run() { String processedInput = customDelimiterProcessor.removeCustomDelimiterPattern(input); List numbers = InputFilter.extractNumbers(processedInput, delimiter); - Calculator calculator = new Calculator(numbers); - outputView.printResult(calculator.sum()); + Calculator calculator = new Calculator(); + outputView.printResult(calculator.sum(numbers)); } } diff --git a/src/main/java/calculator/model/Calculator.java b/src/main/java/calculator/model/Calculator.java index dc1d84759f..4dd5fab5aa 100644 --- a/src/main/java/calculator/model/Calculator.java +++ b/src/main/java/calculator/model/Calculator.java @@ -3,18 +3,9 @@ import java.util.List; public class Calculator { - private List numbers; - - public Calculator(List numbers) { - this.numbers = numbers; - } - - public int sum() { - int sum = 0; - for (int number : numbers) { - sum += number; - } - - return sum; + public int sum(List numbers) { + return numbers.stream() + .mapToInt(Integer::intValue) + .sum(); } } From a3e474863e8e72fad6f8ca1046db5b546dfdd513 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:01:32 +0900 Subject: [PATCH 089/116] =?UTF-8?q?refactor:=20InputView=EC=99=80=20Output?= =?UTF-8?q?View=EC=9D=98=20=EC=97=AD=ED=95=A0=EC=9D=84=20=EB=AA=85?= =?UTF-8?q?=ED=99=95=ED=95=98=EA=B2=8C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/view/InputView.java | 1 - src/main/java/calculator/view/OutputView.java | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/view/InputView.java b/src/main/java/calculator/view/InputView.java index 5c93a3fd8e..497cdd9986 100644 --- a/src/main/java/calculator/view/InputView.java +++ b/src/main/java/calculator/view/InputView.java @@ -4,7 +4,6 @@ public class InputView { public String readInput() { - System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); return Console.readLine(); } diff --git a/src/main/java/calculator/view/OutputView.java b/src/main/java/calculator/view/OutputView.java index aee3e4c4dd..f667551b25 100644 --- a/src/main/java/calculator/view/OutputView.java +++ b/src/main/java/calculator/view/OutputView.java @@ -1,6 +1,10 @@ package calculator.view; public class OutputView { + public void printReadCommand() { + System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); + } + public void printResult(int result) { System.out.println("๊ฒฐ๊ณผ : " + result); } From a5e41b9db114e3b61500afd696ad499b897effc6 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:02:04 +0900 Subject: [PATCH 090/116] =?UTF-8?q?refactor:=20CalculatorController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=82=B4=EB=B6=80=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=9D=84=20=EA=B0=80=EB=8F=85=EC=84=B1=EC=9E=88?= =?UTF-8?q?=EA=B2=8C=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A1=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CalculatorController.java | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 197bd7a722..65b98745d7 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -22,17 +22,44 @@ public CalculatorController() { } public void run() { + String input = readInput(); + + Delimiter delimiter = new Delimiter(); + addCustomDelimiter(input, delimiter); + + List numbers = extractNumbers(input, delimiter); + + int result = calculate(numbers); + printResult(result); + } + + private String readInput() { + outputView.printReadCommand(); String input = inputView.readInput(); inputView.closeRead(); - Delimiter delimiter = new Delimiter(); + return input; + } + + private void addCustomDelimiter(String input, Delimiter delimiter) { Optional customDelimiter = customDelimiterProcessor.extractCustomDelimiter(input); customDelimiter.ifPresent(delimiter::addCustomDelimiter); + } + private List extractNumbers(String input, Delimiter delimiter) { String processedInput = customDelimiterProcessor.removeCustomDelimiterPattern(input); - List numbers = InputFilter.extractNumbers(processedInput, delimiter); + return InputFilter.extractNumbers(processedInput, delimiter); + } + + private int calculate(List numbers) { Calculator calculator = new Calculator(); - outputView.printResult(calculator.sum(numbers)); + + return calculator.sum(numbers); + } + + private void printResult(int result) { + outputView.printResult(result); } + } From a1ca66631e25a9addeadea41340161056868f478 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:04:29 +0900 Subject: [PATCH 091/116] =?UTF-8?q?docs:=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=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, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3bf470cb42..2929ea0b8a 100644 --- a/README.md +++ b/README.md @@ -63,11 +63,10 @@ - [ ] ์ˆซ์ž ๊ฐ’๋“ค์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก `final` ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [ ] ์ˆซ์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ์ „๋‹ฌํ•  ๋–„, ๋ถˆ๋ณ€ ๋ฆฌ์ŠคํŠธ๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋„๋ก List.of ๋˜๋Š” unmodifiableList๋ฅผ ์ ์šฉํ•œ๋‹ค. -### 5๏ธโƒฃ ์ •์งํ•˜๊ฒŒ ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ์—๋งŒ ์ง‘์ค‘ํ•œ ์ฝ”๋“œ โ†’ ์ถ”ํ›„ ํ™•์žฅ ์‹œ ๋” ๋งŽ์€ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์กฐ ๋ณ€๊ฒฝ +### 5๏ธโƒฃ ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ์— ์‚ฐ์žฌ๋˜์–ด ์žˆ์Œ โ†’ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌ -- [ ] `Calculator` ํด๋ž˜์Šค์˜ ๋ง์…ˆ ์—ฐ์‚ฐ์ด ์†Œ์ˆ˜ ๋ง์…ˆ์„ ์ง€์›ํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. -- [ ] ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ, ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. -- [ ] ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. +- [ ] ์ •์  ํด๋ž˜์Šค์™€ ์ผ๋ฐ˜ ํด๋ž˜์Šค์˜ ๊ตฌ๋ถ„์„ ๋ถ„๋ช…ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด `InputValidator` ํด๋ž˜์Šค๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•œ๋‹ค. +- [ ] `ApplicationConfig` ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค. ### 6๏ธโƒฃ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋‹จ 2๊ฐœ๋ฐ–์— ์—†๋Š” ์ƒํ™ฉ โ†’ ๋” ๋งŽ์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ํ–ฅ์ƒ @@ -80,4 +79,4 @@ ### 8๏ธโƒฃ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ `InputFilter` ํด๋ž˜์Šค์—์„œ ์ „๋‹ดํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ โ†’ `CustomDelimiterProcessor` ํด๋ž˜์Šค ์ƒ์„ฑ์„ ํ†ตํ•œ ์ฑ…์ž„ ๋ถ„๋ฆฌ -- [ ] ๊ธฐ์กด `InputFilter` ํด๋ž˜์Šค์— ์žˆ๋˜ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ฒ˜๋ฆฌ ๋กœ์ง์„ `CustomDelimiterProcessor` ํด๋ž˜์Šค๋กœ ์ด๋™์‹œํ‚จ๋‹ค. \ No newline at end of file +- [x] ๊ธฐ์กด `InputFilter` ํด๋ž˜์Šค์— ์žˆ๋˜ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ฒ˜๋ฆฌ ๋กœ์ง์„ `CustomDelimiterProcessor` ํด๋ž˜์Šค๋กœ ์ด๋™์‹œํ‚จ๋‹ค. \ No newline at end of file From 4d1b3dd2b8c46fe5f31fd4ce9eeaceddfb951cc5 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:11:54 +0900 Subject: [PATCH 092/116] =?UTF-8?q?refactor:=20Delimiter=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=AA=85=20Delimiters=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CalculatorController.java | 16 ++++++++-------- src/main/java/calculator/model/InputFilter.java | 12 ++++++------ .../{Delimiter.java => Delimiters.java} | 4 ++-- .../calculator/validation/InputValidator.java | 6 +++--- 4 files changed, 19 insertions(+), 19 deletions(-) rename src/main/java/calculator/model/delimiter/{Delimiter.java => Delimiters.java} (94%) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 65b98745d7..495aacc362 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -5,7 +5,7 @@ import calculator.model.Calculator; import calculator.model.delimiter.CustomDelimiterProcessor; -import calculator.model.delimiter.Delimiter; +import calculator.model.delimiter.Delimiters; import calculator.model.InputFilter; import calculator.view.InputView; import calculator.view.OutputView; @@ -24,10 +24,10 @@ public CalculatorController() { public void run() { String input = readInput(); - Delimiter delimiter = new Delimiter(); - addCustomDelimiter(input, delimiter); + Delimiters delimiters = new Delimiters(); + addCustomDelimiter(input, delimiters); - List numbers = extractNumbers(input, delimiter); + List numbers = extractNumbers(input, delimiters); int result = calculate(numbers); printResult(result); @@ -41,15 +41,15 @@ private String readInput() { return input; } - private void addCustomDelimiter(String input, Delimiter delimiter) { + private void addCustomDelimiter(String input, Delimiters delimiters) { Optional customDelimiter = customDelimiterProcessor.extractCustomDelimiter(input); - customDelimiter.ifPresent(delimiter::addCustomDelimiter); + customDelimiter.ifPresent(delimiters::addCustomDelimiter); } - private List extractNumbers(String input, Delimiter delimiter) { + private List extractNumbers(String input, Delimiters delimiters) { String processedInput = customDelimiterProcessor.removeCustomDelimiterPattern(input); - return InputFilter.extractNumbers(processedInput, delimiter); + return InputFilter.extractNumbers(processedInput, delimiters); } private int calculate(List numbers) { diff --git a/src/main/java/calculator/model/InputFilter.java b/src/main/java/calculator/model/InputFilter.java index bb611a33dd..3064681c69 100644 --- a/src/main/java/calculator/model/InputFilter.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.regex.Pattern; -import calculator.model.delimiter.Delimiter; +import calculator.model.delimiter.Delimiters; import calculator.validation.InputValidator; public class InputFilter { @@ -16,21 +16,21 @@ private InputFilter() { * ํ•ต์‹ฌ ๋กœ์ง */ // 1์ฐจ ๊ฐ€๊ณต๋œ ์ž…๋ ฅ๊ฐ’์—์„œ ์ˆซ์ž๋ฅผ ์ถ”์ถœ - public static List extractNumbers(String processedInput, Delimiter delimiter) { + public static List extractNumbers(String processedInput, Delimiters delimiters) { if (processedInput.isBlank()) { return List.of(); } - String[] splitParts = splitInput(processedInput, delimiter); + String[] splitParts = splitInput(processedInput, delimiters); return saveNumbers(splitParts); } // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ - private static String[] splitInput(String processedInput, Delimiter delimiter) { - InputValidator.validateInvalidDelimiter(processedInput, delimiter); + private static String[] splitInput(String processedInput, Delimiters delimiters) { + InputValidator.validateInvalidDelimiter(processedInput, delimiters); String regex = String.join("|", - delimiter.getDelimiters().stream() + delimiters.getDelimiters().stream() .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ (ํŠน์ˆ˜ ๋ฌธ์ž์˜ ๊ฒฝ์šฐ ํ˜ผ๋™์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Œ) .toArray(String[]::new) ); diff --git a/src/main/java/calculator/model/delimiter/Delimiter.java b/src/main/java/calculator/model/delimiter/Delimiters.java similarity index 94% rename from src/main/java/calculator/model/delimiter/Delimiter.java rename to src/main/java/calculator/model/delimiter/Delimiters.java index a911d6e0ac..6e2a5d9a69 100644 --- a/src/main/java/calculator/model/delimiter/Delimiter.java +++ b/src/main/java/calculator/model/delimiter/Delimiters.java @@ -7,10 +7,10 @@ import calculator.validation.InputValidator; -public class Delimiter { +public class Delimiters { private final Set delimiters = new HashSet<>(); - public Delimiter() { + public Delimiters() { initDefaultDelimiters(); } diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index f30d1783d0..31ffde5238 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -4,14 +4,14 @@ import java.util.regex.Pattern; -import calculator.model.delimiter.Delimiter; +import calculator.model.delimiter.Delimiters; public class InputValidator { private InputValidator() { } - public static void validateInvalidDelimiter(String input, Delimiter delimiter) { - String regex = "[\\d" + String.join("", delimiter.getDelimiters().stream() + public static void validateInvalidDelimiter(String input, Delimiters delimiters) { + String regex = "[\\d" + String.join("", delimiters.getDelimiters().stream() .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ .toArray(String[]::new)) + "]*"; String filteredInput = input.replaceAll(regex, ""); From 386a14ffacb486439abf37521fc15cf81c8b5d90 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:22:48 +0900 Subject: [PATCH 093/116] =?UTF-8?q?refactor:=20CalculatorController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=82=B4=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=EC=9D=84=20=EC=A7=81=EA=B4=80=EC=A0=81=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 --- .../controller/CalculatorController.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 495aacc362..4efc1dbb2b 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -13,23 +13,23 @@ public class CalculatorController { private final InputView inputView; private final OutputView outputView; + private final Delimiters delimiters; private final CustomDelimiterProcessor customDelimiterProcessor; public CalculatorController() { this.inputView = new InputView(); this.outputView = new OutputView(); this.customDelimiterProcessor = new CustomDelimiterProcessor(); + this.delimiters = new Delimiters(); } public void run() { String input = readInput(); - Delimiters delimiters = new Delimiters(); - addCustomDelimiter(input, delimiters); - - List numbers = extractNumbers(input, delimiters); - + String processedInput = processCustomDelimiter(input); + List numbers = extractNumbers(processedInput); int result = calculate(numbers); + printResult(result); } @@ -41,14 +41,14 @@ private String readInput() { return input; } - private void addCustomDelimiter(String input, Delimiters delimiters) { + private String processCustomDelimiter(String input) { Optional customDelimiter = customDelimiterProcessor.extractCustomDelimiter(input); customDelimiter.ifPresent(delimiters::addCustomDelimiter); - } - private List extractNumbers(String input, Delimiters delimiters) { - String processedInput = customDelimiterProcessor.removeCustomDelimiterPattern(input); + return customDelimiterProcessor.removeCustomDelimiterPattern(input); + } + private List extractNumbers(String processedInput) { return InputFilter.extractNumbers(processedInput, delimiters); } @@ -61,5 +61,4 @@ private int calculate(List numbers) { private void printResult(int result) { outputView.printResult(result); } - } From afca529492ed85db25681adbdb6311bebf2f9080 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:24:27 +0900 Subject: [PATCH 094/116] =?UTF-8?q?refactor:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=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/controller/CalculatorController.java | 2 +- src/main/java/calculator/model/delimiter/Delimiters.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 4efc1dbb2b..8526810e97 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -43,7 +43,7 @@ private String readInput() { private String processCustomDelimiter(String input) { Optional customDelimiter = customDelimiterProcessor.extractCustomDelimiter(input); - customDelimiter.ifPresent(delimiters::addCustomDelimiter); + customDelimiter.ifPresent(delimiters::addDelimiter); return customDelimiterProcessor.removeCustomDelimiterPattern(input); } diff --git a/src/main/java/calculator/model/delimiter/Delimiters.java b/src/main/java/calculator/model/delimiter/Delimiters.java index 6e2a5d9a69..29efe2deca 100644 --- a/src/main/java/calculator/model/delimiter/Delimiters.java +++ b/src/main/java/calculator/model/delimiter/Delimiters.java @@ -14,7 +14,7 @@ public Delimiters() { initDefaultDelimiters(); } - public void addCustomDelimiter(String delimiterInput) { + public void addDelimiter(String delimiterInput) { InputValidator.validateEmpty(delimiterInput); InputValidator.validateNonDigit(delimiterInput); delimiters.add(delimiterInput); From 004c3932a73e0261ea7ec648a5ca9f12fbcf4e05 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:31:41 +0900 Subject: [PATCH 095/116] =?UTF-8?q?refactor:=20CalculatorController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=82=B4=20=EB=8D=A7=EC=85=88=20?= =?UTF-8?q?=EC=97=B0=EC=82=B0=20=EA=B4=80=EB=A0=A8=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=AA=85=20=EC=A7=81=EA=B4=80=EC=A0=81=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/controller/CalculatorController.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 8526810e97..db8f63aeab 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -52,9 +52,7 @@ private List extractNumbers(String processedInput) { return InputFilter.extractNumbers(processedInput, delimiters); } - private int calculate(List numbers) { - Calculator calculator = new Calculator(); - + private int sum(List numbers) { return calculator.sum(numbers); } From 3c2cd62b86ffb1a3769a71dc80f8927ed3d1168a Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:33:05 +0900 Subject: [PATCH 096/116] =?UTF-8?q?refactor:=20InputFilter=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=A5=BC=20=EC=9D=BC=EB=B0=98=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=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/InputFilter.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/calculator/model/InputFilter.java b/src/main/java/calculator/model/InputFilter.java index 3064681c69..fc00bd270c 100644 --- a/src/main/java/calculator/model/InputFilter.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -9,14 +9,11 @@ import calculator.validation.InputValidator; public class InputFilter { - private InputFilter() { - } - /** * ํ•ต์‹ฌ ๋กœ์ง */ // 1์ฐจ ๊ฐ€๊ณต๋œ ์ž…๋ ฅ๊ฐ’์—์„œ ์ˆซ์ž๋ฅผ ์ถ”์ถœ - public static List extractNumbers(String processedInput, Delimiters delimiters) { + public List extractNumbers(String processedInput, Delimiters delimiters) { if (processedInput.isBlank()) { return List.of(); } @@ -26,7 +23,7 @@ public static List extractNumbers(String processedInput, Delimiters del } // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ - private static String[] splitInput(String processedInput, Delimiters delimiters) { + private String[] splitInput(String processedInput, Delimiters delimiters) { InputValidator.validateInvalidDelimiter(processedInput, delimiters); String regex = String.join("|", @@ -39,7 +36,7 @@ private static String[] splitInput(String processedInput, Delimiters delimiters) } // ๋ถ„๋ฆฌ๋œ ๊ฐ ๋ถ€๋ถ„์—์„œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ - private static List saveNumbers(String[] splitParts) { + private List saveNumbers(String[] splitParts) { List numbers = new ArrayList<>(); Arrays.stream(splitParts) .map(String::trim) From b6fc62206fd4deb0dc47cfa3f84e6c02cd3f8839 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:35:49 +0900 Subject: [PATCH 097/116] =?UTF-8?q?refactor:=20InputValidator=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=A5=BC=20=EC=A0=9C=EC=99=B8=ED=95=9C=20?= =?UTF-8?q?=EB=AA=A8=EB=93=A0=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9D=B8?= =?UTF-8?q?=EC=8A=A4=ED=84=B4=EC=8A=A4=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../controller/CalculatorController.java | 23 +++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 2929ea0b8a..9cf8930cc2 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ ### 5๏ธโƒฃ ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ์— ์‚ฐ์žฌ๋˜์–ด ์žˆ์Œ โ†’ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌ -- [ ] ์ •์  ํด๋ž˜์Šค์™€ ์ผ๋ฐ˜ ํด๋ž˜์Šค์˜ ๊ตฌ๋ถ„์„ ๋ถ„๋ช…ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด `InputValidator` ํด๋ž˜์Šค๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•œ๋‹ค. +- [x] ์ •์  ํด๋ž˜์Šค์™€ ์ผ๋ฐ˜ ํด๋ž˜์Šค์˜ ๊ตฌ๋ถ„์„ ๋ถ„๋ช…ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด `InputValidator` ํด๋ž˜์Šค๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•œ๋‹ค. - [ ] `ApplicationConfig` ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค. ### 6๏ธโƒฃ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋‹จ 2๊ฐœ๋ฐ–์— ์—†๋Š” ์ƒํ™ฉ โ†’ ๋” ๋งŽ์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ํ–ฅ์ƒ diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index db8f63aeab..f5a4edfc60 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -15,12 +15,21 @@ public class CalculatorController { private final OutputView outputView; private final Delimiters delimiters; private final CustomDelimiterProcessor customDelimiterProcessor; + private final InputFilter inputFilter; + private final Calculator calculator; - public CalculatorController() { - this.inputView = new InputView(); - this.outputView = new OutputView(); - this.customDelimiterProcessor = new CustomDelimiterProcessor(); - this.delimiters = new Delimiters(); + public CalculatorController( + InputView inputView, + OutputView outputView, + Delimiters delimiters, + CustomDelimiterProcessor customDelimiterProcessor, InputFilter inputFilter, Calculator calculator + ) { + this.inputView = inputView; + this.outputView = outputView; + this.delimiters = delimiters; + this.customDelimiterProcessor = customDelimiterProcessor; + this.inputFilter = inputFilter; + this.calculator = calculator; } public void run() { @@ -28,7 +37,7 @@ public void run() { String processedInput = processCustomDelimiter(input); List numbers = extractNumbers(processedInput); - int result = calculate(numbers); + int result = sum(numbers); printResult(result); } @@ -49,7 +58,7 @@ private String processCustomDelimiter(String input) { } private List extractNumbers(String processedInput) { - return InputFilter.extractNumbers(processedInput, delimiters); + return inputFilter.extractNumbers(processedInput, delimiters); } private int sum(List numbers) { From 9c2e4bb0b181a9e4fb9e444ff99ae400f0eaf597 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:36:16 +0900 Subject: [PATCH 098/116] =?UTF-8?q?refactor:=20`ApplicationConfig`=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A5=BC=20=ED=86=B5=ED=95=B4=20?= =?UTF-8?q?=EC=97=AC=EB=9F=AC=20=EA=B0=9C=EC=9D=98=20=EC=9D=B8=EC=8A=A4?= =?UTF-8?q?=ED=84=B4=EC=8A=A4=EB=A5=BC=20=ED=95=9C=20=EA=B3=B3=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EA=B4=80=EB=A6=AC=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../calculator/config/ApplicationConfig.java | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/main/java/calculator/config/ApplicationConfig.java diff --git a/README.md b/README.md index 9cf8930cc2..154b1b1a71 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ ### 5๏ธโƒฃ ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ์— ์‚ฐ์žฌ๋˜์–ด ์žˆ์Œ โ†’ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌ - [x] ์ •์  ํด๋ž˜์Šค์™€ ์ผ๋ฐ˜ ํด๋ž˜์Šค์˜ ๊ตฌ๋ถ„์„ ๋ถ„๋ช…ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด `InputValidator` ํด๋ž˜์Šค๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•œ๋‹ค. -- [ ] `ApplicationConfig` ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค. +- [x] `ApplicationConfig` ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค. ### 6๏ธโƒฃ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋‹จ 2๊ฐœ๋ฐ–์— ์—†๋Š” ์ƒํ™ฉ โ†’ ๋” ๋งŽ์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ํ–ฅ์ƒ diff --git a/src/main/java/calculator/config/ApplicationConfig.java b/src/main/java/calculator/config/ApplicationConfig.java new file mode 100644 index 0000000000..b598c1c417 --- /dev/null +++ b/src/main/java/calculator/config/ApplicationConfig.java @@ -0,0 +1,22 @@ +package calculator.config; + +import calculator.controller.CalculatorController; +import calculator.model.Calculator; +import calculator.model.InputFilter; +import calculator.model.delimiter.CustomDelimiterProcessor; +import calculator.model.delimiter.Delimiters; +import calculator.view.InputView; +import calculator.view.OutputView; + +public class ApplicationConfig { + public CalculatorController initializeController() { + return new CalculatorController( + new InputView(), + new OutputView(), + new Delimiters(), + new CustomDelimiterProcessor(), + new InputFilter(), + new Calculator() + ); + } +} From c0d9e9d0d4b97dcab4641432df43553bbf61f7b7 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:36:50 +0900 Subject: [PATCH 099/116] =?UTF-8?q?refactor:=20=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=EC=96=B4=ED=94=8C=EB=A6=AC=EC=BC=80=EC=9D=B4=EC=85=98=EC=97=90?= =?UTF-8?q?=20ApplicationConfig=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A5=BC=20?= =?UTF-8?q?=EC=9D=B4=EC=9A=A9=ED=95=9C=20CalculatorController=20=EC=9D=B8?= =?UTF-8?q?=EC=8A=A4=ED=84=B4=EC=8A=A4=20=EC=B4=88=EA=B8=B0=ED=99=94=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=A0=81=EC=9A=A9?= 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, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 5ddf01d383..ddac22af47 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,11 +1,14 @@ package calculator; +import calculator.config.ApplicationConfig; import calculator.controller.CalculatorController; public class Application { public static void main(String[] args) { - CalculatorController calculatorController = new CalculatorController(); + ApplicationConfig applicationConfig = new ApplicationConfig(); + CalculatorController calculatorController = applicationConfig.initializeController(); + calculatorController.run(); } } From 5bdf81aab8d2a72c1db75fbe51348ff09598f690 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:38:34 +0900 Subject: [PATCH 100/116] =?UTF-8?q?refactor:=20CalculatorController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B0=9C=ED=96=89=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/controller/CalculatorController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index f5a4edfc60..38ab27eb35 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -22,7 +22,9 @@ public CalculatorController( InputView inputView, OutputView outputView, Delimiters delimiters, - CustomDelimiterProcessor customDelimiterProcessor, InputFilter inputFilter, Calculator calculator + CustomDelimiterProcessor customDelimiterProcessor, + InputFilter inputFilter, + Calculator calculator ) { this.inputView = inputView; this.outputView = outputView; From 676ddc516842510a7bc0fc995d4c13f517e1ef65 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:40:08 +0900 Subject: [PATCH 101/116] =?UTF-8?q?refactor:=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B5=AC=EB=B6=84=EC=9E=90=20=EB=A6=AC=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=97=90=20=EB=8C=80=ED=95=9C=20=EB=B6=88=EB=B3=80=20?= =?UTF-8?q?=EA=B0=9C=EB=85=90=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- src/main/java/calculator/model/InputFilter.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 154b1b1a71..b60cf37fca 100644 --- a/README.md +++ b/README.md @@ -60,8 +60,8 @@ ### 4๏ธโƒฃ ์ˆซ์ž ๊ฐ’๋“ค์ด ๊ฐ ๊ฐ์ฒด์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฑฐ์น˜๋ฉฐ ๋ณ€๊ฒฝ๋  ์—ฌ์ง€๊ฐ€ ์žˆ์Œ โ†’ ๋ถˆ๋ณ€ ๊ฐœ๋… ์ ์šฉ -- [ ] ์ˆซ์ž ๊ฐ’๋“ค์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก `final` ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. -- [ ] ์ˆซ์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ์ „๋‹ฌํ•  ๋–„, ๋ถˆ๋ณ€ ๋ฆฌ์ŠคํŠธ๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋„๋ก List.of ๋˜๋Š” unmodifiableList๋ฅผ ์ ์šฉํ•œ๋‹ค. +- [x] ์ˆซ์ž ๊ฐ’๋“ค์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก `final` ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- [x] ์ˆซ์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ์ „๋‹ฌํ•  ๋–„, ๋ถˆ๋ณ€ ๋ฆฌ์ŠคํŠธ๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋„๋ก List.of ๋˜๋Š” unmodifiableList๋ฅผ ์ ์šฉํ•œ๋‹ค. ### 5๏ธโƒฃ ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ์— ์‚ฐ์žฌ๋˜์–ด ์žˆ์Œ โ†’ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌ diff --git a/src/main/java/calculator/model/InputFilter.java b/src/main/java/calculator/model/InputFilter.java index fc00bd270c..d2d1e05e7d 100644 --- a/src/main/java/calculator/model/InputFilter.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.regex.Pattern; @@ -46,6 +47,6 @@ private List saveNumbers(String[] splitParts) { numbers.add(Integer.parseInt(part)); }); - return numbers; + return Collections.unmodifiableList(numbers); } } From 4c5fc552754e428b1ccd74417157508ab8b0eaa1 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:42:34 +0900 Subject: [PATCH 102/116] =?UTF-8?q?refactor:=20=EC=BB=A4=EC=8A=A4=ED=85=80?= =?UTF-8?q?=20=EA=B5=AC=EB=B6=84=EC=9E=90=20=EC=9C=84=EC=B9=98=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=97=90=EB=9F=AC=20=EB=A9=94=EC=8B=9C=EC=A7=80?= =?UTF-8?q?=EB=A5=BC=20=EC=83=81=EC=88=98=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/exception/ErrorMessage.java | 3 ++- src/main/java/calculator/validation/InputValidator.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/exception/ErrorMessage.java b/src/main/java/calculator/exception/ErrorMessage.java index bd746098f0..e9e643328d 100644 --- a/src/main/java/calculator/exception/ErrorMessage.java +++ b/src/main/java/calculator/exception/ErrorMessage.java @@ -16,7 +16,8 @@ public enum ErrorMessage { // custom delimiter pattern INVALID_START_PATTERN("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ์‹œ์ž‘ ํŒจํ„ด์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค."), - INVALID_END_PATTERN("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ์ข…๋ฃŒ ํŒจํ„ด์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค."); + INVALID_END_PATTERN("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ์ข…๋ฃŒ ํŒจํ„ด์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค."), + INVALID_PATTERN_POSITION("์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์˜ ์œ„์น˜๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค."); private final String message; diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 31ffde5238..206f3bd005 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -63,7 +63,7 @@ public static void validateEndPattern(int endIndex) { public static void validatePatternPosition(int start, int end) { if (start >= end) { - throw new IllegalArgumentException("๊ตฌ๋ถ„์ž์˜ ์‹œ์ž‘ ํŒจํ„ด ๋ฐ ์ข…๋ฃŒ ํŒจํ„ด ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค."); + throw new IllegalArgumentException(INVALID_PATTERN_POSITION.getMessage()); } } } From ecd9f37c17e0b6ed140fda8c4e997ec23d7a07bf Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:47:40 +0900 Subject: [PATCH 103/116] =?UTF-8?q?feat:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=EC=9D=B4=EC=9A=A9=ED=95=9C=20=EC=A0=95=EA=B7=9C?= =?UTF-8?q?=EC=8B=9D=20=EC=83=9D=EC=84=B1=20=EA=B4=80=EB=A0=A8=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=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/delimiter/Delimiters.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/calculator/model/delimiter/Delimiters.java b/src/main/java/calculator/model/delimiter/Delimiters.java index 29efe2deca..0fbac28756 100644 --- a/src/main/java/calculator/model/delimiter/Delimiters.java +++ b/src/main/java/calculator/model/delimiter/Delimiters.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; +import java.util.regex.Pattern; import calculator.validation.InputValidator; @@ -24,6 +25,12 @@ public boolean isRegisteredDelimiter(String delimiter) { return delimiters.contains(delimiter); } + public String[] getRegex() { + return delimiters.stream() + .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ + .toArray(String[]::new); + } + private void initDefaultDelimiters() { Arrays.stream(DefaultDelimiter.values()) .forEach(delimiter -> this.delimiters.add(delimiter.getDelimiter())); From 9641c2843bcdaa86b70f2f99b945fdfda8697611 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:47:50 +0900 Subject: [PATCH 104/116] =?UTF-8?q?refactor:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=EC=9D=B4=EC=9A=A9=ED=95=9C=20=EC=A0=95=EA=B7=9C?= =?UTF-8?q?=EC=8B=9D=20=EC=83=9D=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/InputFilter.java | 7 +------ src/main/java/calculator/validation/InputValidator.java | 7 +------ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/src/main/java/calculator/model/InputFilter.java b/src/main/java/calculator/model/InputFilter.java index d2d1e05e7d..eb8bf49af6 100644 --- a/src/main/java/calculator/model/InputFilter.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -26,12 +26,7 @@ public List extractNumbers(String processedInput, Delimiters delimiters // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ private String[] splitInput(String processedInput, Delimiters delimiters) { InputValidator.validateInvalidDelimiter(processedInput, delimiters); - - String regex = String.join("|", - delimiters.getDelimiters().stream() - .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ (ํŠน์ˆ˜ ๋ฌธ์ž์˜ ๊ฒฝ์šฐ ํ˜ผ๋™์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Œ) - .toArray(String[]::new) - ); + String regex = String.join("|", delimiters.getRegex()); return processedInput.split(regex); } diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 206f3bd005..c044d9af80 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -2,8 +2,6 @@ import static calculator.exception.ErrorMessage.*; -import java.util.regex.Pattern; - import calculator.model.delimiter.Delimiters; public class InputValidator { @@ -11,10 +9,7 @@ private InputValidator() { } public static void validateInvalidDelimiter(String input, Delimiters delimiters) { - String regex = "[\\d" + String.join("", delimiters.getDelimiters().stream() - .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ - .toArray(String[]::new)) + "]*"; - String filteredInput = input.replaceAll(regex, ""); + String regex = "[\\d" + String.join("", delimiters.getRegex()) + "]*"; if (!input.matches(regex)) { throw new IllegalArgumentException(INVALID_DELIMITER.getMessage()); From aaed52e021ad0298b05c6297d3362033e81e1340 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 20:57:42 +0900 Subject: [PATCH 105/116] =?UTF-8?q?refactor:=20=EA=B3=84=EC=82=B0=EA=B8=B0?= =?UTF-8?q?=EC=97=90=20=EB=93=A4=EC=96=B4=EA=B0=88=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=ED=86=B5=ED=95=A9=EC=A0=81=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=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 --- .../calculator/validation/InputValidator.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index c044d9af80..0684b40598 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -16,23 +16,28 @@ public static void validateInvalidDelimiter(String input, Delimiters delimiters) } } - public static void validateDigit(String input) { - if (!isDigit(input)) { - throw new IllegalArgumentException(NON_INTEGER_VALUE.getMessage()); - } - } - public static void validateNonDigit(String input) { if (isDigit(input)) { throw new IllegalArgumentException(INVALID_CUSTOM_DELIMITER.getMessage()); } } + public static void validateCalculatorNumber(String input) { + validateDigit(input); + validateNumberPositive(input); + } + + private static void validateDigit(String input) { + if (!isDigit(input)) { + throw new IllegalArgumentException(NON_INTEGER_VALUE.getMessage()); + } + } + private static boolean isDigit(String input) { return input.chars().allMatch(Character::isDigit); } - public static void validateNumberPositive(String input) { + private static void validateNumberPositive(String input) { if (Integer.parseInt(input) <= 0) { throw new IllegalArgumentException(NON_POSITIVE_NUMBER.getMessage()); } From 6eae5544b011e99817edd311a58dddf1e3ec2924 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 21:07:37 +0900 Subject: [PATCH 106/116] =?UTF-8?q?refactor:=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EC=B6=9C=20=EB=A1=9C=EC=A7=81=20=EB=B0=8F=20=EC=84=B8?= =?UTF-8?q?=EB=B6=80=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=EC=9D=84=20?= =?UTF-8?q?=EB=B3=B4=EB=8B=A4=20=EC=A7=81=EA=B4=80=EC=A0=81=EC=9C=BC?= =?UTF-8?q?=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 --- .../java/calculator/model/InputFilter.java | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/main/java/calculator/model/InputFilter.java b/src/main/java/calculator/model/InputFilter.java index eb8bf49af6..7a81cc4210 100644 --- a/src/main/java/calculator/model/InputFilter.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -1,10 +1,8 @@ package calculator.model; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.regex.Pattern; import calculator.model.delimiter.Delimiters; import calculator.validation.InputValidator; @@ -19,8 +17,9 @@ public List extractNumbers(String processedInput, Delimiters delimiters return List.of(); } String[] splitParts = splitInput(processedInput, delimiters); + validateEachPart(splitParts); - return saveNumbers(splitParts); + return Collections.unmodifiableList(getExtractedNumbers(splitParts)); } // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ @@ -31,17 +30,15 @@ private String[] splitInput(String processedInput, Delimiters delimiters) { return processedInput.split(regex); } - // ๋ถ„๋ฆฌ๋œ ๊ฐ ๋ถ€๋ถ„์—์„œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ - private List saveNumbers(String[] splitParts) { - List numbers = new ArrayList<>(); + private static void validateEachPart(String[] splitParts) { Arrays.stream(splitParts) .map(String::trim) - .forEach(part -> { - InputValidator.validateDigit(part); - InputValidator.validateNumberPositive(part); - numbers.add(Integer.parseInt(part)); - }); + .forEach(InputValidator::validateCalculatorNumber); + } - return Collections.unmodifiableList(numbers); + private static List getExtractedNumbers(String[] splitParts) { + return Arrays.stream(splitParts) + .map(Integer::valueOf) + .toList(); } } From 01c03be24245aa3079fe8ad68c6e1ea7b580c70d Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 21:08:40 +0900 Subject: [PATCH 107/116] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=83=81=EC=9D=98=20=EC=A3=BC=EC=84=9D=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/model/InputFilter.java | 5 ----- src/main/java/calculator/model/delimiter/Delimiters.java | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/calculator/model/InputFilter.java b/src/main/java/calculator/model/InputFilter.java index 7a81cc4210..97c2ce7cb1 100644 --- a/src/main/java/calculator/model/InputFilter.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -8,10 +8,6 @@ import calculator.validation.InputValidator; public class InputFilter { - /** - * ํ•ต์‹ฌ ๋กœ์ง - */ - // 1์ฐจ ๊ฐ€๊ณต๋œ ์ž…๋ ฅ๊ฐ’์—์„œ ์ˆซ์ž๋ฅผ ์ถ”์ถœ public List extractNumbers(String processedInput, Delimiters delimiters) { if (processedInput.isBlank()) { return List.of(); @@ -22,7 +18,6 @@ public List extractNumbers(String processedInput, Delimiters delimiters return Collections.unmodifiableList(getExtractedNumbers(splitParts)); } - // ๊ตฌ๋ถ„์ž๋“ค์„ ์ด์šฉํ•ด ์ •๊ทœ์‹์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๋ถ„๋ฆฌ private String[] splitInput(String processedInput, Delimiters delimiters) { InputValidator.validateInvalidDelimiter(processedInput, delimiters); String regex = String.join("|", delimiters.getRegex()); diff --git a/src/main/java/calculator/model/delimiter/Delimiters.java b/src/main/java/calculator/model/delimiter/Delimiters.java index 0fbac28756..47936b849e 100644 --- a/src/main/java/calculator/model/delimiter/Delimiters.java +++ b/src/main/java/calculator/model/delimiter/Delimiters.java @@ -27,7 +27,7 @@ public boolean isRegisteredDelimiter(String delimiter) { public String[] getRegex() { return delimiters.stream() - .map(Pattern::quote) // ๊ตฌ๋ถ„์ž๋ฅผ ์ •๊ทœ์‹์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ + .map(Pattern::quote) .toArray(String[]::new); } From b675b3f251b4f2c2cd15552443f082c515c21338 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 21:09:15 +0900 Subject: [PATCH 108/116] =?UTF-8?q?docs:=20=EB=AF=B8=EC=B2=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=ED=95=98=EC=A7=80=20=EB=AA=BB=ED=95=9C=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20=EC=99=84=EB=A3=8C=20=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b60cf37fca..52e053217c 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ ### 3๏ธโƒฃ ๋งค์ง ๋„˜๋ฒ„ ๋ฐ ๋ฆฌํ„ฐ๋Ÿด ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์ถ”ํ›„ ์œ ์ง€๋ณด์ˆ˜์—์„œ์˜ ์–ด๋ ค์›€ ์˜ˆ์ƒ โ†’ ํด๋ž˜์Šค ๋ฐ ์ƒ์ˆ˜๋กœ์„œ ๊ด€๋ฆฌ - [x] ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ Enum์„ ํ†ตํ•ด ์ƒ์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. -- [ ] ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ Enum์„ ํ†ตํ•ด ์ƒ์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. +- [x] ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์„ Enum์„ ํ†ตํ•ด ์ƒ์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. ### 4๏ธโƒฃ ์ˆซ์ž ๊ฐ’๋“ค์ด ๊ฐ ๊ฐ์ฒด์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฑฐ์น˜๋ฉฐ ๋ณ€๊ฒฝ๋  ์—ฌ์ง€๊ฐ€ ์žˆ์Œ โ†’ ๋ถˆ๋ณ€ ๊ฐœ๋… ์ ์šฉ From 73602e90af9fd05c81c25c49879f3ec0d9dd91da Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 21:09:28 +0900 Subject: [PATCH 109/116] =?UTF-8?q?docs:=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=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 | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 52e053217c..9a3fe4af43 100644 --- a/README.md +++ b/README.md @@ -43,10 +43,6 @@ - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [x] ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด("")์ผ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - [x] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. -- [ ] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์ด ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ("."์„ ํฌํ•จ)์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - - [ ] ๊ธฐ์กด ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ (".")์ด ์žˆ์„ ๊ฒฝ์šฐ, ์†Œ์ˆ˜ ์ž…๋ ฅ์ด ๋ถˆ๊ฐ€ํ•˜๋„๋ก ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - - [ ] ๊ธฐ์กด ๊ตฌ๋ถ„์ž ๋ชฉ๋ก์— ์ (".")์ด ์—†์„ ๊ฒฝ์šฐ, ์†Œ์ˆ˜ ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. - - [ ] ๊ตฌ๋ถ„์ž์— ์˜ํ•ด ๋ถ„๋ฆฌ๋œ ๊ฐ’์— ์ (".")์ด ํฌํ•จ๋˜์–ด ์žˆ๋”๋ผ๋„ ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. ### 2๏ธโƒฃ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ๊ณผ ํŒŒ์‹ฑ ๋กœ์ง์ด ํ˜ผ์šฉ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ โ†’ ํ™•์‹คํ•˜๊ฒŒ ์ฑ…์ž„์„ ๋ถ„๋ฆฌ From f0250d27d93fecafec6a46c8bdf36a971284b977 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 21:22:01 +0900 Subject: [PATCH 110/116] =?UTF-8?q?refactor:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95=20=EA=B4=80=EB=A0=A8=20Enum=20=EB=94=94?= =?UTF-8?q?=EB=A0=89=ED=86=A0=EB=A6=AC=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{model/delimiter => config}/CustomDelimiterPattern.java | 2 +- .../{model/delimiter => config}/DefaultDelimiter.java | 2 +- .../calculator/model/delimiter/CustomDelimiterProcessor.java | 2 +- src/main/java/calculator/model/delimiter/Delimiters.java | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) rename src/main/java/calculator/{model/delimiter => config}/CustomDelimiterPattern.java (88%) rename src/main/java/calculator/{model/delimiter => config}/DefaultDelimiter.java (86%) diff --git a/src/main/java/calculator/model/delimiter/CustomDelimiterPattern.java b/src/main/java/calculator/config/CustomDelimiterPattern.java similarity index 88% rename from src/main/java/calculator/model/delimiter/CustomDelimiterPattern.java rename to src/main/java/calculator/config/CustomDelimiterPattern.java index b15d29c171..7372cb51fd 100644 --- a/src/main/java/calculator/model/delimiter/CustomDelimiterPattern.java +++ b/src/main/java/calculator/config/CustomDelimiterPattern.java @@ -1,4 +1,4 @@ -package calculator.model.delimiter; +package calculator.config; public enum CustomDelimiterPattern { START("//"), diff --git a/src/main/java/calculator/model/delimiter/DefaultDelimiter.java b/src/main/java/calculator/config/DefaultDelimiter.java similarity index 86% rename from src/main/java/calculator/model/delimiter/DefaultDelimiter.java rename to src/main/java/calculator/config/DefaultDelimiter.java index f9bf69eec8..89db69ea98 100644 --- a/src/main/java/calculator/model/delimiter/DefaultDelimiter.java +++ b/src/main/java/calculator/config/DefaultDelimiter.java @@ -1,4 +1,4 @@ -package calculator.model.delimiter; +package calculator.config; public enum DefaultDelimiter { COMMA(","), diff --git a/src/main/java/calculator/model/delimiter/CustomDelimiterProcessor.java b/src/main/java/calculator/model/delimiter/CustomDelimiterProcessor.java index cda8a1f9b9..8aa7812f97 100644 --- a/src/main/java/calculator/model/delimiter/CustomDelimiterProcessor.java +++ b/src/main/java/calculator/model/delimiter/CustomDelimiterProcessor.java @@ -1,6 +1,6 @@ package calculator.model.delimiter; -import static calculator.model.delimiter.CustomDelimiterPattern.*; +import static calculator.config.CustomDelimiterPattern.*; import java.util.Optional; diff --git a/src/main/java/calculator/model/delimiter/Delimiters.java b/src/main/java/calculator/model/delimiter/Delimiters.java index 47936b849e..f1c549ae0b 100644 --- a/src/main/java/calculator/model/delimiter/Delimiters.java +++ b/src/main/java/calculator/model/delimiter/Delimiters.java @@ -6,6 +6,7 @@ import java.util.Set; import java.util.regex.Pattern; +import calculator.config.DefaultDelimiter; import calculator.validation.InputValidator; public class Delimiters { From 377f6bffc15fcbfe4ee8c94e3c17f926beb3cbb8 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 21:23:15 +0900 Subject: [PATCH 111/116] =?UTF-8?q?refactor:=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=83=81?= =?UTF-8?q?=EC=88=98=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/exception/ErrorMessage.java | 1 - src/main/java/calculator/view/OutputView.java | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/calculator/exception/ErrorMessage.java b/src/main/java/calculator/exception/ErrorMessage.java index e9e643328d..8ff3369721 100644 --- a/src/main/java/calculator/exception/ErrorMessage.java +++ b/src/main/java/calculator/exception/ErrorMessage.java @@ -1,7 +1,6 @@ package calculator.exception; public enum ErrorMessage { - // prefix ERROR_PREFIX("[ERROR] "), diff --git a/src/main/java/calculator/view/OutputView.java b/src/main/java/calculator/view/OutputView.java index f667551b25..90eebed053 100644 --- a/src/main/java/calculator/view/OutputView.java +++ b/src/main/java/calculator/view/OutputView.java @@ -1,11 +1,13 @@ package calculator.view; +import static calculator.view.PrintMessage.*; + public class OutputView { public void printReadCommand() { - System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); + System.out.println(READ_COMMAND.getMessage()); } public void printResult(int result) { - System.out.println("๊ฒฐ๊ณผ : " + result); + System.out.printf((RESULT.getMessage()), result); } } From 1e49ae720bf308baa4e2c09f555efaaeee12dad0 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 21:23:34 +0900 Subject: [PATCH 112/116] =?UTF-8?q?feat:=20=EC=B6=9C=EB=A0=A5=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EA=B4=80=EB=A0=A8=20Enum=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/view/PrintMessage.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/calculator/view/PrintMessage.java diff --git a/src/main/java/calculator/view/PrintMessage.java b/src/main/java/calculator/view/PrintMessage.java new file mode 100644 index 0000000000..46fc82ec10 --- /dev/null +++ b/src/main/java/calculator/view/PrintMessage.java @@ -0,0 +1,16 @@ +package calculator.view; + +public enum PrintMessage { + READ_COMMAND("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."), + RESULT("๊ฒฐ๊ณผ : %d"); + + private final String message; + + PrintMessage(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } +} From 9d857c0f9d60f62631e71249d389bdff29217ea7 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 22:27:54 +0900 Subject: [PATCH 113/116] =?UTF-8?q?refactor:=20=EC=A0=95=EC=88=98=ED=98=95?= =?UTF-8?q?=20=EB=B3=80=ED=99=98=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=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/InputFilter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/model/InputFilter.java b/src/main/java/calculator/model/InputFilter.java index 97c2ce7cb1..b833cd7687 100644 --- a/src/main/java/calculator/model/InputFilter.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -15,7 +15,7 @@ public List extractNumbers(String processedInput, Delimiters delimiters String[] splitParts = splitInput(processedInput, delimiters); validateEachPart(splitParts); - return Collections.unmodifiableList(getExtractedNumbers(splitParts)); + return Collections.unmodifiableList(convertToInteger(splitParts)); } private String[] splitInput(String processedInput, Delimiters delimiters) { @@ -31,7 +31,7 @@ private static void validateEachPart(String[] splitParts) { .forEach(InputValidator::validateCalculatorNumber); } - private static List getExtractedNumbers(String[] splitParts) { + private static List convertToInteger(String[] splitParts) { return Arrays.stream(splitParts) .map(Integer::valueOf) .toList(); From 638e35e939662c9b51978dd673bbe3b06e8b68cd Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 22:31:52 +0900 Subject: [PATCH 114/116] =?UTF-8?q?refactor:=20=EC=A0=95=EC=88=98=ED=98=95?= =?UTF-8?q?=20=EB=B3=80=ED=99=98=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=20?= =?UTF-8?q?=EC=9E=AC=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/InputFilter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/model/InputFilter.java b/src/main/java/calculator/model/InputFilter.java index b833cd7687..11a10de70f 100644 --- a/src/main/java/calculator/model/InputFilter.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -15,7 +15,7 @@ public List extractNumbers(String processedInput, Delimiters delimiters String[] splitParts = splitInput(processedInput, delimiters); validateEachPart(splitParts); - return Collections.unmodifiableList(convertToInteger(splitParts)); + return Collections.unmodifiableList(mapToInteger(splitParts)); } private String[] splitInput(String processedInput, Delimiters delimiters) { @@ -31,7 +31,7 @@ private static void validateEachPart(String[] splitParts) { .forEach(InputValidator::validateCalculatorNumber); } - private static List convertToInteger(String[] splitParts) { + private static List mapToInteger(String[] splitParts) { return Arrays.stream(splitParts) .map(Integer::valueOf) .toList(); From f89a2a09097fcb494b5bb2288327ec1f813419c9 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Mon, 21 Oct 2024 22:33:43 +0900 Subject: [PATCH 115/116] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EC=9E=85=EB=A0=A5=EA=B0=92=EC=9D=B4=20=EB=B9=88=20=EC=B9=B8?= =?UTF-8?q?=EC=9D=BC=20=EA=B2=BD=EC=9A=B0=20=EC=88=AB=EC=9E=90=20=EC=B6=94?= =?UTF-8?q?=EC=B6=9C=20=EC=8B=9C=20=EB=AA=85=EC=8B=9C=EC=A0=81=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=200=EC=9D=B4=20=EB=8B=B4=EA=B8=B4=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=A5=BC=20=EB=B0=98=ED=99=98=ED=95=98?= =?UTF-8?q?=EB=8F=84=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 --- src/main/java/calculator/model/InputFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/InputFilter.java b/src/main/java/calculator/model/InputFilter.java index 11a10de70f..50aea963fb 100644 --- a/src/main/java/calculator/model/InputFilter.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -10,7 +10,7 @@ public class InputFilter { public List extractNumbers(String processedInput, Delimiters delimiters) { if (processedInput.isBlank()) { - return List.of(); + return List.of(0); } String[] splitParts = splitInput(processedInput, delimiters); validateEachPart(splitParts); From d727f4092e5668cc06e19fdb89d23f185d8fd623 Mon Sep 17 00:00:00 2001 From: jae woo Jung Date: Tue, 22 Oct 2024 03:19:01 +0900 Subject: [PATCH 116/116] =?UTF-8?q?refactor:=20=EA=B3=84=EC=82=B0=EA=B8=B0?= =?UTF-8?q?=EC=97=90=20=EB=93=A4=EC=96=B4=EA=B0=80=EB=8A=94=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=EB=A5=BC=20List=EA=B0=80=20=EC=95=84=EB=8B=8C=20Set?= =?UTF-8?q?=20=ED=83=80=EC=9E=85=EC=9C=BC=EB=A1=9C=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=ED=95=98=EB=8F=84=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 --- .../controller/CalculatorController.java | 7 ++++--- src/main/java/calculator/model/Calculator.java | 4 ++-- src/main/java/calculator/model/InputFilter.java | 14 +++++++------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 38ab27eb35..0d23b13d89 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -2,6 +2,7 @@ import java.util.List; import java.util.Optional; +import java.util.Set; import calculator.model.Calculator; import calculator.model.delimiter.CustomDelimiterProcessor; @@ -38,7 +39,7 @@ public void run() { String input = readInput(); String processedInput = processCustomDelimiter(input); - List numbers = extractNumbers(processedInput); + Set numbers = extractNumbers(processedInput); int result = sum(numbers); printResult(result); @@ -59,11 +60,11 @@ private String processCustomDelimiter(String input) { return customDelimiterProcessor.removeCustomDelimiterPattern(input); } - private List extractNumbers(String processedInput) { + private Set extractNumbers(String processedInput) { return inputFilter.extractNumbers(processedInput, delimiters); } - private int sum(List numbers) { + private int sum(Set numbers) { return calculator.sum(numbers); } diff --git a/src/main/java/calculator/model/Calculator.java b/src/main/java/calculator/model/Calculator.java index 4dd5fab5aa..79c3ef6594 100644 --- a/src/main/java/calculator/model/Calculator.java +++ b/src/main/java/calculator/model/Calculator.java @@ -1,9 +1,9 @@ package calculator.model; -import java.util.List; +import java.util.Set; public class Calculator { - public int sum(List numbers) { + public int sum(Set numbers) { return numbers.stream() .mapToInt(Integer::intValue) .sum(); diff --git a/src/main/java/calculator/model/InputFilter.java b/src/main/java/calculator/model/InputFilter.java index 50aea963fb..9a0818ed04 100644 --- a/src/main/java/calculator/model/InputFilter.java +++ b/src/main/java/calculator/model/InputFilter.java @@ -1,21 +1,21 @@ package calculator.model; import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import calculator.model.delimiter.Delimiters; import calculator.validation.InputValidator; public class InputFilter { - public List extractNumbers(String processedInput, Delimiters delimiters) { + public Set extractNumbers(String processedInput, Delimiters delimiters) { if (processedInput.isBlank()) { - return List.of(0); + return Set.of(0); } String[] splitParts = splitInput(processedInput, delimiters); validateEachPart(splitParts); - return Collections.unmodifiableList(mapToInteger(splitParts)); + return mapToIntegerSet(splitParts); } private String[] splitInput(String processedInput, Delimiters delimiters) { @@ -31,9 +31,9 @@ private static void validateEachPart(String[] splitParts) { .forEach(InputValidator::validateCalculatorNumber); } - private static List mapToInteger(String[] splitParts) { + private static Set mapToIntegerSet(String[] splitParts) { return Arrays.stream(splitParts) .map(Integer::valueOf) - .toList(); + .collect(Collectors.toUnmodifiableSet()); } }