From b3aaca7c6b25b1686180440853056e681983d74e Mon Sep 17 00:00:00 2001 From: Min Sang Kim <202014889@kyonggi.ac.kr> Date: Wed, 16 Oct 2024 19:53:32 +0900 Subject: [PATCH 01/74] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bd90ef0247..c2584631bc 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -# java-calculator-precourse \ No newline at end of file +# java-calculator-precourse + +About Woowa Tech Course 7th Pre-Course - Week 1 Assignment From d363ebaec80a8749645ab68cc9bd9981e7535aad Mon Sep 17 00:00:00 2001 From: Min Sang Kim <202014889@kyonggi.ac.kr> Date: Sat, 19 Oct 2024 19:19:02 +0900 Subject: [PATCH 02/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c2584631bc..1ababa8634 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # java-calculator-precourse -About Woowa Tech Course 7th Pre-Course - Week 1 Assignment +About 1st pre-course project From 1569792517e76efaf491344a95eb4bb1b71d1b2a Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sat, 19 Oct 2024 20:17:57 +0900 Subject: [PATCH 03/74] =?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=A0=95?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 119 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ababa8634..07e08828ae 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,121 @@ # java-calculator-precourse -About 1st pre-course project +## ๐ŸŽฏ ํ•™์Šต ๋ชฉํ‘œ + +- Git, GitHub, IDE ๋“ฑ ์‹ค์ œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ™˜๊ฒฝ์— ์ต์ˆ™ํ•ด์ง„๋‹ค. +- ๊ต์œก ๋ถ„์•ผ์— ๋งž๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. + +--- + +## ๐Ÿ› ๏ธ ํ”„๋ฆฌ์ฝ”์Šค ์ง„ํ–‰ ๋ฐฉ์‹ + +### ๐Ÿ” ์ง„ํ–‰ ๋ฐฉ์‹ +- ๋ฏธ์…˜์€ **๊ณผ์ œ ์ง„ํ–‰ ์š”๊ตฌ ์‚ฌํ•ญ**, **๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ**, **ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ** ์„ธ ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. +- ์„ธ ๊ฐœ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ๋‹ค. ํŠนํžˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ณ , ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ปค๋ฐ‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค. +- **๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ์— ๊ธฐ์žฌ๋˜์ง€ ์•Š์€ ๋‚ด์šฉ**์€ ์Šค์Šค๋กœ ํŒ๋‹จํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค. +- ๋งค์ฃผ ์ง„ํ–‰ํ•  ๋ฏธ์…˜์€ **ํ™”์š”์ผ ์˜คํ›„ 3์‹œ**๋ถ€ํ„ฐ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, **๋‹ค์Œ ์ฃผ ์›”์š”์ผ๊นŒ์ง€** ๊ตฌํ˜„์„ ์™„๋ฃŒํ•˜์—ฌ ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค. ์ œ์ถœ์€ **์ผ์š”์ผ ์˜คํ›„ 3์‹œ**๋ถ€ํ„ฐ ๊ฐ€๋Šฅํ•˜๋‹ค. + - ์ •ํ•ด์ง„ ์‹œ๊ฐ„์„ ์ง€ํ‚ค์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฏธ์…˜์„ ์ œ์ถœํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. + - ์ข…๋ฃŒ ์ผ์‹œ ์ดํ›„์—๋Š” ์ถ”๊ฐ€ ๋ฌด์ œ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. + +--- + +## ๐Ÿ“ฎ ๋ฏธ์…˜ ์ œ์ถœ ๋ฐฉ๋ฒ• + +- ๋ฏธ์…˜ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ํ›„ **GitHub**์„ ํ†ตํ•ด ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค. + - GitHub๋ฅผ ํ™œ์šฉํ•œ ์ œ์ถœ ๋ฐฉ๋ฒ•์€ [ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ ์ œ์ถœ](https://github.com/woowacourse/woowacourse-docs/tree/main/precourse) ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ์ œ์ถœํ•œ๋‹ค. + - GitHub์— ๋ฏธ์…˜์„ ์ œ์ถœํ•œ ํ›„ [์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค ์ง€์› ํ”Œ๋žซํผ](https://apply.techcourse.co.kr/)์— PR ๋งํฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ตœ์ข… ์ œ์ถœํ•œ๋‹ค. + - ์ž์„ธํ•œ ๋‚ด์šฉ์€ [์ œ์ถœ ๊ฐ€์ด๋“œ](https://github.com/woowacourse/woowacourse-docs/tree/main/precourse#%EC%A0%9C%EC%B6%9C-%EA%B0%80%EC%9D%B4%EB%93%9C)๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค. +- ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๋Š๋‚€ ์ , ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ•œ ๋ถ€๋ถ„ ๋“ฑ ์ž์œ ๋กญ๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค. + +--- + +## โœ… ๊ณผ์ œ ์ œ์ถœ ์ „ ์ฒดํฌ ๋ฆฌ์ŠคํŠธ + +- ๊ธฐ๋Šฅ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋”๋ผ๋„ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋ช…์‹œ๋œ **์ถœ๋ ฅ ํ˜•์‹**์„ ๋”ฐ๋ฅด์ง€ ์•Š์œผ๋ฉด **0์ **์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. +- ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ํ›„ ์—ฌ๋Ÿฌ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ **๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š”์ง€** ํ™•์ธํ•œ๋‹ค. +- **ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์ ์ˆ˜๊ฐ€ 0์ **์ด ๋˜๋ฏ€๋กœ ์ œ์ถœํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•œ๋‹ค. + +--- + +## ๐Ÿงช ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ฐ€์ด๋“œ + +- **ํ„ฐ๋ฏธ๋„**์—์„œ `java -version`์„ ์‹คํ–‰ํ•˜์—ฌ Java ๋ฒ„์ „์ด **21 ์ด์ƒ**์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + Eclipse ๋˜๋Š” IntelliJ IDEA์™€ ๊ฐ™์€ IDE์—์„œ Java 21๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. + +- ํ„ฐ๋ฏธ๋„์—์„œ **Mac ๋˜๋Š” Linux ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ**: + ```bash + ./gradlew clean test + ``` + +- **Windows ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ**: + ```bash + gradlew.bat clean test + ``` + + ์œ„ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค: + ``` + BUILD SUCCESSFUL in 0s + ``` + +--- + +## ๐Ÿš€ ๊ณผ์ œ ์ง„ํ–‰ ์š”๊ตฌ ์‚ฌํ•ญ + +- ๋ฏธ์…˜์€ [๋ฌธ์ž์—ด ๋ง์…ˆ ๊ณ„์‚ฐ๊ธฐ](https://github.com/woowacourse-precourse/java-calculator-7) ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•˜๊ณ  ํด๋ก ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค. +- ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „ **README.md**์— ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ •๋ฆฌํ•ด ์ถ”๊ฐ€ํ•œ๋‹ค. +- Git์˜ ์ปค๋ฐ‹ ๋‹จ์œ„๋Š” ๊ฐ ๋‹จ๊ณ„์—์„œ **README.md**์— ์ •๋ฆฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก ๋‹จ์œ„๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. + - [AngularJS Git Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153)๋ฅผ ์ฐธ๊ณ ํ•ด ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. +- ์ž์„ธํ•œ ๊ณผ์ œ ์ง„ํ–‰ ๋ฐฉ๋ฒ•์€ ํ”„๋ฆฌ์ฝ”์Šค ์ง„ํ–‰ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค. + +--- + +## โœจ ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ + +- ์ž…๋ ฅํ•œ **๋ฌธ์ž์—ด์—์„œ ์ˆซ์ž๋ฅผ ์ถ”์ถœ**ํ•˜์—ฌ ๋”ํ•˜๋Š” ๊ณ„์‚ฐ๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. +- ์‰ผํ‘œ(,) ๋˜๋Š” ์ฝœ๋ก (:)์„ ๊ตฌ๋ถ„์ž๋กœ ๊ฐ€์ง€๋Š” ๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฐ ์ˆซ์ž์˜ ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - ์˜ˆ: `""` => 0, `"1,2,3"` => 6, `"1:2:3"` => 6 +- ์•ž์— ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž(์‰ผํ‘œ, ์ฝœ๋ก ) ์™ธ์— **์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž**๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. + ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋Š” ๋ฌธ์ž์—ด ์•ž๋ถ€๋ถ„์˜ `"//"`์™€ `"\n"` ์‚ฌ์ด์— ์œ„์น˜ํ•˜๋Š” ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„์ž๋กœ ์‚ฌ์šฉํ•œ๋‹ค. + - ์˜ˆ: `"//;\n1;2;3"`๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•  ๊ฒฝ์šฐ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋Š” ์„ธ๋ฏธ์ฝœ๋ก (;)์ด๋ฉฐ, ๊ฒฐ๊ณผ ๊ฐ’์€ 6์ด ๋ฐ˜ํ™˜๋˜์–ด์•ผ ํ•œ๋‹ค. +- ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ **`IllegalArgumentException`**์„ ๋ฐœ์ƒ์‹œํ‚จ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•œ๋‹ค. + +--- + +## ๐Ÿ“ฅ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ์š”๊ตฌ ์‚ฌํ•ญ + +### ๐Ÿ“Œ ์ž…๋ ฅ +- ๊ตฌ๋ถ„์ž์™€ ์–‘์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด + +### ๐Ÿ“Œ ์ถœ๋ ฅ +- ๋ง์…ˆ ๊ฒฐ๊ณผ +```text +๊ฒฐ๊ณผ: 6 +``` + +### ๐Ÿ“Œ ์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ +```text +๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”. +1,2:3 +๊ฒฐ๊ณผ: 6 +``` + +--- + +## ๐Ÿ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ + +- **JDK 21** ๋ฒ„์ „์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. +- ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์˜ ์‹œ์ž‘์ ์€ `Application`์˜ **`main()`** ์ด๋‹ค. +- **`build.gradle`** ํŒŒ์ผ์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, **์ œ๊ณต๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์™ธ์˜ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.** +- ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ `System.exit()`๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. +- ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ์—์„œ ๋‹ฌ๋ฆฌ ๋ช…์‹œํ•˜์ง€ ์•Š์€ ํ•œ **ํŒŒ์ผ๋ช…๊ณผ ํŒจํ‚ค์ง€๋ช…**์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์ด๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค. +- ์ž๋ฐ” ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ์ง€ํ‚ค๋ฉด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค. + - ๊ธฐ๋ณธ์ ์œผ๋กœ [Java Style Guide](https://google.github.io/styleguide/javaguide.html)๋ฅผ ์›์น™์œผ๋กœ ํ•œ๋‹ค. + +--- + +## ๐Ÿ“š ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ + +- `camp.nextstep.edu.missionutils`์—์„œ ์ œ๊ณตํ•˜๋Š” `Console` API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. + - ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๊ฐ’์€ `camp.nextstep.edu.missionutils.Console`์˜ `readLine()` ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•œ๋‹ค. + +--- From 1c9f20820746127cc71b6e2b6ee5a15208eb8cb4 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 16:26:54 +0900 Subject: [PATCH 04/74] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=20View=20?= =?UTF-8?q?=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 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/calculator/view/InputView.java diff --git a/src/main/java/calculator/view/InputView.java b/src/main/java/calculator/view/InputView.java new file mode 100644 index 0000000000..b6281f6039 --- /dev/null +++ b/src/main/java/calculator/view/InputView.java @@ -0,0 +1,15 @@ +package calculator.view; + +import camp.nextstep.edu.missionutils.Console; + +public class InputView { + + public String read(){ + System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); + return Console.readLine(); + } + + public void close(){ + Console.close(); + } +} From 0868b6482b6fda2511aa9dc2a8f18aad097c04d6 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 16:27:04 +0900 Subject: [PATCH 05/74] =?UTF-8?q?feat:=20=EC=B6=9C=EB=A0=A5=20View=20?= =?UTF-8?q?=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 | 7 +++++++ 1 file changed, 7 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..af9b97bcc1 --- /dev/null +++ b/src/main/java/calculator/view/OutputView.java @@ -0,0 +1,7 @@ +package calculator.view; + +public class OutputView { + public void print(long result){ + System.out.println("๊ฒฐ๊ณผ : " + result); + } +} From 0248aa7c27849e47d2cbcc3ae07e58b1db4b0d79 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:04:00 +0900 Subject: [PATCH 06/74] =?UTF-8?q?feat=20:=20=EC=95=A0=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=85=98=20=EC=8B=9C=EC=9E=91=EC=A0=90=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 --- src/main/java/calculator/Application.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580fb40..05ff4cc2c3 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,9 @@ package calculator; +import calculator.controller.CalculatorController; + public class Application { public static void main(String[] args) { - // TODO: ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ + new CalculatorController().run(); } -} +} \ No newline at end of file From 7b61ae5ae7629f2f29cffa6bb6c77b10d8911384 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:23:19 +0900 Subject: [PATCH 07/74] =?UTF-8?q?feat:=20=EC=88=AB=EC=9E=90=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=ED=95=A9=EC=82=B0=20=EA=B8=B0=EB=8A=A5=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 --- .../java/calculator/model/Calculator.java | 21 +++++++++++++++++++ 1 file changed, 21 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..042e2aa45b --- /dev/null +++ b/src/main/java/calculator/model/Calculator.java @@ -0,0 +1,21 @@ +package calculator.model; + +import java.util.List; + +public class Calculator { + private final List numbers; + + // ์—ฌ๊ธฐ ๋‚˜์ค‘์— ์„œ๋น„์Šค ๋กœ์ง์œผ๋กœ ๋ถ„๋ฆฌ + public Calculator(List numbers) { + if (numbers == null || numbers.isEmpty()) { + throw new IllegalArgumentException("์ˆซ์ž ๋ชฉ๋ก์€ ๋น„์–ด ์žˆ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + this.numbers = numbers; + } + + public long sum() { + return numbers.stream() + .mapToLong(Long::longValue) + .sum(); + } +} From 483257119dfcff5d4b9f302ea399ea6129b194a9 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:26:58 +0900 Subject: [PATCH 08/74] =?UTF-8?q?feat:=20CustomException=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=BD=94=EB=93=9C=20=EC=B2=98=EB=A6=AC=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D=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/error/CustomException.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/java/calculator/error/CustomException.java diff --git a/src/main/java/calculator/error/CustomException.java b/src/main/java/calculator/error/CustomException.java new file mode 100644 index 0000000000..713f8f3426 --- /dev/null +++ b/src/main/java/calculator/error/CustomException.java @@ -0,0 +1,13 @@ +package calculator.error; + +public class CustomException extends IllegalArgumentException { + private String message; + + public CustomException(ErrorCode errorCode) { + super(errorCode.getMessage()); + } + + public static CustomException create(ErrorCode errorCode) { + return new CustomException(errorCode); + } +} \ No newline at end of file From fff28bd3123768a6ae902825150e9e015e474d2d Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:28:41 +0900 Subject: [PATCH 09/74] =?UTF-8?q?refactor:=20CalculatorController=20?= =?UTF-8?q?=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 --- .../controller/CalculatorController.java | 18 ++++++++++++++++++ 1 file changed, 18 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..6c35852ca6 --- /dev/null +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -0,0 +1,18 @@ +package calculator.controller; + +import calculator.service.CalculatorService; +import calculator.view.InputView; +import calculator.view.OutputView; + +public class CalculatorController { + + private final CalculatorService calculatorService = new CalculatorService(); + private final InputView inputView = new InputView(); + private final OutputView outputView = new OutputView(); + + public void run() { + String input = inputView.read(); // ์ž…๋ ฅ + long result = calculatorService.calculate(input); // ๊ณ„์‚ฐ + outputView.print(result); // ์ถœ๋ ฅ + } +} From 1df76c3c9575cac4eac25b7fc9ed0007c5f17383 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:29:11 +0900 Subject: [PATCH 10/74] =?UTF-8?q?feat:=20calculate=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B3=84=EC=82=B0=20=EB=A1=9C=EC=A7=81=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/service/CalculatorService.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/calculator/service/CalculatorService.java diff --git a/src/main/java/calculator/service/CalculatorService.java b/src/main/java/calculator/service/CalculatorService.java new file mode 100644 index 0000000000..06e5b61db6 --- /dev/null +++ b/src/main/java/calculator/service/CalculatorService.java @@ -0,0 +1,15 @@ +package calculator.service; + +import calculator.model.Extractor; +import calculator.model.Calculator; +import java.util.List; + +public class CalculatorService { + + public long calculate(String input) { + Extractor extractor = new Extractor(input); + List numbers = extractor.extractNumbers(input); + Calculator calculator = new Calculator(numbers); + return calculator.sum(); + } +} From eb5b83796f189ec1707cff1c366430364e3f3712 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:32:32 +0900 Subject: [PATCH 11/74] =?UTF-8?q?feat:=20Extractor=20=EC=B6=94=EC=B6=9C=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=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/Extractor.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/calculator/model/Extractor.java diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java new file mode 100644 index 0000000000..cead19f349 --- /dev/null +++ b/src/main/java/calculator/model/Extractor.java @@ -0,0 +1,9 @@ +package calculator.model; + +import java.util.List; + +public class Extractor { + + private List delimiters; + +} From 6332cccae9ef0a3fad7dca30a4d3e33f12b039a5 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:45:48 +0900 Subject: [PATCH 12/74] =?UTF-8?q?feat:=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=EC=97=90=20=EA=B8=B0=EB=B3=B8=20=EA=B5=AC=EB=B6=84=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=A1=9C=EC=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Extractor.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index cead19f349..87d46b880b 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -5,5 +5,9 @@ public class Extractor { private List delimiters; + // ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž ๋ฐ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ถ”๊ฐ€ + public Extractor(String input) { + this.delimiters = new ArrayList<>(List.of(",", ":")); + } } From 38b3b01a39b2e0885d59c28cf190118599d74968 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:47:06 +0900 Subject: [PATCH 13/74] =?UTF-8?q?feat:=20=EC=BB=A4=EC=8A=A4=ED=85=80=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84=EC=9E=90=20=EC=B6=94=EA=B0=80=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Extractor.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 87d46b880b..4c46850749 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -5,9 +5,26 @@ public class Extractor { private List delimiters; + // ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž ๋ฐ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ถ”๊ฐ€ public Extractor(String input) { this.delimiters = new ArrayList<>(List.of(",", ":")); + extractCustomDelimiter(input).ifPresent(delimiters::add); + } + // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ถ”์ถœ + private Optional extractCustomDelimiter(String input) { + return Optional.of(input) + .filter(this::hasCustomDelimiter) + .map(str -> { + int delimiterStart = str.indexOf("//") + 2; + int delimiterEnd = str.indexOf("\\n"); + if (delimiterEnd == -1) { + throw new CustomException(ErrorCode.MISSING_CUSTOM_DELIMITER_END); + } + String customDelimiter = str.substring(delimiterStart, delimiterEnd); + return customDelimiter; + }); + } } } From 6b0dd76b86557cc763cf778f54b5d99c986733bb Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:48:16 +0900 Subject: [PATCH 14/74] =?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=A1=9C=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=EC=B6=94=EA=B0=80=EB=90=98=EB=8A=94=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EC=98=88=EC=99=B8=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/Extractor.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 4c46850749..6e3bb1ced1 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -22,9 +22,18 @@ private Optional extractCustomDelimiter(String input) { throw new CustomException(ErrorCode.MISSING_CUSTOM_DELIMITER_END); } String customDelimiter = str.substring(delimiterStart, delimiterEnd); + validateCustomDelimiter(customDelimiter); return customDelimiter; }); } + + // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋กœ ์ˆซ์ž๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ + private void validateCustomDelimiter(String delimiter) { + if (delimiter.chars().anyMatch(Character::isDigit)) { + throw new CustomException(ErrorCode.MISSING_CUSTOM_DELIMITER_END); + } + } + } } From 7c24aa0c8b70337ccc9c3bf98f66d5e23b8dacd8 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:48:48 +0900 Subject: [PATCH 15/74] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EC=97=90=EC=84=9C=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Extractor.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 6e3bb1ced1..2fa9de8a93 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -11,6 +11,15 @@ public Extractor(String input) { this.delimiters = new ArrayList<>(List.of(",", ":")); extractCustomDelimiter(input).ifPresent(delimiters::add); } + + // ์ž…๋ ฅ์—์„œ ์ˆซ์ž ์ถ”์ถœ + public List extractNumbers(String input) { + String processedInput = trimAndValidateInput(input); + String customDelimiter = extractCustomDelimiter(processedInput).orElse(""); + processedInput = replaceCustomDelimiter(processedInput, customDelimiter); + return splitAndTrimNumbers(processedInput); + } + // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ถ”์ถœ private Optional extractCustomDelimiter(String input) { return Optional.of(input) From 273594de87796f76a09266b9ce8a3861a4ad4062 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:49:07 +0900 Subject: [PATCH 16/74] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EA=B0=92=20?= =?UTF-8?q?=EA=B3=B5=EB=B0=B1=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/Extractor.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 2fa9de8a93..0a066b3e0e 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -20,6 +20,14 @@ public List extractNumbers(String input) { return splitAndTrimNumbers(processedInput); } + // ์ž…๋ ฅ๊ฐ’ ๊ณต๋ฐฑ ์ œ๊ฑฐ ํ›„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ + private String trimAndValidateInput(String input) { + return Optional.of(input) + .filter(s -> !s.isBlank()) + .map(String::trim) + .orElseThrow(() -> new CustomException(ErrorCode.EMPTY_INPUT)); + } + // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ถ”์ถœ private Optional extractCustomDelimiter(String input) { return Optional.of(input) From 6c10fa82f2dc2cc9f1442863c9352c51d5d876e1 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:50:27 +0900 Subject: [PATCH 17/74] =?UTF-8?q?feat:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=20=EB=B6=84=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Extractor.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 0a066b3e0e..a95d4c742e 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -51,6 +51,14 @@ private void validateCustomDelimiter(String delimiter) { } } + private List splitAndTrimNumbers(String input) { + String[] numbers = input.split("[,:]"); + List result = new ArrayList<>(); + for (String number : numbers) { + number = number.trim(); + return result; + } + } } From 8895faea37aac28ccd4179859c9c6b85c07d153c Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:51:25 +0900 Subject: [PATCH 18/74] =?UTF-8?q?feat:=20=EC=88=AB=EC=9E=90=20=EC=97=AC?= =?UTF-8?q?=EB=B6=80=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 --- src/main/java/calculator/model/Extractor.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index a95d4c742e..bf55f97f89 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -1,6 +1,8 @@ package calculator.model; +import java.util.ArrayList; import java.util.List; +import java.util.Optional; public class Extractor { @@ -56,9 +58,17 @@ private List splitAndTrimNumbers(String input) { List result = new ArrayList<>(); for (String number : numbers) { number = number.trim(); + validateDigit(number); return result; } } + // ์ˆซ์ž์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆ + private void validateDigit(String s) { + Optional.of(s) + .map(Long::parseLong) + .orElseThrow(() -> new CustomException(ErrorCode.INVALID_NUMBER_FORMAT)); + } + } From 0140e8ca41d9316394008e325d36bd61e653e32b Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:51:46 +0900 Subject: [PATCH 19/74] =?UTF-8?q?feat:=20=EC=88=AB=EC=9E=90=20=EC=96=91?= =?UTF-8?q?=EC=88=98=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 --- src/main/java/calculator/model/Extractor.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index bf55f97f89..c2ddc8ab5d 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -1,5 +1,8 @@ package calculator.model; +import calculator.error.CustomException; +import calculator.error.ErrorCode; + import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -59,6 +62,9 @@ private List splitAndTrimNumbers(String input) { for (String number : numbers) { number = number.trim(); validateDigit(number); + validateNumberPositive(number); + result.add(Long.parseLong(number)); + } return result; } @@ -71,4 +77,10 @@ private void validateDigit(String s) { .orElseThrow(() -> new CustomException(ErrorCode.INVALID_NUMBER_FORMAT)); } + // ์ˆซ์ž๊ฐ€ ์–‘์ˆ˜์ธ์ง€ ๊ฒ€์ฆ + private void validateNumberPositive(String s) { + if (Long.parseLong(s) <= 0) { + throw new CustomException(ErrorCode.NOT_ALLOWED_NEGATIVE_NUMBER); + } + } } From 8ddaac1c4bfb03907eae71bbc8dee773f1b5e5f0 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:52:53 +0900 Subject: [PATCH 20/74] =?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=99=95=EC=9D=B8=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Extractor.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index c2ddc8ab5d..06910b1f4a 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -68,6 +68,9 @@ private List splitAndTrimNumbers(String input) { return result; } + // ์ž…๋ ฅ์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ + private boolean hasCustomDelimiter(String input) { + return input.startsWith("//"); } // ์ˆซ์ž์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆ From fc9b27fd905742272912cd6ee3ffb41d7575ecfd Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 17:55:52 +0900 Subject: [PATCH 21/74] =?UTF-8?q?feat:=20=EC=BB=A4=EC=8A=A4=ED=85=80=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84=EC=9E=90=20=EC=B6=94=EA=B0=80=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Extractor.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 06910b1f4a..b04d3eb5d4 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -21,7 +21,7 @@ public Extractor(String input) { public List extractNumbers(String input) { String processedInput = trimAndValidateInput(input); String customDelimiter = extractCustomDelimiter(processedInput).orElse(""); - processedInput = replaceCustomDelimiter(processedInput, customDelimiter); + processedInput = addCustomDelimiter(processedInput, customDelimiter); return splitAndTrimNumbers(processedInput); } @@ -56,6 +56,18 @@ private void validateCustomDelimiter(String delimiter) { } } + // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ˆ˜๊ฐ€ + private String addCustomDelimiter(String input, String customDelimiter) { + return Optional.of(customDelimiter) + .filter(delimiter -> !delimiter.isEmpty()) + .map(delimiter -> { + int delimiterEndIndex = input.indexOf("\\n") + 2; + String mainPart = input.substring(delimiterEndIndex); + return mainPart.replace(delimiter, ","); // ๊ตฌ๋ถ„์ž๋Š” ์‰ผํ‘œ๋กœ ๋ฐ”๊ฟ” ๊ตฌ๋ถ„ + }) + .orElse(input); + } + private List splitAndTrimNumbers(String input) { String[] numbers = input.split("[,:]"); List result = new ArrayList<>(); From 6738219fe3439063377e613070507aae3d5c8396 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 18:01:16 +0900 Subject: [PATCH 22/74] =?UTF-8?q?refactor:=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EB=B0=98=ED=99=98=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B2=B4=EC=9D=B4=EB=8B=9D=20=ED=98=95=EC=8B=9D?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Extractor.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index b04d3eb5d4..0884917473 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -4,8 +4,10 @@ import calculator.error.ErrorCode; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; public class Extractor { @@ -68,18 +70,17 @@ private String addCustomDelimiter(String input, String customDelimiter) { .orElse(input); } + // ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„์ž๋กœ ๋‚˜๋ˆ„๊ณ  ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ง„ํ–‰ ๋กœ์ง private List splitAndTrimNumbers(String input) { - String[] numbers = input.split("[,:]"); - List result = new ArrayList<>(); - for (String number : numbers) { - number = number.trim(); - validateDigit(number); - validateNumberPositive(number); - result.add(Long.parseLong(number)); - } - return result; + return Arrays.stream(input.split("[,:]")) + .map(String::trim) + .peek(this::validateDigit) + .peek(this::validateNumberPositive) + .map(Long::parseLong) + .collect(Collectors.toList()); // ์ˆซ์ž ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜ } + // ์ž…๋ ฅ์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ private boolean hasCustomDelimiter(String input) { return input.startsWith("//"); From 75fa4b9008ed24cab457edc4675b50fdf7efc04b Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 18:01:51 +0900 Subject: [PATCH 23/74] =?UTF-8?q?feat:=20=EC=98=A4=EB=A5=98=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EB=B0=8F=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/error/ErrorCode.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/calculator/error/ErrorCode.java diff --git a/src/main/java/calculator/error/ErrorCode.java b/src/main/java/calculator/error/ErrorCode.java new file mode 100644 index 0000000000..c518177a7f --- /dev/null +++ b/src/main/java/calculator/error/ErrorCode.java @@ -0,0 +1,18 @@ +package calculator.error; + +public enum ErrorCode { + + NOT_ALLOWED_NEGATIVE_NUMBER("์Œ์ˆ˜๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."), + INVALID_NUMBER_FORMAT("์ž˜๋ชป๋œ ์ˆซ์ž ํ˜•์‹์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."), + EMPTY_INPUT("์ž…๋ ฅ๊ฐ’์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + + private final String message; + + ErrorCode(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } +} From f6e52cc28cc96439850e8ee3532f38628a3abf1b Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 18:02:58 +0900 Subject: [PATCH 24/74] =?UTF-8?q?feat:=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EC=98=A4=EB=A5=98=20=EC=BD=94=EB=93=9C=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/error/ErrorCode.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/error/ErrorCode.java b/src/main/java/calculator/error/ErrorCode.java index c518177a7f..0dd76bec81 100644 --- a/src/main/java/calculator/error/ErrorCode.java +++ b/src/main/java/calculator/error/ErrorCode.java @@ -4,7 +4,10 @@ public enum ErrorCode { NOT_ALLOWED_NEGATIVE_NUMBER("์Œ์ˆ˜๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."), INVALID_NUMBER_FORMAT("์ž˜๋ชป๋œ ์ˆซ์ž ํ˜•์‹์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."), - EMPTY_INPUT("์ž…๋ ฅ๊ฐ’์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค."); + EMPTY_INPUT("์ž…๋ ฅ๊ฐ’์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค."), + INVALID_WHITESPACE("๊ณต๋ฐฑ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."), + INVALID_CHARACTER("๊ตฌ๋ถ„์ž ์™ธ์˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."), + MISSING_CUSTOM_DELIMITER_END("์ž˜๋ชป๋œ ์ปค์Šคํ…€ ๋ฌธ์ž์ž…๋‹ˆ๋‹ค."); private final String message; From c2bb06cd09bf48492facd6cdf7f6024bc46c932a Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 18:59:56 +0900 Subject: [PATCH 25/74] =?UTF-8?q?refactor:=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=20=EB=A1=9C=EC=A7=81=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/Calculator.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/calculator/model/Calculator.java b/src/main/java/calculator/model/Calculator.java index 042e2aa45b..93dd5f9bf6 100644 --- a/src/main/java/calculator/model/Calculator.java +++ b/src/main/java/calculator/model/Calculator.java @@ -3,13 +3,10 @@ import java.util.List; public class Calculator { + private final List numbers; - // ์—ฌ๊ธฐ ๋‚˜์ค‘์— ์„œ๋น„์Šค ๋กœ์ง์œผ๋กœ ๋ถ„๋ฆฌ public Calculator(List numbers) { - if (numbers == null || numbers.isEmpty()) { - throw new IllegalArgumentException("์ˆซ์ž ๋ชฉ๋ก์€ ๋น„์–ด ์žˆ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); - } this.numbers = numbers; } From bee17fce9008de4e43aceedbb76f1a3fdbeb0d3b Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 19:08:03 +0900 Subject: [PATCH 26/74] =?UTF-8?q?feat:=20=EC=98=88=EC=99=B8=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/ApplicationTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/java/calculator/ApplicationTest.java b/src/test/java/calculator/ApplicationTest.java index 93771fb011..c7d30e1e02 100644 --- a/src/test/java/calculator/ApplicationTest.java +++ b/src/test/java/calculator/ApplicationTest.java @@ -16,6 +16,14 @@ class ApplicationTest extends NsTest { }); } + @Test + void ์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ() { + assertSimpleTest(() -> + assertThatThrownBy(() -> runException("-1,2,3")) + .isInstanceOf(IllegalArgumentException.class) + ); + } + @Test void ์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ() { assertSimpleTest(() -> From 24ace98d5a249463cb7549746b55e25d11f09cff Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 19:08:45 +0900 Subject: [PATCH 27/74] =?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=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=98=88=EC=99=B8=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/ApplicationTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/test/java/calculator/ApplicationTest.java b/src/test/java/calculator/ApplicationTest.java index c7d30e1e02..a1cb028a06 100644 --- a/src/test/java/calculator/ApplicationTest.java +++ b/src/test/java/calculator/ApplicationTest.java @@ -32,6 +32,13 @@ class ApplicationTest extends NsTest { ); } + @Test + void ์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ_์ปค์Šคํ…€_๊ตฌ๋ถ„์ž_๋ฌธ์ž์—ด_์˜ค๋ฅ˜() { + assertSimpleTest(() -> + assertThatThrownBy(() -> runException("//;;\\n1;;2,3")) + .isInstanceOf(IllegalArgumentException.class) + ); + } @Override public void runMain() { Application.main(new String[]{}); From 3c2c1571eb59e2bf9506c7f1d1c8d82ff88b018d Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 19:09:30 +0900 Subject: [PATCH 28/74] =?UTF-8?q?feat:=20=EC=9D=8C=EC=88=98=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/ApplicationTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/calculator/ApplicationTest.java b/src/test/java/calculator/ApplicationTest.java index a1cb028a06..2b6c704c8e 100644 --- a/src/test/java/calculator/ApplicationTest.java +++ b/src/test/java/calculator/ApplicationTest.java @@ -25,10 +25,10 @@ class ApplicationTest extends NsTest { } @Test - void ์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ() { + void ์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ_์Œ์ˆ˜_์˜ค๋ฅ˜() { assertSimpleTest(() -> - assertThatThrownBy(() -> runException("-1,2,3")) - .isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> runException("-1,2,3")) + .isInstanceOf(IllegalArgumentException.class) ); } From a31031db9c4381d1b15e21eff515bfca242b3b03 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 19:19:26 +0900 Subject: [PATCH 29/74] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EC=9D=B4=20nul?= =?UTF-8?q?l=EC=9D=BC=20=EA=B2=BD=EC=9A=B0=200=EC=9D=84=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=ED=95=98=EB=8A=94=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 --- src/main/java/calculator/model/Extractor.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index 0884917473..bd4463a948 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -21,13 +21,22 @@ public Extractor(String input) { // ์ž…๋ ฅ์—์„œ ์ˆซ์ž ์ถ”์ถœ public List extractNumbers(String input) { + checkIsNull(input); String processedInput = trimAndValidateInput(input); String customDelimiter = extractCustomDelimiter(processedInput).orElse(""); processedInput = addCustomDelimiter(processedInput, customDelimiter); return splitAndTrimNumbers(processedInput); } - // ์ž…๋ ฅ๊ฐ’ ๊ณต๋ฐฑ ์ œ๊ฑฐ ํ›„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ + // null ๋ฐ ๋นˆ ๋ฌธ์ž์—ด ์ฒดํฌ + private List checkIsNull(String input) { + if (input == null || input.isBlank()) { + return List.of(0L); // ๋นˆ ๋ฌธ์ž์—ด ๋˜๋Š” null์ผ ๊ฒฝ์šฐ 0L ๋ฐ˜ํ™˜ + } + return null; + } + + // ""๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•œ ๊ณต๋ฐฑ์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ private String trimAndValidateInput(String input) { return Optional.of(input) .filter(s -> !s.isBlank()) @@ -80,7 +89,6 @@ private List splitAndTrimNumbers(String input) { .collect(Collectors.toList()); // ์ˆซ์ž ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜ } - // ์ž…๋ ฅ์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ private boolean hasCustomDelimiter(String input) { return input.startsWith("//"); From 8e2b6f57185406f0572a4b696c5c3633f8653e28 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 19:21:14 +0900 Subject: [PATCH 30/74] =?UTF-8?q?refactor:=20=EB=B9=88=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=97=B4=20=EC=B2=B4=ED=81=AC=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B2=B4=EC=9D=B4=EB=8B=9D=20=ED=98=95=EC=8B=9D=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/Extractor.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java index bd4463a948..59b7a17d00 100644 --- a/src/main/java/calculator/model/Extractor.java +++ b/src/main/java/calculator/model/Extractor.java @@ -30,10 +30,10 @@ public List extractNumbers(String input) { // null ๋ฐ ๋นˆ ๋ฌธ์ž์—ด ์ฒดํฌ private List checkIsNull(String input) { - if (input == null || input.isBlank()) { - return List.of(0L); // ๋นˆ ๋ฌธ์ž์—ด ๋˜๋Š” null์ผ ๊ฒฝ์šฐ 0L ๋ฐ˜ํ™˜ - } - return null; + return Optional.ofNullable(input) + .filter(s -> !s.isBlank()) + .map(s -> List.of(Long.valueOf(0))) + .orElseGet(() -> List.of(0L)); // ๋นˆ ๋ฌธ์ž์—ด ๋˜๋Š” null์ผ ๊ฒฝ์šฐ 0L ๋ฐ˜ํ™˜ } // ""๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•œ ๊ณต๋ฐฑ์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ From 70c2de0b1217333cf59d48c78ae2e88c4a935861 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 19:41:51 +0900 Subject: [PATCH 31/74] =?UTF-8?q?feat:=20MessageProvider=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/error/CustomException.java | 2 +- src/main/java/calculator/message/MessageProvider.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 src/main/java/calculator/message/MessageProvider.java diff --git a/src/main/java/calculator/error/CustomException.java b/src/main/java/calculator/error/CustomException.java index 713f8f3426..ede810284c 100644 --- a/src/main/java/calculator/error/CustomException.java +++ b/src/main/java/calculator/error/CustomException.java @@ -7,7 +7,7 @@ public CustomException(ErrorCode errorCode) { super(errorCode.getMessage()); } - public static CustomException create(ErrorCode errorCode) { + public static CustomException from(ErrorCode errorCode) { return new CustomException(errorCode); } } \ No newline at end of file diff --git a/src/main/java/calculator/message/MessageProvider.java b/src/main/java/calculator/message/MessageProvider.java new file mode 100644 index 0000000000..7a72a1bc55 --- /dev/null +++ b/src/main/java/calculator/message/MessageProvider.java @@ -0,0 +1,5 @@ +package calculator.message; + +public interface MessageProvider { + String getMessage(); +} From 8f0f93153bf716291eccfe5c9aa55b30941fd166 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 19:44:08 +0900 Subject: [PATCH 32/74] =?UTF-8?q?refactor:=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=EC=9C=BC=EB=A1=9C=20=EC=A0=95=EC=A0=81=20?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/error/CustomException.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/calculator/error/CustomException.java b/src/main/java/calculator/error/CustomException.java index ede810284c..bf72ab5512 100644 --- a/src/main/java/calculator/error/CustomException.java +++ b/src/main/java/calculator/error/CustomException.java @@ -1,13 +1,13 @@ package calculator.error; -public class CustomException extends IllegalArgumentException { - private String message; +import calculator.message.MessageProvider; - public CustomException(ErrorCode errorCode) { - super(errorCode.getMessage()); +public class CustomException extends IllegalArgumentException { + private CustomException(MessageProvider messageProvider) { + super(messageProvider.getMessage()); } - public static CustomException from(ErrorCode errorCode) { - return new CustomException(errorCode); + public static CustomException from(MessageProvider messageProvider) { + return new CustomException(messageProvider); } -} \ No newline at end of file +} From fe9ae63954aaf98b43517dc6cf9959b9afc74852 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 19:47:15 +0900 Subject: [PATCH 33/74] =?UTF-8?q?feat:=20Input=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20enum=20=ED=83=80=EC=9E=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/message/InputMessage.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/calculator/message/InputMessage.java diff --git a/src/main/java/calculator/message/InputMessage.java b/src/main/java/calculator/message/InputMessage.java new file mode 100644 index 0000000000..a8a9077731 --- /dev/null +++ b/src/main/java/calculator/message/InputMessage.java @@ -0,0 +1,19 @@ +package calculator.message; + + +public enum InputMessage implements MessageProvider { + + REQUEST_MESSAGE("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); + + private final String message; + + InputMessage(String message) { + this.message = message; + } + + @Override + public String getMessage() { + return message; + } +} + From 9911249d402780a15c500f0a7f3d25d21ba7257a Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 19:47:23 +0900 Subject: [PATCH 34/74] =?UTF-8?q?feat:=20Output=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20enum=20=ED=83=80=EC=9E=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculator/message/OutputMessage.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/calculator/message/OutputMessage.java diff --git a/src/main/java/calculator/message/OutputMessage.java b/src/main/java/calculator/message/OutputMessage.java new file mode 100644 index 0000000000..b4324222a4 --- /dev/null +++ b/src/main/java/calculator/message/OutputMessage.java @@ -0,0 +1,19 @@ +package calculator.message; + + +public enum OutputMessage implements MessageProvider { + + RESPONSE_MESSAGE("๊ฒฐ๊ณผ : "); + + private final String message; + + OutputMessage(String message) { + this.message = message; + } + + @Override + public String getMessage() { + return message; + } +} + From 81505439c717691563a813b8651d3727aa1edbd9 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 19:53:55 +0900 Subject: [PATCH 35/74] =?UTF-8?q?feat:=20=EC=97=B0=EC=82=B0=EC=9E=90=20?= =?UTF-8?q?=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=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/Operator.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/java/calculator/model/Operator.java diff --git a/src/main/java/calculator/model/Operator.java b/src/main/java/calculator/model/Operator.java new file mode 100644 index 0000000000..81e980168f --- /dev/null +++ b/src/main/java/calculator/model/Operator.java @@ -0,0 +1,7 @@ +package calculator.model; + +import java.util.List; + +public interface Operator { + int operate(List numbers); +} From 3bc86b18580a2cf20e22db4cf96c3ef350df84a4 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 20:07:02 +0900 Subject: [PATCH 36/74] =?UTF-8?q?feat:=20=ED=95=A9=EA=B3=84=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/model/PlusOperator.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/calculator/model/PlusOperator.java diff --git a/src/main/java/calculator/model/PlusOperator.java b/src/main/java/calculator/model/PlusOperator.java new file mode 100644 index 0000000000..a21d5a54cc --- /dev/null +++ b/src/main/java/calculator/model/PlusOperator.java @@ -0,0 +1,19 @@ +package calculator.model; + + +import calculator.error.CustomException; +import calculator.message.ErrorMessage; +import java.util.List; +import java.util.Optional; + +public class PlusOperator implements Operator { + + @Override + public int operate(List numbers) { + return Optional.of(numbers.stream() + .mapToInt(Integer::intValue) + .sum()) + .filter(sum -> sum >= 0) // ๋ง์…ˆ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ + .orElseThrow(() -> CustomException.from(ErrorMessage.INTEGER_OUT_OF_RANGE)); + } +} From 076aa75bb09ac700ad76b7e598d6b92fc3afc1b7 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 20:22:18 +0900 Subject: [PATCH 37/74] =?UTF-8?q?feat:=20=EC=A0=95=EA=B7=9C=20=ED=91=9C?= =?UTF-8?q?=ED=98=84=EC=8B=9D=20=ED=8C=A8=ED=84=B4=20=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?enum=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculator/validation/InputPattern.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/calculator/validation/InputPattern.java diff --git a/src/main/java/calculator/validation/InputPattern.java b/src/main/java/calculator/validation/InputPattern.java new file mode 100644 index 0000000000..9c90805d14 --- /dev/null +++ b/src/main/java/calculator/validation/InputPattern.java @@ -0,0 +1,19 @@ +package calculator.validation; + +import java.util.regex.Pattern; + +public enum InputPattern { + CUSTOM_DELIMITER_PATTERN("^//([^\\n]{1,5})\\n"), + INTEGER_PATTERN("^[0-9]+$"); + + private final Pattern pattern; + + InputPattern(String regex) { + this.pattern = Pattern.compile(regex); + } + + public Pattern getPattern() { + return pattern; + } +} + From 6c6e802d00e5710c82cf18da6dd8a0a162e6a7f4 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 20:22:47 +0900 Subject: [PATCH 38/74] =?UTF-8?q?refactor:=20=EC=9E=85=EB=A0=A5=EA=B0=92?= =?UTF-8?q?=20=EA=B2=80=EC=A6=9D=EB=A7=8C=20=EB=94=B0=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 --- .../calculator/validation/InputValidator.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/calculator/validation/InputValidator.java diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java new file mode 100644 index 0000000000..7bfe062599 --- /dev/null +++ b/src/main/java/calculator/validation/InputValidator.java @@ -0,0 +1,34 @@ +package calculator.validation; + +import calculator.error.CustomException; +import calculator.message.ErrorMessage; + +import java.util.Optional; +import java.util.regex.Matcher; + +public class InputValidator { + + // ์ž…๋ ฅ ๋ฌธ์ž์—ด์ด null์ด๊ฑฐ๋‚˜ ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธ + public static void checkForEmptyInput(String input) { + Optional.ofNullable(input) + .filter(s -> !s.isBlank()) + .orElseThrow(() -> CustomException.from(ErrorMessage.INVALID_WHITESPACE)); + } + + // ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋œ ์ž…๋ ฅ์„ ๊ฒ€์ฆ + public static Matcher validateCustomDelimiter(String input) { + return Optional.of(input) + .map(InputPattern.CUSTOM_DELIMITER_PATTERN.getPattern()::matcher) + .filter(Matcher::find) + .orElseThrow(() -> CustomException.from(ErrorMessage.MISSING_CUSTOM_DELIMITER_END)); + } + + // ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ + public static void validateDelimiter(String customDelimiter) { + Optional.of(customDelimiter) + .filter(delimiter -> InputPattern.INTEGER_PATTERN.getPattern().matcher(delimiter).find()) + .ifPresent(delimiter -> { + throw CustomException.from(ErrorMessage.MISSING_CUSTOM_DELIMITER_END); + }); + } +} From 823163e5643e302af5378d6590b0450e4c95f576 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 20:36:08 +0900 Subject: [PATCH 39/74] =?UTF-8?q?refactor:=20=EC=A0=95=EA=B7=9C=EC=8B=9D?= =?UTF-8?q?=20=EA=B2=80=EC=A6=9D=20=ED=8C=A8=ED=84=B4=20=EB=84=A4=EC=9D=B4?= =?UTF-8?q?=EB=B0=8D=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/validation/InputValidator.java | 4 ++-- .../validation/{InputPattern.java => ValidationPattern.java} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/main/java/calculator/validation/{InputPattern.java => ValidationPattern.java} (81%) diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 7bfe062599..f31fd09333 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -18,7 +18,7 @@ public static void checkForEmptyInput(String input) { // ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌ๋ถ„์ž๊ฐ€ ํฌํ•จ๋œ ์ž…๋ ฅ์„ ๊ฒ€์ฆ public static Matcher validateCustomDelimiter(String input) { return Optional.of(input) - .map(InputPattern.CUSTOM_DELIMITER_PATTERN.getPattern()::matcher) + .map(ValidationPattern.CUSTOM_DELIMITER_PATTERN.getPattern()::matcher) .filter(Matcher::find) .orElseThrow(() -> CustomException.from(ErrorMessage.MISSING_CUSTOM_DELIMITER_END)); } @@ -26,7 +26,7 @@ public static Matcher validateCustomDelimiter(String input) { // ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ public static void validateDelimiter(String customDelimiter) { Optional.of(customDelimiter) - .filter(delimiter -> InputPattern.INTEGER_PATTERN.getPattern().matcher(delimiter).find()) + .filter(delimiter -> ValidationPattern.INTEGER_PATTERN.getPattern().matcher(delimiter).find()) .ifPresent(delimiter -> { throw CustomException.from(ErrorMessage.MISSING_CUSTOM_DELIMITER_END); }); diff --git a/src/main/java/calculator/validation/InputPattern.java b/src/main/java/calculator/validation/ValidationPattern.java similarity index 81% rename from src/main/java/calculator/validation/InputPattern.java rename to src/main/java/calculator/validation/ValidationPattern.java index 9c90805d14..a3d53daa6d 100644 --- a/src/main/java/calculator/validation/InputPattern.java +++ b/src/main/java/calculator/validation/ValidationPattern.java @@ -2,13 +2,13 @@ import java.util.regex.Pattern; -public enum InputPattern { +public enum ValidationPattern { CUSTOM_DELIMITER_PATTERN("^//([^\\n]{1,5})\\n"), INTEGER_PATTERN("^[0-9]+$"); private final Pattern pattern; - InputPattern(String regex) { + ValidationPattern(String regex) { this.pattern = Pattern.compile(regex); } From 57ff46a24ee27a36d5663870e2a7d58d8715e4bc Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 20:36:27 +0900 Subject: [PATCH 40/74] =?UTF-8?q?refactor:=20=EA=B3=84=EC=82=B0=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../validation/CalculateValidator.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/calculator/validation/CalculateValidator.java diff --git a/src/main/java/calculator/validation/CalculateValidator.java b/src/main/java/calculator/validation/CalculateValidator.java new file mode 100644 index 0000000000..1a4ec03f71 --- /dev/null +++ b/src/main/java/calculator/validation/CalculateValidator.java @@ -0,0 +1,34 @@ +package calculator.validation; + +import calculator.error.CustomException; +import calculator.message.ErrorMessage; + +import java.util.Optional; + +public class CalculateValidator { + private CalculateValidator() { + } + + // ๋ฌธ์ž์—ด ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์–‘์ˆ˜์ธ์ง€ ๊ฒ€์ฆ + public int parseToInt(String number) { + return Optional.of(number) + .map(String::trim) + .map(this::validateAndParse) + .filter(this::isPositive) + .orElseThrow(() -> CustomException.from(ErrorMessage.NOT_ALLOWED_NEGATIVE_NUMBER)); // 0 ์ดํ•˜์ผ ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒ + } + + // ์ˆซ์ž ํ˜•์‹์ธ์ง€ ๊ฒ€์ฆํ•˜๊ณ  ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ + private int validateAndParse(String s) { + return Optional.of(s) + .filter(str -> ValidationPattern.INTEGER_PATTERN.getPattern().matcher(str).matches()) // ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆซ์ž ํ˜•์‹ ๊ฒ€์ฆ + .map(Integer::parseInt) + .orElseThrow(() -> CustomException.from(ErrorMessage.INVALID_NUMBER_FORMAT)); // ๋ณ€ํ™˜ ์‹คํŒจ ์‹œ ์˜ˆ์™ธ ๋ฐœ์ƒ + } + + // ์–‘์ˆ˜์ธ์ง€ ๊ฒ€์ฆ + private boolean isPositive(int num) { + return num > 0; + } +} + From c7619d5c89a42c5a68c968796817c0efe9fbcdda Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 20:40:12 +0900 Subject: [PATCH 41/74] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=20dto=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/dto/InputRequest.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/calculator/dto/InputRequest.java diff --git a/src/main/java/calculator/dto/InputRequest.java b/src/main/java/calculator/dto/InputRequest.java new file mode 100644 index 0000000000..77407a3530 --- /dev/null +++ b/src/main/java/calculator/dto/InputRequest.java @@ -0,0 +1,23 @@ +package calculator.dto; + +public class InputRequest { + private final String delimiters; + private final String targetInput; + + public InputRequest(String delimiters, String targetInput) { + this.delimiters = delimiters; + this.targetInput = targetInput; + } + + public String getDelimiters() { + return delimiters; + } + + public String getTargetInput() { + return targetInput; + } + + public static InputRequest of(String delimiters, String targetInput) { + return new InputRequest(delimiters, targetInput); + } +} From 83f3f2c016fcf47dd5df2c4eb8bfd24c7b436bfa Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 20:40:18 +0900 Subject: [PATCH 42/74] =?UTF-8?q?feat:=20=EC=B6=9C=EB=A0=A5=20dto=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/dto/OutputResponse.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/calculator/dto/OutputResponse.java diff --git a/src/main/java/calculator/dto/OutputResponse.java b/src/main/java/calculator/dto/OutputResponse.java new file mode 100644 index 0000000000..9f8d18bb2a --- /dev/null +++ b/src/main/java/calculator/dto/OutputResponse.java @@ -0,0 +1,18 @@ +package calculator.dto; + +public class OutputResponse { + private final int result; + + public OutputResponse(int result) { + this.result = result; + } + + public int getResult() { + return result; + } + + public static OutputResponse of(int result) { + return new OutputResponse(result); + } +} + From 2cfb3fa82e04b967d7548683cb1dcc3b3f9dfd0c Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:02:30 +0900 Subject: [PATCH 43/74] =?UTF-8?q?feat:=20=EA=B5=AC=EB=B6=84=EC=9E=90=20?= =?UTF-8?q?=ED=8C=A8=ED=84=B4=20enum=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/parser/DelimiterPattern.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/calculator/parser/DelimiterPattern.java diff --git a/src/main/java/calculator/parser/DelimiterPattern.java b/src/main/java/calculator/parser/DelimiterPattern.java new file mode 100644 index 0000000000..f44afc47a0 --- /dev/null +++ b/src/main/java/calculator/parser/DelimiterPattern.java @@ -0,0 +1,16 @@ +package calculator.parser; + +public enum DelimiterPattern { + DEFAULT_DELIMITER(",|:"), + CUSTOM_DELIMITER_PREFIX("//"); + + private final String value; + + DelimiterPattern(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} \ No newline at end of file From 39cbc087885bbf0c403b517a57040253531e655c Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:02:49 +0900 Subject: [PATCH 44/74] =?UTF-8?q?feat:=20=EC=97=90=EB=9F=AC=20=EB=A9=94?= =?UTF-8?q?=EC=84=B8=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ErrorCode.java => message/ErrorMessage.java} | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) rename src/main/java/calculator/{error/ErrorCode.java => message/ErrorMessage.java} (60%) diff --git a/src/main/java/calculator/error/ErrorCode.java b/src/main/java/calculator/message/ErrorMessage.java similarity index 60% rename from src/main/java/calculator/error/ErrorCode.java rename to src/main/java/calculator/message/ErrorMessage.java index 0dd76bec81..61431241b3 100644 --- a/src/main/java/calculator/error/ErrorCode.java +++ b/src/main/java/calculator/message/ErrorMessage.java @@ -1,17 +1,19 @@ -package calculator.error; +package calculator.message; -public enum ErrorCode { +public enum ErrorMessage implements MessageProvider{ - NOT_ALLOWED_NEGATIVE_NUMBER("์Œ์ˆ˜๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."), - INVALID_NUMBER_FORMAT("์ž˜๋ชป๋œ ์ˆซ์ž ํ˜•์‹์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."), EMPTY_INPUT("์ž…๋ ฅ๊ฐ’์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค."), + INVALID_INPUT("์œ ํšจํ•˜์ง€ ์•Š์€ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค."), INVALID_WHITESPACE("๊ณต๋ฐฑ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."), + INVALID_NUMBER_FORMAT("์ž˜๋ชป๋œ ์ˆซ์ž ํ˜•์‹์ž…๋‹ˆ๋‹ค."), INVALID_CHARACTER("๊ตฌ๋ถ„์ž ์™ธ์˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."), + NOT_ALLOWED_NEGATIVE_NUMBER("์Œ์ˆ˜๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."), + INTEGER_OUT_OF_RANGE("ํ‘œํ˜„ ๊ฐ€๋Šฅ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜์˜€์Šต๋‹ˆ๋‹ค."), MISSING_CUSTOM_DELIMITER_END("์ž˜๋ชป๋œ ์ปค์Šคํ…€ ๋ฌธ์ž์ž…๋‹ˆ๋‹ค."); private final String message; - ErrorCode(String message) { + ErrorMessage(String message) { this.message = message; } From 8860690d4cfa640d6c540b694aa3f2e4f6d897e6 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:04:14 +0900 Subject: [PATCH 45/74] =?UTF-8?q?refactor:=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/parser/InputParser.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/main/java/calculator/parser/InputParser.java diff --git a/src/main/java/calculator/parser/InputParser.java b/src/main/java/calculator/parser/InputParser.java new file mode 100644 index 0000000000..6e4aad4b5f --- /dev/null +++ b/src/main/java/calculator/parser/InputParser.java @@ -0,0 +1,41 @@ +package calculator.parser; + +import calculator.dto.InputRequest; +import calculator.error.CustomException; +import calculator.message.ErrorMessage; +import calculator.validation.InputValidator; + +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class InputParser { + + // ์ž…๋ ฅ ๋ฌธ์ž์—ด์—์„œ ๊ตฌ๋ถ„์ž์™€ ์ˆซ์ž ๋ถ„๋ฆฌ + public static InputRequest parseDelimiterAndInput(String input) { + InputValidator.checkForEmptyInput(input); + + return Optional.of(input) + .filter(s -> s.startsWith(DelimiterPattern.CUSTOM_DELIMITER_PREFIX.getValue())) + .map(InputParser::parseCustomDelimiter) + .orElseGet(() -> parseDefaultDelimiter(input)); + } + + // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ํŒŒ์‹ฑ ํ›„ ์ž…๋ ฅ ๊ฐ์ฒด ์ƒ์„ฑ + private static InputRequest parseCustomDelimiter(String input) { + Matcher matcher = InputValidator.validateCustomDelimiter(input); + String customDelimiter = matcher.group(1); + String targetInput = input.substring(matcher.end()); + + InputValidator.validateDelimiter(customDelimiter); + return InputRequest.of(DelimiterPattern.DEFAULT_DELIMITER.getValue() + "|" + Pattern.quote(customDelimiter), targetInput); + } + + // ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ ๊ฐ์ฒด ์ƒ์„ฑ + private static InputRequest parseDefaultDelimiter(String input) { + return Optional.of(input) + .filter(s -> !s.isEmpty() && Character.isDigit(s.charAt(0))) + .map(s -> InputRequest.of(DelimiterPattern.DEFAULT_DELIMITER.getValue(), s)) + .orElseThrow(() -> CustomException.from(ErrorMessage.INVALID_INPUT)); + } +} From b92b787c55f640ff8c329bc01dc456419d4c7440 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:04:30 +0900 Subject: [PATCH 46/74] =?UTF-8?q?refactor:=20=EC=9E=85=EB=A0=A5=20dto=20?= =?UTF-8?q?=EB=A0=88=EC=BD=94=EB=93=9C=20=ED=83=80=EC=9E=85=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/dto/InputRequest.java | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/src/main/java/calculator/dto/InputRequest.java b/src/main/java/calculator/dto/InputRequest.java index 77407a3530..67e701cff1 100644 --- a/src/main/java/calculator/dto/InputRequest.java +++ b/src/main/java/calculator/dto/InputRequest.java @@ -1,21 +1,6 @@ package calculator.dto; -public class InputRequest { - private final String delimiters; - private final String targetInput; - - public InputRequest(String delimiters, String targetInput) { - this.delimiters = delimiters; - this.targetInput = targetInput; - } - - public String getDelimiters() { - return delimiters; - } - - public String getTargetInput() { - return targetInput; - } +public record InputRequest(String delimiters, String targetInput) { public static InputRequest of(String delimiters, String targetInput) { return new InputRequest(delimiters, targetInput); From f13be5193de6e58c117bca3bb929fcc0457b16d2 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:04:36 +0900 Subject: [PATCH 47/74] =?UTF-8?q?refactor:=20=EC=B6=9C=EB=A0=A5=20dto=20?= =?UTF-8?q?=EB=A0=88=EC=BD=94=EB=93=9C=20=ED=83=80=EC=9E=85=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/dto/OutputResponse.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/java/calculator/dto/OutputResponse.java b/src/main/java/calculator/dto/OutputResponse.java index 9f8d18bb2a..d492048c70 100644 --- a/src/main/java/calculator/dto/OutputResponse.java +++ b/src/main/java/calculator/dto/OutputResponse.java @@ -1,15 +1,6 @@ package calculator.dto; -public class OutputResponse { - private final int result; - - public OutputResponse(int result) { - this.result = result; - } - - public int getResult() { - return result; - } +public record OutputResponse(int result) { public static OutputResponse of(int result) { return new OutputResponse(result); From 3ca0332cc845122550e3dabed28c52c5ac39cd93 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:09:11 +0900 Subject: [PATCH 48/74] =?UTF-8?q?refactor:=20=EC=B6=9C=EB=A0=A5=20View=20d?= =?UTF-8?q?to=20=EB=B0=A9=EC=8B=9D=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/view/OutputView.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/view/OutputView.java b/src/main/java/calculator/view/OutputView.java index af9b97bcc1..70acaa6feb 100644 --- a/src/main/java/calculator/view/OutputView.java +++ b/src/main/java/calculator/view/OutputView.java @@ -1,7 +1,12 @@ package calculator.view; +import calculator.dto.OutputResponse; + +import static calculator.message.OutputMessage.RESPONSE_MESSAGE; + public class OutputView { - public void print(long result){ - System.out.println("๊ฒฐ๊ณผ : " + result); + public static void outputMessage(OutputResponse response) { + System.out.print(RESPONSE_MESSAGE.getMessage() + response.result()); } } + From e7a5d9c8ab4df0d4c9bca4ef644c37ee5459597f Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:09:20 +0900 Subject: [PATCH 49/74] =?UTF-8?q?refactor:=20=EC=9E=85=EB=A0=A5=20View=20d?= =?UTF-8?q?to=20=EB=B0=A9=EC=8B=9D=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/view/InputView.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/calculator/view/InputView.java b/src/main/java/calculator/view/InputView.java index b6281f6039..3b0e9f5a74 100644 --- a/src/main/java/calculator/view/InputView.java +++ b/src/main/java/calculator/view/InputView.java @@ -1,15 +1,15 @@ package calculator.view; +import calculator.dto.InputRequest; +import calculator.parser.InputParser; import camp.nextstep.edu.missionutils.Console; -public class InputView { +import static calculator.message.InputMessage.REQUEST_MESSAGE; - public String read(){ - System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); - return Console.readLine(); - } +public class InputView { - public void close(){ - Console.close(); + public static InputRequest getInputRequest() { + System.out.println(REQUEST_MESSAGE.getMessage()); + return InputParser.parseDelimiterAndInput(Console.readLine()); } } From 27cad225576e0dc012c3e92ec6af3e80edc3f788 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:24:26 +0900 Subject: [PATCH 50/74] =?UTF-8?q?refactor:=20DTO=20=EC=A0=81=EC=9A=A9=20?= =?UTF-8?q?=EB=B0=8F=20=EC=9E=85=EC=B6=9C=EB=A0=A5=20=EB=B0=A9=EC=8B=9D=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CalculatorController.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index 6c35852ca6..b68b9f57b4 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -1,18 +1,22 @@ package calculator.controller; +import calculator.dto.InputRequest; +import calculator.dto.OutputResponse; import calculator.service.CalculatorService; import calculator.view.InputView; import calculator.view.OutputView; public class CalculatorController { - private final CalculatorService calculatorService = new CalculatorService(); - private final InputView inputView = new InputView(); - private final OutputView outputView = new OutputView(); + private final CalculatorService calculatorService; + + public CalculatorController() { + this.calculatorService = new CalculatorService(); + } public void run() { - String input = inputView.read(); // ์ž…๋ ฅ - long result = calculatorService.calculate(input); // ๊ณ„์‚ฐ - outputView.print(result); // ์ถœ๋ ฅ + InputRequest input = InputView.getInputRequest(); + OutputResponse result = calculatorService.calculate(input); + OutputView.outputMessage(result); } } From 457603f21c5ef4294cdee196087197a0804bd340 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:24:54 +0900 Subject: [PATCH 51/74] =?UTF-8?q?refactor:=20=EA=B3=84=EC=82=B0=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/validation/CalculateValidator.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/calculator/validation/CalculateValidator.java b/src/main/java/calculator/validation/CalculateValidator.java index 1a4ec03f71..e953b28970 100644 --- a/src/main/java/calculator/validation/CalculateValidator.java +++ b/src/main/java/calculator/validation/CalculateValidator.java @@ -10,16 +10,16 @@ private CalculateValidator() { } // ๋ฌธ์ž์—ด ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์–‘์ˆ˜์ธ์ง€ ๊ฒ€์ฆ - public int parseToInt(String number) { + public static int parseToInt(String number) { return Optional.of(number) .map(String::trim) - .map(this::validateAndParse) - .filter(this::isPositive) + .map(CalculateValidator::validateAndParse) + .filter(CalculateValidator::isPositive) .orElseThrow(() -> CustomException.from(ErrorMessage.NOT_ALLOWED_NEGATIVE_NUMBER)); // 0 ์ดํ•˜์ผ ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒ } // ์ˆซ์ž ํ˜•์‹์ธ์ง€ ๊ฒ€์ฆํ•˜๊ณ  ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ - private int validateAndParse(String s) { + private static int validateAndParse(String s) { return Optional.of(s) .filter(str -> ValidationPattern.INTEGER_PATTERN.getPattern().matcher(str).matches()) // ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆซ์ž ํ˜•์‹ ๊ฒ€์ฆ .map(Integer::parseInt) @@ -27,7 +27,7 @@ private int validateAndParse(String s) { } // ์–‘์ˆ˜์ธ์ง€ ๊ฒ€์ฆ - private boolean isPositive(int num) { + private static boolean isPositive(int num) { return num > 0; } } From 7864f616fcf9ac96756563927ac98ec63c15327a Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:28:11 +0900 Subject: [PATCH 52/74] =?UTF-8?q?refactor:=20=EA=B3=84=EC=82=B0=EA=B8=B0?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EC=83=81=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/Calculator.java | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/main/java/calculator/model/Calculator.java b/src/main/java/calculator/model/Calculator.java index 93dd5f9bf6..97dbf05e75 100644 --- a/src/main/java/calculator/model/Calculator.java +++ b/src/main/java/calculator/model/Calculator.java @@ -2,17 +2,6 @@ import java.util.List; -public class Calculator { - - private final List numbers; - - public Calculator(List numbers) { - this.numbers = numbers; - } - - public long sum() { - return numbers.stream() - .mapToLong(Long::longValue) - .sum(); - } +public abstract class Calculator { + public abstract int calculate(List numbers); } From 8b4cbc10f7c6925038a252bc20db9111928fe58a Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:29:27 +0900 Subject: [PATCH 53/74] =?UTF-8?q?refactor:=20Calculator=EC=9D=98=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=EC=B2=B4=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/PlusCalculator.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/java/calculator/model/PlusCalculator.java diff --git a/src/main/java/calculator/model/PlusCalculator.java b/src/main/java/calculator/model/PlusCalculator.java new file mode 100644 index 0000000000..f087693075 --- /dev/null +++ b/src/main/java/calculator/model/PlusCalculator.java @@ -0,0 +1,13 @@ +package calculator.model; + +import java.util.List; + +public class PlusCalculator extends Calculator { + @Override + public int calculate(List numbers) { + return numbers.stream() + .mapToInt(Integer::intValue) + .sum(); + } +} + From 2eb03ac084486948c817e40f363ae980f7e83016 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:31:38 +0900 Subject: [PATCH 54/74] =?UTF-8?q?refactor:=20Operator=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=83=9D=EC=84=B1=EC=9E=90=20?= =?UTF-8?q?=EC=A3=BC=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/PlusCalculator.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/calculator/model/PlusCalculator.java b/src/main/java/calculator/model/PlusCalculator.java index f087693075..ebcc58eefa 100644 --- a/src/main/java/calculator/model/PlusCalculator.java +++ b/src/main/java/calculator/model/PlusCalculator.java @@ -3,6 +3,13 @@ import java.util.List; public class PlusCalculator extends Calculator { + + private final Operator operator; + + public PlusCalculator(Operator operator) { + this.operator = operator; + } + @Override public int calculate(List numbers) { return numbers.stream() From 333163fa9f274ca1a066e1b471294f3ed139c64a Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:44:52 +0900 Subject: [PATCH 55/74] =?UTF-8?q?fix:=20=EC=A0=95=EA=B7=9C=20=ED=91=9C?= =?UTF-8?q?=ED=98=84=EC=8B=9D=20=ED=8C=A8=ED=84=B4=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/validation/ValidationPattern.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/validation/ValidationPattern.java b/src/main/java/calculator/validation/ValidationPattern.java index a3d53daa6d..bd4ca039d3 100644 --- a/src/main/java/calculator/validation/ValidationPattern.java +++ b/src/main/java/calculator/validation/ValidationPattern.java @@ -3,8 +3,8 @@ import java.util.regex.Pattern; public enum ValidationPattern { - CUSTOM_DELIMITER_PATTERN("^//([^\\n]{1,5})\\n"), - INTEGER_PATTERN("^[0-9]+$"); + CUSTOM_DELIMITER_PATTERN("^//(.{1,5})\\\\n"), + INTEGER_PATTERN("\\d+"); private final Pattern pattern; @@ -17,3 +17,4 @@ public Pattern getPattern() { } } + From bd7aa1c47c93097d778ac73daae0396ddc29a165 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:45:40 +0900 Subject: [PATCH 56/74] =?UTF-8?q?refactor:=20=ED=95=A9=EC=82=B0=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=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 --- src/main/java/calculator/model/PlusCalculator.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/calculator/model/PlusCalculator.java b/src/main/java/calculator/model/PlusCalculator.java index ebcc58eefa..b1eafbb54e 100644 --- a/src/main/java/calculator/model/PlusCalculator.java +++ b/src/main/java/calculator/model/PlusCalculator.java @@ -12,9 +12,7 @@ public PlusCalculator(Operator operator) { @Override public int calculate(List numbers) { - return numbers.stream() - .mapToInt(Integer::intValue) - .sum(); + return operator.operate(numbers); } } From 44d32e30436bce190e8a6468303ecabba80c432a Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:46:34 +0900 Subject: [PATCH 57/74] =?UTF-8?q?refactor:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EC=99=80=20=EC=88=AB=EC=9E=90=20=EC=B6=94=EC=B6=9C=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=84=B8=EB=B6=84=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/model/Extractor.java | 110 ------------------ 1 file changed, 110 deletions(-) delete mode 100644 src/main/java/calculator/model/Extractor.java diff --git a/src/main/java/calculator/model/Extractor.java b/src/main/java/calculator/model/Extractor.java deleted file mode 100644 index 59b7a17d00..0000000000 --- a/src/main/java/calculator/model/Extractor.java +++ /dev/null @@ -1,110 +0,0 @@ -package calculator.model; - -import calculator.error.CustomException; -import calculator.error.ErrorCode; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -public class Extractor { - - private List delimiters; - - // ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž ๋ฐ ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ถ”๊ฐ€ - public Extractor(String input) { - this.delimiters = new ArrayList<>(List.of(",", ":")); - extractCustomDelimiter(input).ifPresent(delimiters::add); - } - - // ์ž…๋ ฅ์—์„œ ์ˆซ์ž ์ถ”์ถœ - public List extractNumbers(String input) { - checkIsNull(input); - String processedInput = trimAndValidateInput(input); - String customDelimiter = extractCustomDelimiter(processedInput).orElse(""); - processedInput = addCustomDelimiter(processedInput, customDelimiter); - return splitAndTrimNumbers(processedInput); - } - - // null ๋ฐ ๋นˆ ๋ฌธ์ž์—ด ์ฒดํฌ - private List checkIsNull(String input) { - return Optional.ofNullable(input) - .filter(s -> !s.isBlank()) - .map(s -> List.of(Long.valueOf(0))) - .orElseGet(() -> List.of(0L)); // ๋นˆ ๋ฌธ์ž์—ด ๋˜๋Š” null์ผ ๊ฒฝ์šฐ 0L ๋ฐ˜ํ™˜ - } - - // ""๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•œ ๊ณต๋ฐฑ์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ - private String trimAndValidateInput(String input) { - return Optional.of(input) - .filter(s -> !s.isBlank()) - .map(String::trim) - .orElseThrow(() -> new CustomException(ErrorCode.EMPTY_INPUT)); - } - - // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ถ”์ถœ - private Optional extractCustomDelimiter(String input) { - return Optional.of(input) - .filter(this::hasCustomDelimiter) - .map(str -> { - int delimiterStart = str.indexOf("//") + 2; - int delimiterEnd = str.indexOf("\\n"); - if (delimiterEnd == -1) { - throw new CustomException(ErrorCode.MISSING_CUSTOM_DELIMITER_END); - } - String customDelimiter = str.substring(delimiterStart, delimiterEnd); - validateCustomDelimiter(customDelimiter); - return customDelimiter; - }); - } - - // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๋กœ ์ˆซ์ž๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ - private void validateCustomDelimiter(String delimiter) { - if (delimiter.chars().anyMatch(Character::isDigit)) { - throw new CustomException(ErrorCode.MISSING_CUSTOM_DELIMITER_END); - } - } - - // ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์ˆ˜๊ฐ€ - private String addCustomDelimiter(String input, String customDelimiter) { - return Optional.of(customDelimiter) - .filter(delimiter -> !delimiter.isEmpty()) - .map(delimiter -> { - int delimiterEndIndex = input.indexOf("\\n") + 2; - String mainPart = input.substring(delimiterEndIndex); - return mainPart.replace(delimiter, ","); // ๊ตฌ๋ถ„์ž๋Š” ์‰ผํ‘œ๋กœ ๋ฐ”๊ฟ” ๊ตฌ๋ถ„ - }) - .orElse(input); - } - - // ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„์ž๋กœ ๋‚˜๋ˆ„๊ณ  ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ง„ํ–‰ ๋กœ์ง - private List splitAndTrimNumbers(String input) { - return Arrays.stream(input.split("[,:]")) - .map(String::trim) - .peek(this::validateDigit) - .peek(this::validateNumberPositive) - .map(Long::parseLong) - .collect(Collectors.toList()); // ์ˆซ์ž ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜ - } - - // ์ž…๋ ฅ์— ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ - private boolean hasCustomDelimiter(String input) { - return input.startsWith("//"); - } - - // ์ˆซ์ž์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆ - private void validateDigit(String s) { - Optional.of(s) - .map(Long::parseLong) - .orElseThrow(() -> new CustomException(ErrorCode.INVALID_NUMBER_FORMAT)); - } - - // ์ˆซ์ž๊ฐ€ ์–‘์ˆ˜์ธ์ง€ ๊ฒ€์ฆ - private void validateNumberPositive(String s) { - if (Long.parseLong(s) <= 0) { - throw new CustomException(ErrorCode.NOT_ALLOWED_NEGATIVE_NUMBER); - } - } -} From 6a2eff2cf3a25b5bc0513d189163710617ed36c7 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:50:23 +0900 Subject: [PATCH 58/74] =?UTF-8?q?refactor:=20=ED=8C=8C=EB=9D=BC=EB=AF=B8?= =?UTF-8?q?=ED=84=B0=EB=A1=9C=20PlusOperator=20=EB=B0=9B=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=A3=BC=EC=9E=85=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculator/service/CalculatorService.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/calculator/service/CalculatorService.java b/src/main/java/calculator/service/CalculatorService.java index 06e5b61db6..a7bf31562a 100644 --- a/src/main/java/calculator/service/CalculatorService.java +++ b/src/main/java/calculator/service/CalculatorService.java @@ -1,15 +1,23 @@ package calculator.service; -import calculator.model.Extractor; -import calculator.model.Calculator; +import calculator.dto.InputRequest; +import calculator.dto.OutputResponse; +import calculator.model.PlusCalculator; +import calculator.model.PlusOperator; +import calculator.parser.CalculatorParser; + import java.util.List; public class CalculatorService { - public long calculate(String input) { - Extractor extractor = new Extractor(input); - List numbers = extractor.extractNumbers(input); - Calculator calculator = new Calculator(numbers); - return calculator.sum(); + private final PlusCalculator plusCalculator; + + public CalculatorService() { + this.plusCalculator = new PlusCalculator(new PlusOperator()); + } + + public OutputResponse calculate(InputRequest request) { + List numbers = CalculatorParser.parseForDelimiters(request); + return OutputResponse.of(plusCalculator.calculate(numbers)); } } From 7505fb0995aa8827d21e164d3cdc7517878e3fd4 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 21:51:26 +0900 Subject: [PATCH 59/74] =?UTF-8?q?refactor:=20=EC=88=AB=EC=9E=90=EA=B0=80?= =?UTF-8?q?=20=ED=8F=AC=ED=95=A8=EB=90=98=EC=A7=80=20=EC=95=8A=EC=9D=80=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EC=98=88=EC=99=B8=20=EB=B0=9C=EC=83=9D?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=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 --- src/main/java/calculator/validation/InputValidator.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index f31fd09333..551772adc8 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -26,9 +26,7 @@ public static Matcher validateCustomDelimiter(String input) { // ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ public static void validateDelimiter(String customDelimiter) { Optional.of(customDelimiter) - .filter(delimiter -> ValidationPattern.INTEGER_PATTERN.getPattern().matcher(delimiter).find()) - .ifPresent(delimiter -> { - throw CustomException.from(ErrorMessage.MISSING_CUSTOM_DELIMITER_END); - }); + .filter(delimiter -> !ValidationPattern.INTEGER_PATTERN.getPattern().matcher(delimiter).find()) + .orElseThrow(() -> CustomException.from(ErrorMessage.MISSING_CUSTOM_DELIMITER_END)); } } From 4ffe4e53dec8327a78eaa7ce90cc61c80dedf863 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 23:28:36 +0900 Subject: [PATCH 60/74] =?UTF-8?q?fix:=20=EC=B2=B4=EC=9D=B4=EB=8B=9D=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=20stream=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculator/parser/CalculatorParser.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/main/java/calculator/parser/CalculatorParser.java diff --git a/src/main/java/calculator/parser/CalculatorParser.java b/src/main/java/calculator/parser/CalculatorParser.java new file mode 100644 index 0000000000..eeb07a6c3e --- /dev/null +++ b/src/main/java/calculator/parser/CalculatorParser.java @@ -0,0 +1,40 @@ +package calculator.parser; + +import calculator.dto.InputRequest; +import calculator.error.CustomException; +import calculator.message.ErrorMessage; +import calculator.validation.CalculateValidator; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +public class CalculatorParser { + + public CalculatorParser() { + } + + public static List parseForDelimiters(InputRequest request) { + String delimiters = request.delimiters(); + String targetInput = request.targetInput(); + + return Optional.of(targetInput) + .filter(input -> !input.isEmpty()) + .map(input -> input.split(delimiters, -1)) + .stream() + .flatMap(Arrays::stream) + .map(CalculatorParser::validateInput) // ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ + .map(CalculateValidator::parseToInt) // ๋ฌธ์ž์—ด ์ •์ˆ˜ ๋ณ€ํ™˜ + .collect(Collectors.toCollection(ArrayList::new)); + } + + + private static String validateInput(String data) { + return Optional.of(data) + .filter(dataValue -> !dataValue.isEmpty()) + .orElseThrow(() -> CustomException.from(ErrorMessage.INVALID_INPUT)); + } +} + From 073e284f7d4c76e8cb4855917f94ac259ee7c86c Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 23:29:28 +0900 Subject: [PATCH 61/74] =?UTF-8?q?refactor:=20=EA=B5=AC=EB=B6=84=EC=9E=90?= =?UTF-8?q?=EB=A1=9C=20=EC=88=AB=EC=9E=90=20=ED=8F=AC=ED=95=A8=EB=90=9C=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=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 --- src/main/java/calculator/validation/InputValidator.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/validation/InputValidator.java b/src/main/java/calculator/validation/InputValidator.java index 551772adc8..502c40bbd6 100644 --- a/src/main/java/calculator/validation/InputValidator.java +++ b/src/main/java/calculator/validation/InputValidator.java @@ -26,7 +26,9 @@ public static Matcher validateCustomDelimiter(String input) { // ๊ตฌ๋ถ„์ž์— ์ˆซ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ public static void validateDelimiter(String customDelimiter) { Optional.of(customDelimiter) - .filter(delimiter -> !ValidationPattern.INTEGER_PATTERN.getPattern().matcher(delimiter).find()) - .orElseThrow(() -> CustomException.from(ErrorMessage.MISSING_CUSTOM_DELIMITER_END)); + .filter(delimiter -> ValidationPattern.INTEGER_PATTERN.getPattern().matcher(delimiter).find()) // ์ˆซ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ + .ifPresent(delimiter -> { + throw CustomException.from(ErrorMessage.MISSING_CUSTOM_DELIMITER_END); + }); } } From 22c8dd94108682d0a90bbc41e0f8e7a0deb8e1a6 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 23:30:07 +0900 Subject: [PATCH 62/74] =?UTF-8?q?refactor:=20=EC=A3=BC=EC=84=9D=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/controller/CalculatorController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/calculator/controller/CalculatorController.java b/src/main/java/calculator/controller/CalculatorController.java index b68b9f57b4..64ba3ed3d8 100644 --- a/src/main/java/calculator/controller/CalculatorController.java +++ b/src/main/java/calculator/controller/CalculatorController.java @@ -15,8 +15,8 @@ public CalculatorController() { } public void run() { - InputRequest input = InputView.getInputRequest(); - OutputResponse result = calculatorService.calculate(input); - OutputView.outputMessage(result); + InputRequest input = InputView.getInputRequest(); // ์ž…๋ ฅ + OutputResponse result = calculatorService.calculate(input); // ๊ณ„์‚ฐ + OutputView.outputMessage(result); // ์ถœ๋ ฅ } } From 0ea62f2bd4685dea83a506102e27b5d710641bdc Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 23:30:57 +0900 Subject: [PATCH 63/74] =?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=82=AC=EC=9A=A9=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BC=80=EC=9D=B4=EC=8A=A4=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/test/java/calculator/ApplicationTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/calculator/ApplicationTest.java b/src/test/java/calculator/ApplicationTest.java index 2b6c704c8e..242dcb35c6 100644 --- a/src/test/java/calculator/ApplicationTest.java +++ b/src/test/java/calculator/ApplicationTest.java @@ -8,6 +8,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; class ApplicationTest extends NsTest { + @Test void ์ปค์Šคํ…€_๊ตฌ๋ถ„์ž_์‚ฌ์šฉ() { assertSimpleTest(() -> { @@ -16,6 +17,14 @@ class ApplicationTest extends NsTest { }); } + @Test + void ์ปค์Šคํ…€_๊ตฌ๋ถ„์ž_์‚ฌ์šฉ2() { + assertSimpleTest(() -> { + run("//x\\n1x2x3"); + assertThat(output()).contains("๊ฒฐ๊ณผ : 6"); + }); + } + @Test void ์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ() { assertSimpleTest(() -> From 254cb2da9501410bd081c6f70cca103f5753af97 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 23:31:13 +0900 Subject: [PATCH 64/74] =?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=ED=98=BC=ED=95=A9=20=EC=82=AC=EC=9A=A9=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BC=80=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/ApplicationTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/java/calculator/ApplicationTest.java b/src/test/java/calculator/ApplicationTest.java index 242dcb35c6..fce781d495 100644 --- a/src/test/java/calculator/ApplicationTest.java +++ b/src/test/java/calculator/ApplicationTest.java @@ -34,11 +34,11 @@ class ApplicationTest extends NsTest { } @Test - void ์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ_์Œ์ˆ˜_์˜ค๋ฅ˜() { - assertSimpleTest(() -> - assertThatThrownBy(() -> runException("-1,2,3")) - .isInstanceOf(IllegalArgumentException.class) - ); + void ๊ธฐ๋ณธ_๊ตฌ๋ถ„์ž_ํ˜ผํ•ฉ_์‚ฌ์šฉ_ํ…Œ์ŠคํŠธ() { + assertSimpleTest(() -> { + run("1,2:3,4"); + assertThat(output()).contains("๊ฒฐ๊ณผ : 10"); + }); } @Test From b19b1f3a802a16294465a95a5eda09e45e7a4571 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 23:31:35 +0900 Subject: [PATCH 65/74] =?UTF-8?q?feat:=20=EC=BB=A4=EC=8A=A4=ED=85=80=20?= =?UTF-8?q?=EB=AC=B8=EC=9E=90=EC=97=B4=20=EC=98=88=EC=99=B8=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BC=80=EC=9D=B4=EC=8A=A4=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/test/java/calculator/ApplicationTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/test/java/calculator/ApplicationTest.java b/src/test/java/calculator/ApplicationTest.java index fce781d495..8584f38db7 100644 --- a/src/test/java/calculator/ApplicationTest.java +++ b/src/test/java/calculator/ApplicationTest.java @@ -43,6 +43,13 @@ class ApplicationTest extends NsTest { @Test void ์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ_์ปค์Šคํ…€_๊ตฌ๋ถ„์ž_๋ฌธ์ž์—ด_์˜ค๋ฅ˜() { + void ์ปค์Šคํ…€_๋ฌธ์ž์—ด_์‹œ์ž‘_์˜ค๋ฅ˜_์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ() { + assertSimpleTest(() -> + assertThatThrownBy(() -> runException("/;\\n1;2,3")) + .isInstanceOf(IllegalArgumentException.class) + ); + } + assertSimpleTest(() -> assertThatThrownBy(() -> runException("//;;\\n1;;2,3")) .isInstanceOf(IllegalArgumentException.class) From e24722ec758158d2365819e1ae5380e53187de6c Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 23:32:02 +0900 Subject: [PATCH 66/74] =?UTF-8?q?feat:=20=EC=9E=98=EB=AA=BB=EB=90=9C=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=98=88=EC=99=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BC=80?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/ApplicationTest.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/test/java/calculator/ApplicationTest.java b/src/test/java/calculator/ApplicationTest.java index 8584f38db7..a048bdaa4d 100644 --- a/src/test/java/calculator/ApplicationTest.java +++ b/src/test/java/calculator/ApplicationTest.java @@ -42,7 +42,6 @@ class ApplicationTest extends NsTest { } @Test - void ์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ_์ปค์Šคํ…€_๊ตฌ๋ถ„์ž_๋ฌธ์ž์—ด_์˜ค๋ฅ˜() { void ์ปค์Šคํ…€_๋ฌธ์ž์—ด_์‹œ์ž‘_์˜ค๋ฅ˜_์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ() { assertSimpleTest(() -> assertThatThrownBy(() -> runException("/;\\n1;2,3")) @@ -50,6 +49,16 @@ class ApplicationTest extends NsTest { ); } + @Test + void ์ž˜๋ชป๋œ_์ž…๋ ฅ๊ฐ’_ํฌํ•จ์‹œ_์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ() { + assertSimpleTest(() -> + assertThatThrownBy(() -> runException("//;\\n1;a;3")) + .isInstanceOf(IllegalArgumentException.class) + ); + } + + @Test + void ์ปค์Šคํ…€_๊ตฌ๋ถ„์ž_์ˆซ์ž์ž…๋ ฅ_์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ() { assertSimpleTest(() -> assertThatThrownBy(() -> runException("//;;\\n1;;2,3")) .isInstanceOf(IllegalArgumentException.class) From 8871302b3603af150fa444e1f270db61990892bc Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 23:32:48 +0900 Subject: [PATCH 67/74] =?UTF-8?q?feat:=20=EB=8B=A4=EC=A4=91=20=EC=BB=A4?= =?UTF-8?q?=EC=8A=A4=ED=85=80=20=EA=B5=AC=EB=B6=84=EC=9E=90=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BC=80=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/ApplicationTest.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/test/java/calculator/ApplicationTest.java b/src/test/java/calculator/ApplicationTest.java index a048bdaa4d..9810f6a6c9 100644 --- a/src/test/java/calculator/ApplicationTest.java +++ b/src/test/java/calculator/ApplicationTest.java @@ -60,10 +60,19 @@ class ApplicationTest extends NsTest { @Test void ์ปค์Šคํ…€_๊ตฌ๋ถ„์ž_์ˆซ์ž์ž…๋ ฅ_์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ() { assertSimpleTest(() -> - assertThatThrownBy(() -> runException("//;;\\n1;;2,3")) + assertThatThrownBy(() -> runException("//3\\n132333")) .isInstanceOf(IllegalArgumentException.class) ); } + + @Test + void ๋‹ค์ค‘_์ปค์Šคํ…€_๊ตฌ๋ถ„์ž_์œ„์น˜_์ค‘๊ฐ„_์˜ˆ์™ธ_ํ…Œ์ŠคํŠธ() { + assertSimpleTest(() -> + assertThatThrownBy(() -> runException("//x\\n2x//x\\n3x2x3")) + .isInstanceOf(IllegalArgumentException.class) + ); + } + @Override public void runMain() { Application.main(new String[]{}); From cad45499efdf19806800576661e54c7cd09a28d8 Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 23:37:26 +0900 Subject: [PATCH 68/74] =?UTF-8?q?refactor:=20=EB=94=94=EB=A0=89=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EA=B5=AC=EC=A1=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/README.md b/README.md index 07e08828ae..648c3b30c7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,40 @@ # java-calculator-precourse +## ๐Ÿ“ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ +``` +calculator +โ”œโ”€โ”€ controller +โ”‚ โ””โ”€โ”€ CalculatorController.java +โ”œโ”€โ”€ dto +โ”‚ โ”œโ”€โ”€ InputRequest.java +โ”‚ โ””โ”€โ”€ OutputResponse.java +โ”œโ”€โ”€ error +โ”‚ โ”œโ”€โ”€ CustomException.java +โ”œโ”€โ”€ message +โ”‚ โ”œโ”€โ”€ ErrorMessage.java +โ”‚ โ”œโ”€โ”€ InputMessage.java +โ”‚ โ””โ”€โ”€ OutputMessage.java +โ”œโ”€โ”€ model +โ”‚ โ”œโ”€โ”€ Calculator.java +โ”‚ โ”œโ”€โ”€ Operator.java +โ”‚ โ”œโ”€โ”€ PlusCalculator.java +โ”‚ โ””โ”€โ”€ PlusOperator.java +โ”œโ”€โ”€ parser +โ”‚ โ”œโ”€โ”€ CalculatorParser.java +โ”‚ โ”œโ”€โ”€ DelimiterPattern.java +โ”‚ โ””โ”€โ”€ InputParser.java +โ”œโ”€โ”€ service +โ”‚ โ””โ”€โ”€ CalculatorService.java +โ”œโ”€โ”€ validation +โ”‚ โ”œโ”€โ”€ CalculateValidator.java +โ”‚ โ””โ”€โ”€ InputValidator.java +โ””โ”€โ”€ view +โ”œโ”€โ”€ InputView.java +โ””โ”€โ”€ OutputView.java +``` + +--- + ## ๐ŸŽฏ ํ•™์Šต ๋ชฉํ‘œ - Git, GitHub, IDE ๋“ฑ ์‹ค์ œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ™˜๊ฒฝ์— ์ต์ˆ™ํ•ด์ง„๋‹ค. From 92850424e8d7f192d69746d0cd8e7320b916fdeb Mon Sep 17 00:00:00 2001 From: MinSang22Kim Date: Sun, 20 Oct 2024 23:42:26 +0900 Subject: [PATCH 69/74] =?UTF-8?q?refactor:=20=EB=88=84=EB=9D=BD=EB=90=9C?= =?UTF-8?q?=20=EB=94=94=EB=A0=89=ED=86=A0=EB=A6=AC=20=EA=B5=AC=EC=A1=B0=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 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 648c3b30c7..335a73fda8 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ calculator โ”œโ”€โ”€ message โ”‚ โ”œโ”€โ”€ ErrorMessage.java โ”‚ โ”œโ”€โ”€ InputMessage.java +โ”‚ โ”œโ”€โ”€ MessageProvider.java โ”‚ โ””โ”€โ”€ OutputMessage.java โ”œโ”€โ”€ model โ”‚ โ”œโ”€โ”€ Calculator.java @@ -27,10 +28,12 @@ calculator โ”‚ โ””โ”€โ”€ CalculatorService.java โ”œโ”€โ”€ validation โ”‚ โ”œโ”€โ”€ CalculateValidator.java -โ”‚ โ””โ”€โ”€ InputValidator.java +โ”‚ โ”œโ”€โ”€ InputValidator.java +โ”‚ โ””โ”€โ”€ ValidationPattern.java โ””โ”€โ”€ view -โ”œโ”€โ”€ InputView.java -โ””โ”€โ”€ OutputView.java +โ”‚ โ”œโ”€โ”€ InputView.java +โ”‚ โ””โ”€โ”€ OutputView.java +โ””โ”€โ”€ Application ``` --- From f8f3b3cf060da1c79cc56487c3b56fc9f35e991d Mon Sep 17 00:00:00 2001 From: Min Sang Kim <202014889@kyonggi.ac.kr> Date: Mon, 28 Oct 2024 21:03:07 +0900 Subject: [PATCH 70/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 335a73fda8..524986a4df 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ calculator โ”‚ โ”œโ”€โ”€ InputRequest.java โ”‚ โ””โ”€โ”€ OutputResponse.java โ”œโ”€โ”€ error -โ”‚ โ”œโ”€โ”€ CustomException.java +โ”‚ โ””โ”€โ”€ CustomException.java โ”œโ”€โ”€ message โ”‚ โ”œโ”€โ”€ ErrorMessage.java โ”‚ โ”œโ”€โ”€ InputMessage.java From 728d00002f1d74321d98828ef3dcff6acf5c9e98 Mon Sep 17 00:00:00 2001 From: Min Sang Kim <202014889@kyonggi.ac.kr> Date: Mon, 28 Oct 2024 21:03:48 +0900 Subject: [PATCH 71/74] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 524986a4df..dad005cda5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # java-calculator-precourse +About 1st pre-course project ## ๐Ÿ“ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ``` From 7abde840b2693cdb6b766adfe3e6f86f36f6df43 Mon Sep 17 00:00:00 2001 From: Min Sang Kim <202014889@kyonggi.ac.kr> Date: Mon, 28 Oct 2024 21:08:20 +0900 Subject: [PATCH 72/74] =?UTF-8?q?refacotr:=20=EB=A6=AC=EB=93=9C=EB=AF=B8?= =?UTF-8?q?=20=EC=86=8C=EA=B0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dad005cda5..b4abafdfa9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # java-calculator-precourse + About 1st pre-course project ## ๐Ÿ“ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ From 269900d7a9080d2f4a26cd2cff60248db2973478 Mon Sep 17 00:00:00 2001 From: Min Sang Kim <202014889@kyonggi.ac.kr> Date: Mon, 28 Oct 2024 21:09:45 +0900 Subject: [PATCH 73/74] =?UTF-8?q?refactor:=20=EB=A6=AC=EB=93=9C=EB=AF=B8?= =?UTF-8?q?=20=EA=B5=AC=EB=B6=84=EC=84=A0=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 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index b4abafdfa9..dc7006f8ea 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ About 1st pre-course project +--- + ## ๐Ÿ“ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ``` calculator From 27c57e3730db5e1593186d6c83765e3b42036ac1 Mon Sep 17 00:00:00 2001 From: Min Sang Kim <202014889@kyonggi.ac.kr> Date: Thu, 31 Oct 2024 16:31:06 +0900 Subject: [PATCH 74/74] =?UTF-8?q?refactor:=20=EB=A6=AC=EB=93=9C=EB=AF=B8?= =?UTF-8?q?=20=EC=86=8C=EA=B0=9C=EA=B8=80=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 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dc7006f8ea..8eacf2522c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # java-calculator-precourse -About 1st pre-course project +About 1st Pre-Course Project : Calculator ---