From ec5f5e2ebd4f667357e18ee939b49f2e748ed232 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Thu, 3 Apr 2025 18:02:17 +0900 Subject: [PATCH 01/40] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5c937d3..11e7e5c 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ ## ๐Ÿ“ฎ ๋ฏธ์…˜ ์ œ์ถœ ๋ฐฉ๋ฒ• -- ๋ฏธ์…˜ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ํ›„ GitHub์„ ํ†ตํ•ด ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค. +~~- ๋ฏธ์…˜ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ํ›„ GitHub์„ ํ†ตํ•ด ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค. - GitHub์„ ํ™œ์šฉํ•œ ์ œ์ถœ ๋ฐฉ๋ฒ•์€ [ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ ์ œ์ถœ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ์ œ์ถœํ•œ๋‹ค. - GitHub์— ๋ฏธ์…˜์„ ์ œ์ถœํ•œ ํ›„ [์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค ์ง€์›](https://apply.techcourse.co.kr) ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜์—ฌ ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•œ๋‹ค. - ์ž์„ธํ•œ ๋ฐฉ๋ฒ•์€ [์ œ์ถœ ๊ฐ€์ด๋“œ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse#์ œ์ถœ-๊ฐ€์ด๋“œ) ์ฐธ๊ณ  - - **Pull Request๋งŒ ๋ณด๋‚ด๊ณ  ์ง€์› ํ”Œ๋žซํผ์—์„œ ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์ข… ์ œ์ถœํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋‹ˆ ์ฃผ์˜ํ•œ๋‹ค.** + - **Pull Request๋งŒ ๋ณด๋‚ด๊ณ  ์ง€์› ํ”Œ๋žซํผ์—์„œ ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์ข… ์ œ์ถœํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋‹ˆ ์ฃผ์˜ํ•œ๋‹ค.**~~ ## ๐Ÿšจ ๊ณผ์ œ ์ œ์ถœ ์ „ ์ฒดํฌ ๋ฆฌ์ŠคํŠธ - 0์  ๋ฐฉ์ง€ From 0ebf462b4b5f24f99c20a6a33415ea6fd9fb29e0 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Thu, 3 Apr 2025 18:02:32 +0900 Subject: [PATCH 02/40] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 11e7e5c..5c937d3 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ ## ๐Ÿ“ฎ ๋ฏธ์…˜ ์ œ์ถœ ๋ฐฉ๋ฒ• -~~- ๋ฏธ์…˜ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ํ›„ GitHub์„ ํ†ตํ•ด ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค. +- ๋ฏธ์…˜ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ํ›„ GitHub์„ ํ†ตํ•ด ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค. - GitHub์„ ํ™œ์šฉํ•œ ์ œ์ถœ ๋ฐฉ๋ฒ•์€ [ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ ์ œ์ถœ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ์ œ์ถœํ•œ๋‹ค. - GitHub์— ๋ฏธ์…˜์„ ์ œ์ถœํ•œ ํ›„ [์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค ์ง€์›](https://apply.techcourse.co.kr) ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜์—ฌ ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•œ๋‹ค. - ์ž์„ธํ•œ ๋ฐฉ๋ฒ•์€ [์ œ์ถœ ๊ฐ€์ด๋“œ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse#์ œ์ถœ-๊ฐ€์ด๋“œ) ์ฐธ๊ณ  - - **Pull Request๋งŒ ๋ณด๋‚ด๊ณ  ์ง€์› ํ”Œ๋žซํผ์—์„œ ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์ข… ์ œ์ถœํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋‹ˆ ์ฃผ์˜ํ•œ๋‹ค.**~~ + - **Pull Request๋งŒ ๋ณด๋‚ด๊ณ  ์ง€์› ํ”Œ๋žซํผ์—์„œ ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์ข… ์ œ์ถœํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋‹ˆ ์ฃผ์˜ํ•œ๋‹ค.** ## ๐Ÿšจ ๊ณผ์ œ ์ œ์ถœ ์ „ ์ฒดํฌ ๋ฆฌ์ŠคํŠธ - 0์  ๋ฐฉ์ง€ From 51f9116feaa12adc74986415078b5fd9c35457e0 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 19:31:21 +0900 Subject: [PATCH 03/40] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29..a04f56d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,55 @@ +# ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก + +## Model + +### Domain +- RacingCar (ํ•˜๋‚˜์˜ ๋ ˆ์ด์‹ฑ ์นด) + - ์ฐจ ์ด๋ฆ„ ์ถœ๋ ฅ์„ ์œ„ํ•œ getter +- AllRacingCars (๋ชจ๋“  ๋ ˆ์ด์‹ฑ ์นด๋“ค, ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜) +- FullGame (์ „์ฒด ๊ฒฝ๊ธฐ) + - AllGameResults ์ƒ์„ฑ ๋ฉ”์„œ๋“œ...? +- Game (๋‹จ์ผ ๊ฒฝ๊ธฐ) + - ํ•ด๋‹น ๊ฒฝ๊ธฐ์˜ ์šฐ์Šน์ž ๊ณ„์‚ฐํ•˜์—ฌ Winners ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ +- Winners (๋‹จ์ผ ๊ฒฝ๊ธฐ ์šฐ์Šน์ž, ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜) +- WinnerCounts (๋ˆ„์  ์šฐ์Šน์ž, ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜) + - ์ตœ์ข… ์šฐ์Šน์ž ๊ณ„์‚ฐํ•˜์—ฌ FinalWinners ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ +- FinalWinners (์ตœ์ข… ์šฐ์Šน์ž) + - ์ตœ์ข… ์šฐ์Šน์ž ์ถœ๋ ฅ์„ ์œ„ํ•œ getter +- AllGameResults (์ „์ฒด ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ) +- GameResult (๋‹จ์ผ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ) + - ๋‹จ์ผ ๊ฒฝ๊ธฐ ์šฐ์Šน์ž(Winners) ๋ฐ˜ํ™˜ +- ๋ณ€๊ฒฝ ์˜ˆ์ •... + +### Service +- RacingCarService (๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋‹ด๋‹น, ์—†์• ๊ณ  ์‹ถ๋‹ค.) + +1. ์ปจํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ ์ž๋™์ฐจ ์ด๋ฆ„์œผ๋กœ RacingCar ๊ฐ์ฒด ์ƒ์„ฑ +2. RacingCar ๊ฐ์ฒด๋“ค๋กœ AllRacingCars ๊ฐ์ฒด ์ƒ์„ฑ +2. AllRacingCars ๊ฐ์ฒด์™€ ์ปจํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ ์‹œ๋„ ํšŸ์ˆ˜๋กœ FullGame ๊ฐ์ฒด ์ƒ์„ฑ +3. FullGame ๊ฐ์ฒด ๋‚ด์—์„œ GameResult ์ƒ์„ฑํ•œ ๋’ค AllGameResults ์ƒ์„ฑ +4. AllGameResults์˜ ๊ฐ GameResult๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ์šฐ์Šน์ž๋“ค์„ ๋ชจ์•„ FinalWinners ๊ฐ์ฒด ์ƒ์„ฑ + - ๊ฐ GameResult ๊ฐ์ฒด ๋‚ด์—์„œ ํ•˜์ดํ”ˆ ๊ฐœ์ˆ˜ ๋น„๊ต +6. GameResult์—์„œ ๋‹จ์ผ ๊ฒฝ๊ธฐ ์šฐ์Šน์ž Winners ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ +7. ๋ฐ˜ํ™˜ํ•œ Winners ๊ฐ์ฒด๋“ค์„ WinnerCounts๋กœ ์ƒ์„ฑ +8. WinnerCounts์—์„œ ์ตœ์ข… ์šฐ์Šน์ž FinalWinners๋กœ ์ƒ์„ฑ ๋ฐ ๋ฐ˜ํ™˜ + + +## View + +### Input +1. ๊ฒฝ์ฃผํ•  ์ž๋™์ฐจ ์ด๋ฆ„ ์ž…๋ ฅ ๋ฐ›๊ธฐ +2. ์‹œ๋„ํ•  ํšŸ์ˆ˜ ์ž…๋ ฅ ๋ฐ›๊ธฐ + +### Output +1. ๊ฐ ์ฐจ์ˆ˜๋ณ„ ์‹คํ–‰ ๊ฒฐ๊ณผ ์ถœ๋ ฅ ํ•˜๊ธฐ +2. ๋‹จ๋… ์šฐ์Šน์ž ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ถœ๋ ฅ ํ•˜๊ธฐ or ๊ณต๋™ ์šฐ์Šน์ž ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ถœ๋ ฅ ํ•˜๊ธฐ + +## Controller +1. ๋ทฐ์—์„œ ์ž…๋ ฅ ๋ฐ›์€ ๊ฒฝ์ฃผํ•  ์ž๋™์ฐจ ์ด๋ฆ„ ํŒŒ์‹ฑ ๋ฐ ๊ฒ€์ฆ +2. ์„œ๋น„์Šค ๊ฐ์ฒด์— ์ž๋™์ฐจ ์ด๋ฆ„ ์ „๋‹ฌ +3. ๋ทฐ์—์„œ ์ž…๋ ฅ ๋ฐ›์€ ์‹œ๋„ ํšŸ์ˆ˜ ํŒŒ์‹ฑ ๋ฐ ๊ฒ€์ฆ +4. ์„œ๋น„์Šค ๊ฐ์ฒด์— ์‹œ๋„ ํšŸ์ˆ˜ ์ „๋‹ฌ +5. ์„œ๋น„์Šค ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ AllGameResults ๊ฐ์ฒด ๋ฐ›์•„ ์™€์„œ ๋ณ€ํ™˜ +6. ๋ณ€ํ™˜ํ•œ AllGameResults ๋ทฐ์—๊ฒŒ ์ „๋‹ฌ +7. ์„œ๋น„์Šค ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ FinalWinners ๋ฐ›์•„ ์™€์„œ ๋ณ€ํ™˜ +8. ๋ณ€ํ™˜ํ•œ FinalWinners ๋ทฐ์—๊ฒŒ ์ „๋‹ฌ From 11f4eb1563ee32cd268be2c84ed07c2a27148d7d Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 19:39:53 +0900 Subject: [PATCH 04/40] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=20view=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/racingcar/view/InputView.java | 9 +++++++++ src/main/java/racingcar/view/TextInputView.java | 16 ++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/main/java/racingcar/view/InputView.java create mode 100644 src/main/java/racingcar/view/TextInputView.java diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java new file mode 100644 index 0000000..193f7e2 --- /dev/null +++ b/src/main/java/racingcar/view/InputView.java @@ -0,0 +1,9 @@ +package racingcar.view; + +public interface InputView { + + String inputRacingCarsNames(); + + String inputGameCount(); + +} diff --git a/src/main/java/racingcar/view/TextInputView.java b/src/main/java/racingcar/view/TextInputView.java new file mode 100644 index 0000000..9c73003 --- /dev/null +++ b/src/main/java/racingcar/view/TextInputView.java @@ -0,0 +1,16 @@ +package racingcar.view; + +import camp.nextstep.edu.missionutils.Console; + +public class TextInputView implements InputView { + + @Override + public String inputRacingCarsNames() { + return Console.readLine(); + } + + @Override + public String inputGameCount() { + return Console.readLine(); + } +} From 9aff35ceae1308997e39820ea2b90e6f964d2335 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 20:30:06 +0900 Subject: [PATCH 05/40] =?UTF-8?q?feat:=20view=EC=97=90=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EC=95=88=EB=82=B4=20=EB=AC=B8=EA=B5=AC=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/racingcar/view/TextInputView.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/racingcar/view/TextInputView.java b/src/main/java/racingcar/view/TextInputView.java index 9c73003..34ed6b9 100644 --- a/src/main/java/racingcar/view/TextInputView.java +++ b/src/main/java/racingcar/view/TextInputView.java @@ -4,13 +4,18 @@ public class TextInputView implements InputView { + public static final String INPUT_RACING_CARS_NAME_MESSAGE = "๊ฒฝ์ฃผํ•  ์ž๋™์ฐจ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.(์ด๋ฆ„์€ ์‰ผํ‘œ(,) ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„)"; + public static final String INPUT_GAME_COUNT_MESSAGE = "์‹œ๋„ํ•  ํšŒ์ˆ˜๋Š” ๋ช‡ํšŒ์ธ๊ฐ€์š”?"; + @Override public String inputRacingCarsNames() { + System.out.println(INPUT_RACING_CARS_NAME_MESSAGE); return Console.readLine(); } @Override public String inputGameCount() { + System.out.println(INPUT_GAME_COUNT_MESSAGE); return Console.readLine(); } } From cce482ed81baf8e60adebfe4670d8f3aed9fc91a Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 20:55:53 +0900 Subject: [PATCH 06/40] =?UTF-8?q?refactor:=20view=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/view/InputView.java | 2 +- src/main/java/racingcar/view/TextInputView.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index 193f7e2..9d20a11 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -2,7 +2,7 @@ public interface InputView { - String inputRacingCarsNames(); + String inputRacingCarNames(); String inputGameCount(); diff --git a/src/main/java/racingcar/view/TextInputView.java b/src/main/java/racingcar/view/TextInputView.java index 34ed6b9..593fcea 100644 --- a/src/main/java/racingcar/view/TextInputView.java +++ b/src/main/java/racingcar/view/TextInputView.java @@ -8,7 +8,7 @@ public class TextInputView implements InputView { public static final String INPUT_GAME_COUNT_MESSAGE = "์‹œ๋„ํ•  ํšŒ์ˆ˜๋Š” ๋ช‡ํšŒ์ธ๊ฐ€์š”?"; @Override - public String inputRacingCarsNames() { + public String inputRacingCarNames() { System.out.println(INPUT_RACING_CARS_NAME_MESSAGE); return Console.readLine(); } From 3112912e189ef196294b5e2351917df172380773 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 21:05:54 +0900 Subject: [PATCH 07/40] =?UTF-8?q?feat:=20view=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EC=9D=80=20=EA=B2=BD=EC=A3=BC?= =?UTF-8?q?=ED=95=A0=20=EC=9E=90=EB=8F=99=EC=B0=A8=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=ED=9B=84=20=ED=8C=8C=EC=8B=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/controller/Controller.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/racingcar/controller/Controller.java diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java new file mode 100644 index 0000000..6b2942e --- /dev/null +++ b/src/main/java/racingcar/controller/Controller.java @@ -0,0 +1,35 @@ +package racingcar.controller; + +import static racingcar.common.ErrorMessage.ERROR_EMPTY_RACING_CAR_NAME; + +import java.util.List; +import racingcar.view.InputView; + +public class Controller { + + public static final String DELIMITER = ","; + + private final InputView inputView; + + public Controller(InputView inputView) { + this.inputView = inputView; + } + + public void run() { + String inputNames = inputView.inputRacingCarNames(); + validateInputNames(inputNames); + List carNames = splitCarNames(inputNames); + } + + private static List splitCarNames(String racingCarNames) { + List carNames = List.of(racingCarNames.split(DELIMITER)); + return carNames; + } + + private static void validateInputNames(String inputNames) { + if (inputNames.trim().isEmpty() || inputNames == null) { + throw new IllegalArgumentException(ERROR_EMPTY_RACING_CAR_NAME); + } + } + +} From 8ceb05f556d0689b673b4fb66534a5c6428a2231 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 21:06:41 +0900 Subject: [PATCH 08/40] =?UTF-8?q?feat:=20=EC=9D=98=EC=A1=B4=EC=84=B1=20?= =?UTF-8?q?=EC=A3=BC=EC=9E=85=ED=95=A0=20AppConfig=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/racingcar/AppConfig.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/racingcar/AppConfig.java diff --git a/src/main/java/racingcar/AppConfig.java b/src/main/java/racingcar/AppConfig.java new file mode 100644 index 0000000..4386881 --- /dev/null +++ b/src/main/java/racingcar/AppConfig.java @@ -0,0 +1,17 @@ +package racingcar; + +import racingcar.controller.Controller; +import racingcar.view.InputView; +import racingcar.view.TextInputView; + +public class AppConfig { + + public Controller controller() { + return new Controller(inputView()); + } + + private InputView inputView() { + return new TextInputView(); + } + +} From cf0a9378c2657a446fc511c19c4f624ff6180435 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 21:06:59 +0900 Subject: [PATCH 09/40] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..4261695 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,11 @@ package racingcar; +import racingcar.controller.Controller; + public class Application { public static void main(String[] args) { - // TODO: ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ + AppConfig appConfig = new AppConfig(); + Controller controller = appConfig.controller(); + controller.run(); } } From edb68dcf290c55161cc216d5d80912b4c1391961 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 21:07:18 +0900 Subject: [PATCH 10/40] =?UTF-8?q?feat:=20=EC=97=90=EB=9F=AC=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EA=B4=80=EB=A6=AC=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/common/ErrorMessage.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/java/racingcar/common/ErrorMessage.java diff --git a/src/main/java/racingcar/common/ErrorMessage.java b/src/main/java/racingcar/common/ErrorMessage.java new file mode 100644 index 0000000..acf3fa4 --- /dev/null +++ b/src/main/java/racingcar/common/ErrorMessage.java @@ -0,0 +1,7 @@ +package racingcar.common; + +public class ErrorMessage { + + public static final String ERROR_EMPTY_RACING_CAR_NAME = "[ERROR] ์ž…๋ ฅ๋œ ์ž๋™์ฐจ ์ด๋ฆ„์ด ์—†์Šต๋‹ˆ๋‹ค."; + public static final String ERROR_SINGLE_RACING_CAR_NAME = "[ERROR] ํ•œ ๋Œ€์˜ ์ž๋™์ฐจ๋กœ๋Š” ๊ฒฝ๊ธฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."; +} From fc5513c225a038988991fb9f978bc84b562cf49b Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 21:26:44 +0900 Subject: [PATCH 11/40] =?UTF-8?q?feat:=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=EB=A1=9C=EB=B6=80=ED=84=B0=20=EC=A0=84=EB=8B=AC=20?= =?UTF-8?q?=EB=B0=9B=EC=9D=80=20=EC=9D=B4=EB=A6=84=EB=93=A4=EB=A1=9C=20Rac?= =?UTF-8?q?ingCar=20=EA=B0=9D=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/racingcar/model/RacingCar.java | 14 ++++++++++++++ .../java/racingcar/model/RacingCarService.java | 9 +++++++++ .../racingcar/model/RacingCarServiceImpl.java | 15 +++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 src/main/java/racingcar/model/RacingCar.java create mode 100644 src/main/java/racingcar/model/RacingCarService.java create mode 100644 src/main/java/racingcar/model/RacingCarServiceImpl.java diff --git a/src/main/java/racingcar/model/RacingCar.java b/src/main/java/racingcar/model/RacingCar.java new file mode 100644 index 0000000..6b12476 --- /dev/null +++ b/src/main/java/racingcar/model/RacingCar.java @@ -0,0 +1,14 @@ +package racingcar.model; + +public class RacingCar { + + private final String name; + + public RacingCar(String name) { + this.name = name; + } + + public String getName() { + return this.name; + } +} diff --git a/src/main/java/racingcar/model/RacingCarService.java b/src/main/java/racingcar/model/RacingCarService.java new file mode 100644 index 0000000..3238bfd --- /dev/null +++ b/src/main/java/racingcar/model/RacingCarService.java @@ -0,0 +1,9 @@ +package racingcar.model; + +import java.util.List; + +public interface RacingCarService { + + void createRacingCars(List carNames); + +} diff --git a/src/main/java/racingcar/model/RacingCarServiceImpl.java b/src/main/java/racingcar/model/RacingCarServiceImpl.java new file mode 100644 index 0000000..36d4bfe --- /dev/null +++ b/src/main/java/racingcar/model/RacingCarServiceImpl.java @@ -0,0 +1,15 @@ +package racingcar.model; + +import java.util.List; + +public class RacingCarServiceImpl implements RacingCarService { + + @Override + public void createRacingCars(List carNames) { + convertToRacingCar(carNames); + } + + private static List convertToRacingCar(List carNames) { + return carNames.stream().map(RacingCar::new).toList(); + } +} From 355510d928e299e31d42bf81725cd5ae091dbe83 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 21:27:25 +0900 Subject: [PATCH 12/40] =?UTF-8?q?feat:=20RacingCar=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EB=93=A4=EB=A1=9C=20AllRacingCars=20=EA=B0=9D=EC=B2=B4=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/racingcar/model/AllRacingCars.java | 17 +++++++++++++++++ .../racingcar/model/RacingCarServiceImpl.java | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/main/java/racingcar/model/AllRacingCars.java diff --git a/src/main/java/racingcar/model/AllRacingCars.java b/src/main/java/racingcar/model/AllRacingCars.java new file mode 100644 index 0000000..ba68401 --- /dev/null +++ b/src/main/java/racingcar/model/AllRacingCars.java @@ -0,0 +1,17 @@ +package racingcar.model; + +import java.util.List; + +public class AllRacingCars { + + private final List cars; + + public AllRacingCars(List cars) { + this.cars = cars; + } + + public List getRacingCars() { + return cars; + } + +} diff --git a/src/main/java/racingcar/model/RacingCarServiceImpl.java b/src/main/java/racingcar/model/RacingCarServiceImpl.java index 36d4bfe..356f083 100644 --- a/src/main/java/racingcar/model/RacingCarServiceImpl.java +++ b/src/main/java/racingcar/model/RacingCarServiceImpl.java @@ -6,7 +6,7 @@ public class RacingCarServiceImpl implements RacingCarService { @Override public void createRacingCars(List carNames) { - convertToRacingCar(carNames); + AllRacingCars allRacingCars = new AllRacingCars(convertToRacingCar(carNames)); } private static List convertToRacingCar(List carNames) { From 7bfc90b90a77715dae1d6d1985b842d8e55b6db3 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 21:51:09 +0900 Subject: [PATCH 13/40] =?UTF-8?q?feat:=20=EB=B7=B0=EB=A1=9C=EB=B6=80?= =?UTF-8?q?=ED=84=B0=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EC=9D=80=20=EC=8B=9C?= =?UTF-8?q?=EB=8F=84=20=ED=9A=9F=EC=88=98=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=EC=97=90=EC=84=9C=20=EA=B2=80=EC=A6=9D=20=ED=9B=84=20?= =?UTF-8?q?=ED=8C=8C=EC=8B=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/controller/Controller.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index 6b2942e..29bed21 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -1,24 +1,43 @@ package racingcar.controller; +import static racingcar.common.ErrorMessage.ERROR_EMPTY_GAME_COUNT; import static racingcar.common.ErrorMessage.ERROR_EMPTY_RACING_CAR_NAME; +import static racingcar.common.ErrorMessage.ERROR_GAME_COUNT_FORMAT; import java.util.List; +import racingcar.model.RacingCarService; import racingcar.view.InputView; public class Controller { public static final String DELIMITER = ","; + public static final String NUMERIC_REGEX = "\\d+"; private final InputView inputView; + private final RacingCarService racingCarService; - public Controller(InputView inputView) { + public Controller(InputView inputView, RacingCarService racingCarService) { this.inputView = inputView; + this.racingCarService = racingCarService; } public void run() { String inputNames = inputView.inputRacingCarNames(); validateInputNames(inputNames); List carNames = splitCarNames(inputNames); + + String inputCount = inputView.inputGameCount(); + validateInputCount(inputCount); + int gameCount = Integer.parseInt(inputCount); + } + + private void validateInputCount(String inputCount) { + if (inputCount.trim().isEmpty() || inputCount == null) { + throw new IllegalArgumentException(ERROR_EMPTY_GAME_COUNT); + } + if (!inputCount.matches(NUMERIC_REGEX)) { + throw new IllegalArgumentException(ERROR_GAME_COUNT_FORMAT); + } } private static List splitCarNames(String racingCarNames) { From 2cd1a849da6aefca4371f9682125f320c6754e58 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 21:51:55 +0900 Subject: [PATCH 14/40] =?UTF-8?q?feat:=20AppConfig=EC=97=90=EC=84=9C=20Rac?= =?UTF-8?q?ingCarService=20=EC=A3=BC=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/AppConfig.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/AppConfig.java b/src/main/java/racingcar/AppConfig.java index 4386881..c66a1e4 100644 --- a/src/main/java/racingcar/AppConfig.java +++ b/src/main/java/racingcar/AppConfig.java @@ -1,17 +1,22 @@ package racingcar; import racingcar.controller.Controller; +import racingcar.model.RacingCarService; +import racingcar.model.RacingCarServiceImpl; import racingcar.view.InputView; import racingcar.view.TextInputView; public class AppConfig { public Controller controller() { - return new Controller(inputView()); + return new Controller(inputView(), racingCarService()); } private InputView inputView() { return new TextInputView(); } + private RacingCarService racingCarService() { + return new RacingCarServiceImpl(); + } } From ffea020cda5ce5a5cc06121d0aacb995487c3494 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 22:05:02 +0900 Subject: [PATCH 15/40] =?UTF-8?q?rename:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=EB=93=A4=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/{ => domain}/AllRacingCars.java | 2 +- src/main/java/racingcar/model/{ => domain}/RacingCar.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/java/racingcar/model/{ => domain}/AllRacingCars.java (88%) rename src/main/java/racingcar/model/{ => domain}/RacingCar.java (85%) diff --git a/src/main/java/racingcar/model/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java similarity index 88% rename from src/main/java/racingcar/model/AllRacingCars.java rename to src/main/java/racingcar/model/domain/AllRacingCars.java index ba68401..ae3026c 100644 --- a/src/main/java/racingcar/model/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -1,4 +1,4 @@ -package racingcar.model; +package racingcar.model.domain; import java.util.List; diff --git a/src/main/java/racingcar/model/RacingCar.java b/src/main/java/racingcar/model/domain/RacingCar.java similarity index 85% rename from src/main/java/racingcar/model/RacingCar.java rename to src/main/java/racingcar/model/domain/RacingCar.java index 6b12476..b014562 100644 --- a/src/main/java/racingcar/model/RacingCar.java +++ b/src/main/java/racingcar/model/domain/RacingCar.java @@ -1,4 +1,4 @@ -package racingcar.model; +package racingcar.model.domain; public class RacingCar { From a6bf57eb0d9841a205e25a44c1909fb5a338f542 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Fri, 4 Apr 2025 22:06:33 +0900 Subject: [PATCH 16/40] =?UTF-8?q?feat:=20AllRacingCars=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=EC=99=80=20=EC=8B=9C=EB=8F=84=20=ED=9A=9F=EC=88=98?= =?UTF-8?q?=EB=A1=9C=20FullGame=20=EA=B0=9D=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/racingcar/controller/Controller.java | 4 ++++ src/main/java/racingcar/model/RacingCarService.java | 5 ++++- .../java/racingcar/model/RacingCarServiceImpl.java | 12 ++++++++++-- src/main/java/racingcar/model/domain/FullGame.java | 13 +++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/main/java/racingcar/model/domain/FullGame.java diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index 29bed21..21395bd 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -5,7 +5,9 @@ import static racingcar.common.ErrorMessage.ERROR_GAME_COUNT_FORMAT; import java.util.List; +import racingcar.model.domain.AllRacingCars; import racingcar.model.RacingCarService; +import racingcar.model.domain.FullGame; import racingcar.view.InputView; public class Controller { @@ -25,10 +27,12 @@ public void run() { String inputNames = inputView.inputRacingCarNames(); validateInputNames(inputNames); List carNames = splitCarNames(inputNames); + AllRacingCars allRacingCars = racingCarService.createRacingCars(carNames); String inputCount = inputView.inputGameCount(); validateInputCount(inputCount); int gameCount = Integer.parseInt(inputCount); + FullGame fullGame = racingCarService.createFullGame(allRacingCars, gameCount); } private void validateInputCount(String inputCount) { diff --git a/src/main/java/racingcar/model/RacingCarService.java b/src/main/java/racingcar/model/RacingCarService.java index 3238bfd..a4ff49c 100644 --- a/src/main/java/racingcar/model/RacingCarService.java +++ b/src/main/java/racingcar/model/RacingCarService.java @@ -1,9 +1,12 @@ package racingcar.model; import java.util.List; +import racingcar.model.domain.AllRacingCars; +import racingcar.model.domain.FullGame; public interface RacingCarService { - void createRacingCars(List carNames); + AllRacingCars createRacingCars(List carNames); + FullGame createFullGame(AllRacingCars allRacingCars, int GameCount); } diff --git a/src/main/java/racingcar/model/RacingCarServiceImpl.java b/src/main/java/racingcar/model/RacingCarServiceImpl.java index 356f083..5a4bbb4 100644 --- a/src/main/java/racingcar/model/RacingCarServiceImpl.java +++ b/src/main/java/racingcar/model/RacingCarServiceImpl.java @@ -1,12 +1,20 @@ package racingcar.model; import java.util.List; +import racingcar.model.domain.AllRacingCars; +import racingcar.model.domain.FullGame; +import racingcar.model.domain.RacingCar; public class RacingCarServiceImpl implements RacingCarService { @Override - public void createRacingCars(List carNames) { - AllRacingCars allRacingCars = new AllRacingCars(convertToRacingCar(carNames)); + public AllRacingCars createRacingCars(List carNames) { + return new AllRacingCars(convertToRacingCar(carNames)); + } + + @Override + public FullGame createFullGame(AllRacingCars allRacingCars, int gameCount) { + return new FullGame(allRacingCars, gameCount); } private static List convertToRacingCar(List carNames) { diff --git a/src/main/java/racingcar/model/domain/FullGame.java b/src/main/java/racingcar/model/domain/FullGame.java new file mode 100644 index 0000000..06616d0 --- /dev/null +++ b/src/main/java/racingcar/model/domain/FullGame.java @@ -0,0 +1,13 @@ +package racingcar.model.domain; + +public class FullGame { + + private final AllRacingCars allRacingCars; + private final int gameCount; + + public FullGame(AllRacingCars allRacingCars, int gameCount) { + this.allRacingCars = allRacingCars; + this.gameCount = gameCount; + } + +} From fea1bfc9144253ff1ef823a1b0a93bb7cf779731 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sat, 5 Apr 2025 18:13:43 +0900 Subject: [PATCH 17/40] =?UTF-8?q?refactor:=20=EC=84=9C=EB=B9=84=EC=8A=A4?= =?UTF-8?q?=20=EB=A0=88=EC=9D=B4=EC=96=B4=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/racingcar/AppConfig.java | 8 +------ .../racingcar/model/RacingCarService.java | 12 ---------- .../racingcar/model/RacingCarServiceImpl.java | 23 ------------------- 3 files changed, 1 insertion(+), 42 deletions(-) delete mode 100644 src/main/java/racingcar/model/RacingCarService.java delete mode 100644 src/main/java/racingcar/model/RacingCarServiceImpl.java diff --git a/src/main/java/racingcar/AppConfig.java b/src/main/java/racingcar/AppConfig.java index c66a1e4..3be5249 100644 --- a/src/main/java/racingcar/AppConfig.java +++ b/src/main/java/racingcar/AppConfig.java @@ -1,22 +1,16 @@ package racingcar; import racingcar.controller.Controller; -import racingcar.model.RacingCarService; -import racingcar.model.RacingCarServiceImpl; import racingcar.view.InputView; import racingcar.view.TextInputView; public class AppConfig { public Controller controller() { - return new Controller(inputView(), racingCarService()); + return new Controller(inputView()); } private InputView inputView() { return new TextInputView(); } - - private RacingCarService racingCarService() { - return new RacingCarServiceImpl(); - } } diff --git a/src/main/java/racingcar/model/RacingCarService.java b/src/main/java/racingcar/model/RacingCarService.java deleted file mode 100644 index a4ff49c..0000000 --- a/src/main/java/racingcar/model/RacingCarService.java +++ /dev/null @@ -1,12 +0,0 @@ -package racingcar.model; - -import java.util.List; -import racingcar.model.domain.AllRacingCars; -import racingcar.model.domain.FullGame; - -public interface RacingCarService { - - AllRacingCars createRacingCars(List carNames); - - FullGame createFullGame(AllRacingCars allRacingCars, int GameCount); -} diff --git a/src/main/java/racingcar/model/RacingCarServiceImpl.java b/src/main/java/racingcar/model/RacingCarServiceImpl.java deleted file mode 100644 index 5a4bbb4..0000000 --- a/src/main/java/racingcar/model/RacingCarServiceImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package racingcar.model; - -import java.util.List; -import racingcar.model.domain.AllRacingCars; -import racingcar.model.domain.FullGame; -import racingcar.model.domain.RacingCar; - -public class RacingCarServiceImpl implements RacingCarService { - - @Override - public AllRacingCars createRacingCars(List carNames) { - return new AllRacingCars(convertToRacingCar(carNames)); - } - - @Override - public FullGame createFullGame(AllRacingCars allRacingCars, int gameCount) { - return new FullGame(allRacingCars, gameCount); - } - - private static List convertToRacingCar(List carNames) { - return carNames.stream().map(RacingCar::new).toList(); - } -} From 1abc32c72e06a4c306a286c9cfc9fcd6171cf98f Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sat, 5 Apr 2025 18:36:34 +0900 Subject: [PATCH 18/40] =?UTF-8?q?refactor:=20=EC=84=9C=EB=B9=84=EC=8A=A4?= =?UTF-8?q?=20=EB=8B=A4=EC=8B=9C=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/racingcar/AppConfig.java | 8 +++++++- .../java/racingcar/controller/Controller.java | 4 ++-- .../model/service/RacingCarService.java | 12 ++++++++++++ .../model/service/RacingCarServiceImpl.java | 18 ++++++++++++++++++ 4 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 src/main/java/racingcar/model/service/RacingCarService.java create mode 100644 src/main/java/racingcar/model/service/RacingCarServiceImpl.java diff --git a/src/main/java/racingcar/AppConfig.java b/src/main/java/racingcar/AppConfig.java index 3be5249..4d8d3ec 100644 --- a/src/main/java/racingcar/AppConfig.java +++ b/src/main/java/racingcar/AppConfig.java @@ -1,16 +1,22 @@ package racingcar; import racingcar.controller.Controller; +import racingcar.model.service.RacingCarService; +import racingcar.model.service.RacingCarServiceImpl; import racingcar.view.InputView; import racingcar.view.TextInputView; public class AppConfig { public Controller controller() { - return new Controller(inputView()); + return new Controller(inputView(), racingCarService()); } private InputView inputView() { return new TextInputView(); } + + private RacingCarService racingCarService() { + return new RacingCarServiceImpl(); + } } diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index 21395bd..50d2715 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -6,8 +6,8 @@ import java.util.List; import racingcar.model.domain.AllRacingCars; -import racingcar.model.RacingCarService; import racingcar.model.domain.FullGame; +import racingcar.model.service.RacingCarService; import racingcar.view.InputView; public class Controller { @@ -27,7 +27,7 @@ public void run() { String inputNames = inputView.inputRacingCarNames(); validateInputNames(inputNames); List carNames = splitCarNames(inputNames); - AllRacingCars allRacingCars = racingCarService.createRacingCars(carNames); + AllRacingCars allRacingCars = racingCarService.createAllRacingCars(carNames); String inputCount = inputView.inputGameCount(); validateInputCount(inputCount); diff --git a/src/main/java/racingcar/model/service/RacingCarService.java b/src/main/java/racingcar/model/service/RacingCarService.java new file mode 100644 index 0000000..dccac05 --- /dev/null +++ b/src/main/java/racingcar/model/service/RacingCarService.java @@ -0,0 +1,12 @@ +package racingcar.model.service; + +import java.util.List; +import racingcar.model.domain.AllRacingCars; +import racingcar.model.domain.FullGame; + +public interface RacingCarService { + + AllRacingCars createAllRacingCars(List carNames); + + FullGame createFullGame(AllRacingCars allRacingCars, int gameCount); +} diff --git a/src/main/java/racingcar/model/service/RacingCarServiceImpl.java b/src/main/java/racingcar/model/service/RacingCarServiceImpl.java new file mode 100644 index 0000000..10879a6 --- /dev/null +++ b/src/main/java/racingcar/model/service/RacingCarServiceImpl.java @@ -0,0 +1,18 @@ +package racingcar.model.service; + +import java.util.List; +import racingcar.model.domain.AllRacingCars; +import racingcar.model.domain.FullGame; + +public class RacingCarServiceImpl implements RacingCarService { + + @Override + public AllRacingCars createAllRacingCars(List carNames) { + return new AllRacingCars(carNames); + } + + @Override + public FullGame createFullGame(AllRacingCars allRacingCars, int gameCount) { + return new FullGame(allRacingCars, gameCount); + } +} From ad8b7b49ec8e3940546e6f217f3c55577dcebfc9 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sat, 5 Apr 2025 18:43:00 +0900 Subject: [PATCH 19/40] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=20=EB=B0=8F=20=EA=B2=8C=EC=9E=84=20=EA=B2=B0=EA=B3=BC?= =?UTF-8?q?=20=EA=B8=B0=EB=A1=9D=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/controller/Controller.java | 2 ++ .../racingcar/model/domain/AllRacingCars.java | 18 ++++++++++++++---- .../java/racingcar/model/domain/FullGame.java | 8 ++++++++ src/main/java/racingcar/model/domain/Game.java | 13 +++++++++++++ .../racingcar/model/domain/GameRecords.java | 13 +++++++++++++ 5 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 src/main/java/racingcar/model/domain/Game.java create mode 100644 src/main/java/racingcar/model/domain/GameRecords.java diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index 50d2715..d9ae5d7 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -7,6 +7,7 @@ import java.util.List; import racingcar.model.domain.AllRacingCars; import racingcar.model.domain.FullGame; +import racingcar.model.domain.GameRecords; import racingcar.model.service.RacingCarService; import racingcar.view.InputView; @@ -33,6 +34,7 @@ public void run() { validateInputCount(inputCount); int gameCount = Integer.parseInt(inputCount); FullGame fullGame = racingCarService.createFullGame(allRacingCars, gameCount); + GameRecords gameRecords = fullGame.startGame(); } private void validateInputCount(String inputCount) { diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index ae3026c..58701e0 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -1,17 +1,27 @@ package racingcar.model.domain; +import camp.nextstep.edu.missionutils.Randoms; import java.util.List; + public class AllRacingCars { private final List cars; - public AllRacingCars(List cars) { - this.cars = cars; + public AllRacingCars(List carNames) { + this.cars = convertToRacingCar(carNames); } - public List getRacingCars() { - return cars; + public void play(GameRecords gameRecords, int round, Game game) { + for (RacingCar car : cars) { + if (Randoms.pickNumberInRange(0,9) > 4) { + game.move(car); + } + } + gameRecords.record(round, game); } + private static List convertToRacingCar(List carNames) { + return carNames.stream().map(RacingCar::new).toList(); + } } diff --git a/src/main/java/racingcar/model/domain/FullGame.java b/src/main/java/racingcar/model/domain/FullGame.java index 06616d0..dca5fb8 100644 --- a/src/main/java/racingcar/model/domain/FullGame.java +++ b/src/main/java/racingcar/model/domain/FullGame.java @@ -10,4 +10,12 @@ public FullGame(AllRacingCars allRacingCars, int gameCount) { this.gameCount = gameCount; } + public GameRecords startGame() { + Game game = new Game(); + GameRecords gameRecords = new GameRecords(); + for (int round = 0; round < gameCount; round++) { + allRacingCars.play(gameRecords, round, game); + } + return gameRecords; + } } diff --git a/src/main/java/racingcar/model/domain/Game.java b/src/main/java/racingcar/model/domain/Game.java new file mode 100644 index 0000000..4bfb44d --- /dev/null +++ b/src/main/java/racingcar/model/domain/Game.java @@ -0,0 +1,13 @@ +package racingcar.model.domain; + +import java.util.HashMap; +import java.util.Map; + +public class Game { + + private final Map game = new HashMap<>(); + + public void move(RacingCar car) { + game.put(car, game.getOrDefault(car, 0) + 1); + } +} diff --git a/src/main/java/racingcar/model/domain/GameRecords.java b/src/main/java/racingcar/model/domain/GameRecords.java new file mode 100644 index 0000000..399f79d --- /dev/null +++ b/src/main/java/racingcar/model/domain/GameRecords.java @@ -0,0 +1,13 @@ +package racingcar.model.domain; + +import java.util.HashMap; +import java.util.Map; + +public class GameRecords { + + private final Map gameRecords = new HashMap<>(); + + public void record(int round, Game game) { + gameRecords.put(round, game); + } +} From 2aa8fba2847a0c95b271dc0cafadb10ceb8aef9c Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sat, 5 Apr 2025 18:47:44 +0900 Subject: [PATCH 20/40] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20=EB=B0=8F=20=EC=B1=85=EC=9E=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/domain/AllRacingCars.java | 6 ++---- src/main/java/racingcar/model/domain/FullGame.java | 2 +- src/main/java/racingcar/model/domain/Game.java | 7 +++++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index 58701e0..f132bd2 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -12,11 +12,9 @@ public AllRacingCars(List carNames) { this.cars = convertToRacingCar(carNames); } - public void play(GameRecords gameRecords, int round, Game game) { + public void playOneRound(GameRecords gameRecords, int round, Game game) { for (RacingCar car : cars) { - if (Randoms.pickNumberInRange(0,9) > 4) { - game.move(car); - } + game.play(car); } gameRecords.record(round, game); } diff --git a/src/main/java/racingcar/model/domain/FullGame.java b/src/main/java/racingcar/model/domain/FullGame.java index dca5fb8..0969eed 100644 --- a/src/main/java/racingcar/model/domain/FullGame.java +++ b/src/main/java/racingcar/model/domain/FullGame.java @@ -14,7 +14,7 @@ public GameRecords startGame() { Game game = new Game(); GameRecords gameRecords = new GameRecords(); for (int round = 0; round < gameCount; round++) { - allRacingCars.play(gameRecords, round, game); + allRacingCars.playOneRound(gameRecords, round, game); } return gameRecords; } diff --git a/src/main/java/racingcar/model/domain/Game.java b/src/main/java/racingcar/model/domain/Game.java index 4bfb44d..7fc0b3e 100644 --- a/src/main/java/racingcar/model/domain/Game.java +++ b/src/main/java/racingcar/model/domain/Game.java @@ -1,5 +1,6 @@ package racingcar.model.domain; +import camp.nextstep.edu.missionutils.Randoms; import java.util.HashMap; import java.util.Map; @@ -7,7 +8,9 @@ public class Game { private final Map game = new HashMap<>(); - public void move(RacingCar car) { - game.put(car, game.getOrDefault(car, 0) + 1); + public void play(RacingCar car) { + if (Randoms.pickNumberInRange(0,9) > 4) { + game.put(car, game.getOrDefault(car, 0) + 1); + } } } From df376e5fa921733f829478ef8e80183cf2e26d55 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sat, 5 Apr 2025 18:56:39 +0900 Subject: [PATCH 21/40] =?UTF-8?q?feat:=20=EC=B6=9C=EB=A0=A5=EC=9D=84=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20OutputView=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/racingcar/AppConfig.java | 8 ++++++- .../java/racingcar/controller/Controller.java | 5 ++++- src/main/java/racingcar/view/OutputView.java | 10 +++++++++ .../java/racingcar/view/TextOutputView.java | 22 +++++++++++++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/main/java/racingcar/view/OutputView.java create mode 100644 src/main/java/racingcar/view/TextOutputView.java diff --git a/src/main/java/racingcar/AppConfig.java b/src/main/java/racingcar/AppConfig.java index 4d8d3ec..8f7c407 100644 --- a/src/main/java/racingcar/AppConfig.java +++ b/src/main/java/racingcar/AppConfig.java @@ -4,18 +4,24 @@ import racingcar.model.service.RacingCarService; import racingcar.model.service.RacingCarServiceImpl; import racingcar.view.InputView; +import racingcar.view.OutputView; import racingcar.view.TextInputView; +import racingcar.view.TextOutputView; public class AppConfig { public Controller controller() { - return new Controller(inputView(), racingCarService()); + return new Controller(inputView(), outputView(), racingCarService()); } private InputView inputView() { return new TextInputView(); } + private OutputView outputView() { + return new TextOutputView(); + } + private RacingCarService racingCarService() { return new RacingCarServiceImpl(); } diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index d9ae5d7..4d003de 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -10,6 +10,7 @@ import racingcar.model.domain.GameRecords; import racingcar.model.service.RacingCarService; import racingcar.view.InputView; +import racingcar.view.OutputView; public class Controller { @@ -17,10 +18,12 @@ public class Controller { public static final String NUMERIC_REGEX = "\\d+"; private final InputView inputView; + private final OutputView outputView; private final RacingCarService racingCarService; - public Controller(InputView inputView, RacingCarService racingCarService) { + public Controller(InputView inputView, OutputView outputView, RacingCarService racingCarService) { this.inputView = inputView; + this.outputView = outputView; this.racingCarService = racingCarService; } diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java new file mode 100644 index 0000000..bf03ada --- /dev/null +++ b/src/main/java/racingcar/view/OutputView.java @@ -0,0 +1,10 @@ +package racingcar.view; + +import java.util.List; + +public interface OutputView { + + void outputGameRecords(List gameRecords); + + void outputFinalWinners(String winners); +} diff --git a/src/main/java/racingcar/view/TextOutputView.java b/src/main/java/racingcar/view/TextOutputView.java new file mode 100644 index 0000000..8589721 --- /dev/null +++ b/src/main/java/racingcar/view/TextOutputView.java @@ -0,0 +1,22 @@ +package racingcar.view; + +import java.util.List; + +public class TextOutputView implements OutputView { + + public static final String GAME_RECORDS_MESSAGE = "์‹คํ–‰ ๊ฒฐ๊ณผ"; + public static final String FINAL_WINNERS_MESSAGE = "์ตœ์ข… ์šฐ์Šน์ž : "; + + @Override + public void outputGameRecords(List gameRecords) { + System.out.println(GAME_RECORDS_MESSAGE); + for (String gameRecord : gameRecords) { + System.out.println(gameRecord); + } + } + + @Override + public void outputFinalWinners(String winners) { + System.out.println(FINAL_WINNERS_MESSAGE + winners); + } +} From 5a0454649e6149a5cc4a4725304e4c0efb8793d0 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sat, 5 Apr 2025 19:33:56 +0900 Subject: [PATCH 22/40] =?UTF-8?q?feat:=20=EC=B6=9C=EB=A0=A5=EC=9D=84=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20DTO=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/controller/Controller.java | 5 +++++ src/main/java/racingcar/model/domain/Game.java | 9 +++++++++ .../java/racingcar/model/domain/GameRecords.java | 10 ++++++++++ .../java/racingcar/model/dto/GameResultDto.java | 16 ++++++++++++++++ .../java/racingcar/model/dto/RoundResultDto.java | 16 ++++++++++++++++ .../model/service/RacingCarService.java | 4 ++++ .../model/service/RacingCarServiceImpl.java | 7 +++++++ src/main/java/racingcar/view/OutputView.java | 5 +++-- src/main/java/racingcar/view/TextOutputView.java | 7 ++----- 9 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 src/main/java/racingcar/model/dto/GameResultDto.java create mode 100644 src/main/java/racingcar/model/dto/RoundResultDto.java diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index 4d003de..7f2f393 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -8,6 +8,7 @@ import racingcar.model.domain.AllRacingCars; import racingcar.model.domain.FullGame; import racingcar.model.domain.GameRecords; +import racingcar.model.dto.GameResultDto; import racingcar.model.service.RacingCarService; import racingcar.view.InputView; import racingcar.view.OutputView; @@ -37,7 +38,11 @@ public void run() { validateInputCount(inputCount); int gameCount = Integer.parseInt(inputCount); FullGame fullGame = racingCarService.createFullGame(allRacingCars, gameCount); + GameRecords gameRecords = fullGame.startGame(); + GameResultDto gameResultDto = racingCarService.getGameResult(gameRecords); + + outputView.outputGameRecords(gameResultDto); } private void validateInputCount(String inputCount) { diff --git a/src/main/java/racingcar/model/domain/Game.java b/src/main/java/racingcar/model/domain/Game.java index 7fc0b3e..a5284f8 100644 --- a/src/main/java/racingcar/model/domain/Game.java +++ b/src/main/java/racingcar/model/domain/Game.java @@ -3,6 +3,7 @@ import camp.nextstep.edu.missionutils.Randoms; import java.util.HashMap; import java.util.Map; +import racingcar.model.dto.RoundResultDto; public class Game { @@ -13,4 +14,12 @@ public void play(RacingCar car) { game.put(car, game.getOrDefault(car, 0) + 1); } } + + public RoundResultDto toDto() { + Map result = new HashMap<>(); + for (Map.Entry entry : game.entrySet()) { + result.put(entry.getKey().getName(), entry.getValue()); + } + return new RoundResultDto(result); + } } diff --git a/src/main/java/racingcar/model/domain/GameRecords.java b/src/main/java/racingcar/model/domain/GameRecords.java index 399f79d..ecea5c4 100644 --- a/src/main/java/racingcar/model/domain/GameRecords.java +++ b/src/main/java/racingcar/model/domain/GameRecords.java @@ -2,6 +2,8 @@ import java.util.HashMap; import java.util.Map; +import racingcar.model.dto.GameResultDto; +import racingcar.model.dto.RoundResultDto; public class GameRecords { @@ -10,4 +12,12 @@ public class GameRecords { public void record(int round, Game game) { gameRecords.put(round, game); } + + public GameResultDto toDto() { + Map result = new HashMap<>(); + for (Map.Entry entry : gameRecords.entrySet()) { + result.put(entry.getKey(), entry.getValue().toDto()); + } + return new GameResultDto(result); + } } diff --git a/src/main/java/racingcar/model/dto/GameResultDto.java b/src/main/java/racingcar/model/dto/GameResultDto.java new file mode 100644 index 0000000..c05b5ba --- /dev/null +++ b/src/main/java/racingcar/model/dto/GameResultDto.java @@ -0,0 +1,16 @@ +package racingcar.model.dto; + +import java.util.Map; + +public class GameResultDto { + + private final Map gameResult; + + public GameResultDto(Map gameResult) { + this.gameResult = gameResult; + } + + public Map getGameResult() { + return gameResult; + } +} diff --git a/src/main/java/racingcar/model/dto/RoundResultDto.java b/src/main/java/racingcar/model/dto/RoundResultDto.java new file mode 100644 index 0000000..b6a54a0 --- /dev/null +++ b/src/main/java/racingcar/model/dto/RoundResultDto.java @@ -0,0 +1,16 @@ +package racingcar.model.dto; + +import java.util.Map; + +public class RoundResultDto { + + private final Map roundResult; + + public RoundResultDto(Map roundResult) { + this.roundResult = roundResult; + } + + public Map getRoundResult() { + return roundResult; + } +} diff --git a/src/main/java/racingcar/model/service/RacingCarService.java b/src/main/java/racingcar/model/service/RacingCarService.java index dccac05..ff1609c 100644 --- a/src/main/java/racingcar/model/service/RacingCarService.java +++ b/src/main/java/racingcar/model/service/RacingCarService.java @@ -3,10 +3,14 @@ import java.util.List; import racingcar.model.domain.AllRacingCars; import racingcar.model.domain.FullGame; +import racingcar.model.domain.GameRecords; +import racingcar.model.dto.GameResultDto; public interface RacingCarService { AllRacingCars createAllRacingCars(List carNames); FullGame createFullGame(AllRacingCars allRacingCars, int gameCount); + + GameResultDto getGameResult(GameRecords gameRecords); } diff --git a/src/main/java/racingcar/model/service/RacingCarServiceImpl.java b/src/main/java/racingcar/model/service/RacingCarServiceImpl.java index 10879a6..311db39 100644 --- a/src/main/java/racingcar/model/service/RacingCarServiceImpl.java +++ b/src/main/java/racingcar/model/service/RacingCarServiceImpl.java @@ -3,6 +3,8 @@ import java.util.List; import racingcar.model.domain.AllRacingCars; import racingcar.model.domain.FullGame; +import racingcar.model.domain.GameRecords; +import racingcar.model.dto.GameResultDto; public class RacingCarServiceImpl implements RacingCarService { @@ -15,4 +17,9 @@ public AllRacingCars createAllRacingCars(List carNames) { public FullGame createFullGame(AllRacingCars allRacingCars, int gameCount) { return new FullGame(allRacingCars, gameCount); } + + @Override + public GameResultDto getGameResult(GameRecords gameRecords) { + return gameRecords.toDto(); + } } diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index bf03ada..318743d 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -1,10 +1,11 @@ package racingcar.view; -import java.util.List; +import java.util.Map; +import racingcar.model.dto.GameResultDto; public interface OutputView { - void outputGameRecords(List gameRecords); + void outputGameRecords(GameResultDto gameResultDto); void outputFinalWinners(String winners); } diff --git a/src/main/java/racingcar/view/TextOutputView.java b/src/main/java/racingcar/view/TextOutputView.java index 8589721..eac2db2 100644 --- a/src/main/java/racingcar/view/TextOutputView.java +++ b/src/main/java/racingcar/view/TextOutputView.java @@ -1,6 +1,6 @@ package racingcar.view; -import java.util.List; +import racingcar.model.dto.GameResultDto; public class TextOutputView implements OutputView { @@ -8,11 +8,8 @@ public class TextOutputView implements OutputView { public static final String FINAL_WINNERS_MESSAGE = "์ตœ์ข… ์šฐ์Šน์ž : "; @Override - public void outputGameRecords(List gameRecords) { + public void outputGameRecords(GameResultDto gameResultDto) { System.out.println(GAME_RECORDS_MESSAGE); - for (String gameRecord : gameRecords) { - System.out.println(gameRecord); - } } @Override From 39d11128794b5841596e3b69167cf34b240661e1 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 03:03:23 +0900 Subject: [PATCH 23/40] =?UTF-8?q?fix:=20=EA=B2=8C=EC=9E=84=20=EA=B8=B0?= =?UTF-8?q?=EB=A1=9D=20=EB=82=B4=EB=B6=80=20=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/domain/AllRacingCars.java | 4 ++-- src/main/java/racingcar/model/domain/FullGame.java | 5 ++--- src/main/java/racingcar/model/domain/Game.java | 2 ++ 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index f132bd2..7205798 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -1,6 +1,5 @@ package racingcar.model.domain; -import camp.nextstep.edu.missionutils.Randoms; import java.util.List; @@ -12,7 +11,8 @@ public AllRacingCars(List carNames) { this.cars = convertToRacingCar(carNames); } - public void playOneRound(GameRecords gameRecords, int round, Game game) { + public void playOneRound(GameRecords gameRecords, int round) { + Game game = new Game(); for (RacingCar car : cars) { game.play(car); } diff --git a/src/main/java/racingcar/model/domain/FullGame.java b/src/main/java/racingcar/model/domain/FullGame.java index 0969eed..9a9ad5a 100644 --- a/src/main/java/racingcar/model/domain/FullGame.java +++ b/src/main/java/racingcar/model/domain/FullGame.java @@ -11,10 +11,9 @@ public FullGame(AllRacingCars allRacingCars, int gameCount) { } public GameRecords startGame() { - Game game = new Game(); GameRecords gameRecords = new GameRecords(); - for (int round = 0; round < gameCount; round++) { - allRacingCars.playOneRound(gameRecords, round, game); + for (int round = 1; round <= gameCount; round++) { + allRacingCars.playOneRound(gameRecords, round); } return gameRecords; } diff --git a/src/main/java/racingcar/model/domain/Game.java b/src/main/java/racingcar/model/domain/Game.java index a5284f8..3acd23d 100644 --- a/src/main/java/racingcar/model/domain/Game.java +++ b/src/main/java/racingcar/model/domain/Game.java @@ -12,6 +12,8 @@ public class Game { public void play(RacingCar car) { if (Randoms.pickNumberInRange(0,9) > 4) { game.put(car, game.getOrDefault(car, 0) + 1); + } else { + game.put(car, game.getOrDefault(car, 0)); } } From bc5bdde62d0ee13ed3d3c75b4cbb2d552be382ee Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 03:57:03 +0900 Subject: [PATCH 24/40] =?UTF-8?q?refactor:=20RacingCar=EA=B0=80=20position?= =?UTF-8?q?=20=EC=83=81=ED=83=9C=EB=A5=BC=20=EA=B0=80=EC=A7=80=EA=B3=A0=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=EB=A5=BC=20=EC=A0=80=EC=9E=A5=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/domain/Game.java | 8 ++------ .../java/racingcar/model/domain/RacingCar.java | 13 +++++++++++++ src/main/java/racingcar/view/TextOutputView.java | 16 ++++++++++++++++ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/main/java/racingcar/model/domain/Game.java b/src/main/java/racingcar/model/domain/Game.java index 3acd23d..28e66e5 100644 --- a/src/main/java/racingcar/model/domain/Game.java +++ b/src/main/java/racingcar/model/domain/Game.java @@ -1,6 +1,5 @@ package racingcar.model.domain; -import camp.nextstep.edu.missionutils.Randoms; import java.util.HashMap; import java.util.Map; import racingcar.model.dto.RoundResultDto; @@ -10,11 +9,8 @@ public class Game { private final Map game = new HashMap<>(); public void play(RacingCar car) { - if (Randoms.pickNumberInRange(0,9) > 4) { - game.put(car, game.getOrDefault(car, 0) + 1); - } else { - game.put(car, game.getOrDefault(car, 0)); - } + car.move(); + game.put(car, car.getPosition()); } public RoundResultDto toDto() { diff --git a/src/main/java/racingcar/model/domain/RacingCar.java b/src/main/java/racingcar/model/domain/RacingCar.java index b014562..a962ce7 100644 --- a/src/main/java/racingcar/model/domain/RacingCar.java +++ b/src/main/java/racingcar/model/domain/RacingCar.java @@ -1,14 +1,27 @@ package racingcar.model.domain; +import camp.nextstep.edu.missionutils.Randoms; + public class RacingCar { private final String name; + private int position = 0; public RacingCar(String name) { this.name = name; } + public void move() { + if (Randoms.pickNumberInRange(0, 9) > 4) { + position++; + } + } + public String getName() { return this.name; } + + public Integer getPosition() { + return position; + } } diff --git a/src/main/java/racingcar/view/TextOutputView.java b/src/main/java/racingcar/view/TextOutputView.java index eac2db2..a068d57 100644 --- a/src/main/java/racingcar/view/TextOutputView.java +++ b/src/main/java/racingcar/view/TextOutputView.java @@ -1,6 +1,8 @@ package racingcar.view; +import java.util.Map; import racingcar.model.dto.GameResultDto; +import racingcar.model.dto.RoundResultDto; public class TextOutputView implements OutputView { @@ -10,6 +12,20 @@ public class TextOutputView implements OutputView { @Override public void outputGameRecords(GameResultDto gameResultDto) { System.out.println(GAME_RECORDS_MESSAGE); + + Map gameResult = gameResultDto.getGameResult(); + + for (int round = 1; round <= gameResult.size(); round++) { + RoundResultDto roundResult = gameResult.get(round); + Map carPositions = roundResult.getRoundResult(); + + for (Map.Entry entry : carPositions.entrySet()) { + String carName = entry.getKey(); + int position = entry.getValue(); + System.out.println(carName + " : " + "-".repeat(position)); + } + System.out.println(); + } } @Override From 149a40841a9cc9c59ae17e77a2fb88ca556b8747 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 04:31:27 +0900 Subject: [PATCH 25/40] =?UTF-8?q?feat:=20=EC=B5=9C=EC=A2=85=20=EC=9A=B0?= =?UTF-8?q?=EC=8A=B9=EC=9E=90=20=EC=B6=9C=EB=A0=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/controller/Controller.java | 5 ++++- .../racingcar/model/domain/AllRacingCars.java | 13 +++++++++++++ .../racingcar/model/domain/FinalWinners.java | 17 +++++++++++++++++ .../java/racingcar/model/domain/RacingCar.java | 4 ++++ .../racingcar/model/dto/FinalWinnersDto.java | 16 ++++++++++++++++ .../model/service/RacingCarService.java | 3 +++ .../model/service/RacingCarServiceImpl.java | 7 +++++++ src/main/java/racingcar/view/OutputView.java | 4 ++-- .../java/racingcar/view/TextOutputView.java | 14 +++++++++++--- 9 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 src/main/java/racingcar/model/domain/FinalWinners.java create mode 100644 src/main/java/racingcar/model/dto/FinalWinnersDto.java diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index 7f2f393..864a426 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -8,6 +8,7 @@ import racingcar.model.domain.AllRacingCars; import racingcar.model.domain.FullGame; import racingcar.model.domain.GameRecords; +import racingcar.model.dto.FinalWinnersDto; import racingcar.model.dto.GameResultDto; import racingcar.model.service.RacingCarService; import racingcar.view.InputView; @@ -41,8 +42,10 @@ public void run() { GameRecords gameRecords = fullGame.startGame(); GameResultDto gameResultDto = racingCarService.getGameResult(gameRecords); - outputView.outputGameRecords(gameResultDto); + + FinalWinnersDto finalWinnersDto = racingCarService.getFinalWinners(allRacingCars); + outputView.outputFinalWinners(finalWinnersDto); } private void validateInputCount(String inputCount) { diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index 7205798..50020b8 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -22,4 +22,17 @@ public void playOneRound(GameRecords gameRecords, int round) { private static List convertToRacingCar(List carNames) { return carNames.stream().map(RacingCar::new).toList(); } + + public FinalWinners getFinalWinners() { + int maxPosition = cars.stream() + .mapToInt(RacingCar::getPosition) + .max() + .orElse(0); + + List winners = cars.stream() + .filter(car -> car.isSamePosition(maxPosition)) + .toList(); + + return new FinalWinners(winners); + } } diff --git a/src/main/java/racingcar/model/domain/FinalWinners.java b/src/main/java/racingcar/model/domain/FinalWinners.java new file mode 100644 index 0000000..5f77667 --- /dev/null +++ b/src/main/java/racingcar/model/domain/FinalWinners.java @@ -0,0 +1,17 @@ +package racingcar.model.domain; + +import java.util.List; +import racingcar.model.dto.FinalWinnersDto; + +public class FinalWinners { + + private final List finalWinners; + + public FinalWinners(List winners) { + this.finalWinners = winners; + } + + public FinalWinnersDto toDto() { + return new FinalWinnersDto(finalWinners.stream().map(RacingCar::getName).toList()); + } +} diff --git a/src/main/java/racingcar/model/domain/RacingCar.java b/src/main/java/racingcar/model/domain/RacingCar.java index a962ce7..41ab860 100644 --- a/src/main/java/racingcar/model/domain/RacingCar.java +++ b/src/main/java/racingcar/model/domain/RacingCar.java @@ -17,6 +17,10 @@ public void move() { } } + public boolean isSamePosition(int otherPosition) { + return this.position == otherPosition; + } + public String getName() { return this.name; } diff --git a/src/main/java/racingcar/model/dto/FinalWinnersDto.java b/src/main/java/racingcar/model/dto/FinalWinnersDto.java new file mode 100644 index 0000000..7784e66 --- /dev/null +++ b/src/main/java/racingcar/model/dto/FinalWinnersDto.java @@ -0,0 +1,16 @@ +package racingcar.model.dto; + +import java.util.List; + +public class FinalWinnersDto { + + private final List winners; + + public FinalWinnersDto(List winners) { + this.winners = winners; + } + + public List getWinners() { + return winners; + } +} diff --git a/src/main/java/racingcar/model/service/RacingCarService.java b/src/main/java/racingcar/model/service/RacingCarService.java index ff1609c..1429770 100644 --- a/src/main/java/racingcar/model/service/RacingCarService.java +++ b/src/main/java/racingcar/model/service/RacingCarService.java @@ -4,6 +4,7 @@ import racingcar.model.domain.AllRacingCars; import racingcar.model.domain.FullGame; import racingcar.model.domain.GameRecords; +import racingcar.model.dto.FinalWinnersDto; import racingcar.model.dto.GameResultDto; public interface RacingCarService { @@ -13,4 +14,6 @@ public interface RacingCarService { FullGame createFullGame(AllRacingCars allRacingCars, int gameCount); GameResultDto getGameResult(GameRecords gameRecords); + + FinalWinnersDto getFinalWinners(AllRacingCars allRacingCars); } diff --git a/src/main/java/racingcar/model/service/RacingCarServiceImpl.java b/src/main/java/racingcar/model/service/RacingCarServiceImpl.java index 311db39..b6ca9d9 100644 --- a/src/main/java/racingcar/model/service/RacingCarServiceImpl.java +++ b/src/main/java/racingcar/model/service/RacingCarServiceImpl.java @@ -4,6 +4,7 @@ import racingcar.model.domain.AllRacingCars; import racingcar.model.domain.FullGame; import racingcar.model.domain.GameRecords; +import racingcar.model.dto.FinalWinnersDto; import racingcar.model.dto.GameResultDto; public class RacingCarServiceImpl implements RacingCarService { @@ -22,4 +23,10 @@ public FullGame createFullGame(AllRacingCars allRacingCars, int gameCount) { public GameResultDto getGameResult(GameRecords gameRecords) { return gameRecords.toDto(); } + + @Override + public FinalWinnersDto getFinalWinners(AllRacingCars allRacingCars) { + return allRacingCars.getFinalWinners().toDto(); + } + } diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index 318743d..f126091 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -1,11 +1,11 @@ package racingcar.view; -import java.util.Map; +import racingcar.model.dto.FinalWinnersDto; import racingcar.model.dto.GameResultDto; public interface OutputView { void outputGameRecords(GameResultDto gameResultDto); - void outputFinalWinners(String winners); + void outputFinalWinners(FinalWinnersDto finalWinnersDto); } diff --git a/src/main/java/racingcar/view/TextOutputView.java b/src/main/java/racingcar/view/TextOutputView.java index a068d57..3b5b6ca 100644 --- a/src/main/java/racingcar/view/TextOutputView.java +++ b/src/main/java/racingcar/view/TextOutputView.java @@ -1,6 +1,8 @@ package racingcar.view; import java.util.Map; +import java.util.Map.Entry; +import racingcar.model.dto.FinalWinnersDto; import racingcar.model.dto.GameResultDto; import racingcar.model.dto.RoundResultDto; @@ -19,7 +21,7 @@ public void outputGameRecords(GameResultDto gameResultDto) { RoundResultDto roundResult = gameResult.get(round); Map carPositions = roundResult.getRoundResult(); - for (Map.Entry entry : carPositions.entrySet()) { + for (Entry entry : carPositions.entrySet()) { String carName = entry.getKey(); int position = entry.getValue(); System.out.println(carName + " : " + "-".repeat(position)); @@ -29,7 +31,13 @@ public void outputGameRecords(GameResultDto gameResultDto) { } @Override - public void outputFinalWinners(String winners) { - System.out.println(FINAL_WINNERS_MESSAGE + winners); + public void outputFinalWinners(FinalWinnersDto finalWinnersDto) { + System.out.print(FINAL_WINNERS_MESSAGE); + for (int i = 1; i<=finalWinnersDto.getWinners().size(); i++) { + System.out.print(finalWinnersDto.getWinners().get(i-1)); + if (i < finalWinnersDto.getWinners().size()) { + System.out.print(", "); + } + } } } From 2ed5dbf7c059d303f9dcec5205d81000f49a5742 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 04:53:52 +0900 Subject: [PATCH 26/40] =?UTF-8?q?refactor:=20=EB=A7=A4=EC=A7=81=EB=84=98?= =?UTF-8?q?=EB=B2=84=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/domain/FullGame.java | 3 ++- src/main/java/racingcar/model/domain/RacingCar.java | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/model/domain/FullGame.java b/src/main/java/racingcar/model/domain/FullGame.java index 9a9ad5a..aa89afe 100644 --- a/src/main/java/racingcar/model/domain/FullGame.java +++ b/src/main/java/racingcar/model/domain/FullGame.java @@ -2,6 +2,7 @@ public class FullGame { + public static final int START_ROUND = 1; private final AllRacingCars allRacingCars; private final int gameCount; @@ -12,7 +13,7 @@ public FullGame(AllRacingCars allRacingCars, int gameCount) { public GameRecords startGame() { GameRecords gameRecords = new GameRecords(); - for (int round = 1; round <= gameCount; round++) { + for (int round = START_ROUND; round <= gameCount; round++) { allRacingCars.playOneRound(gameRecords, round); } return gameRecords; diff --git a/src/main/java/racingcar/model/domain/RacingCar.java b/src/main/java/racingcar/model/domain/RacingCar.java index 41ab860..fb6dea1 100644 --- a/src/main/java/racingcar/model/domain/RacingCar.java +++ b/src/main/java/racingcar/model/domain/RacingCar.java @@ -4,6 +4,10 @@ public class RacingCar { + public static final int MIN_NUMBER = 0; + public static final int MAX_NUMBER = 9; + public static final int JUDGE_NUMBER = 4; + private final String name; private int position = 0; @@ -12,7 +16,7 @@ public RacingCar(String name) { } public void move() { - if (Randoms.pickNumberInRange(0, 9) > 4) { + if (Randoms.pickNumberInRange(MIN_NUMBER, MAX_NUMBER) > JUDGE_NUMBER) { position++; } } From 927089772d5873abf86343069427fc1fa89aad27 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 05:06:37 +0900 Subject: [PATCH 27/40] =?UTF-8?q?refactor:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C=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 --- .../java/racingcar/common/ErrorMessage.java | 8 ++++++-- .../racingcar/model/domain/AllRacingCars.java | 20 ++++++++++++++----- .../java/racingcar/model/domain/FullGame.java | 10 ++++++++++ 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/main/java/racingcar/common/ErrorMessage.java b/src/main/java/racingcar/common/ErrorMessage.java index acf3fa4..cd21ee0 100644 --- a/src/main/java/racingcar/common/ErrorMessage.java +++ b/src/main/java/racingcar/common/ErrorMessage.java @@ -1,7 +1,11 @@ package racingcar.common; public class ErrorMessage { + private static final String ERROR_MESSAGE = "[ERROR]"; - public static final String ERROR_EMPTY_RACING_CAR_NAME = "[ERROR] ์ž…๋ ฅ๋œ ์ž๋™์ฐจ ์ด๋ฆ„์ด ์—†์Šต๋‹ˆ๋‹ค."; - public static final String ERROR_SINGLE_RACING_CAR_NAME = "[ERROR] ํ•œ ๋Œ€์˜ ์ž๋™์ฐจ๋กœ๋Š” ๊ฒฝ๊ธฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."; + public static final String ERROR_EMPTY_RACING_CAR_NAME = ERROR_MESSAGE + "์ž…๋ ฅ๋œ ์ž๋™์ฐจ ์ด๋ฆ„์ด ์—†์Šต๋‹ˆ๋‹ค."; + public static final String ERROR_SINGLE_RACING_CAR_NAME = ERROR_MESSAGE + "ํ•œ ๋Œ€์˜ ์ž๋™์ฐจ๋กœ๋Š” ๊ฒฝ๊ธฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."; + public static final String ERROR_EMPTY_GAME_COUNT = ERROR_MESSAGE + "์ž…๋ ฅ๋œ ๊ฒฝ๊ธฐ ํšŸ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."; + public static final String ERROR_GAME_COUNT_FORMAT = ERROR_MESSAGE + "๊ฒฝ๊ธฐ ํšŸ์ˆ˜๋Š” ์ •์ˆ˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."; + public static final String ERROR_TOO_SMALL_GAME_COUNT = ERROR_MESSAGE + "์‹œ๋„ ํšŸ์ˆ˜๋Š” 0๋ณด๋‹ค ์ปค์•ผ ํ•ฉ๋‹ˆ๋‹ค."; } diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index 50020b8..c9952ca 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -1,5 +1,7 @@ package racingcar.model.domain; +import static racingcar.common.ErrorMessage.ERROR_SINGLE_RACING_CAR_NAME; + import java.util.List; @@ -8,7 +10,9 @@ public class AllRacingCars { private final List cars; public AllRacingCars(List carNames) { - this.cars = convertToRacingCar(carNames); + List cars = convertToRacingCar(carNames); + validate(cars); + this.cars = cars; } public void playOneRound(GameRecords gameRecords, int round) { @@ -19,10 +23,6 @@ public void playOneRound(GameRecords gameRecords, int round) { gameRecords.record(round, game); } - private static List convertToRacingCar(List carNames) { - return carNames.stream().map(RacingCar::new).toList(); - } - public FinalWinners getFinalWinners() { int maxPosition = cars.stream() .mapToInt(RacingCar::getPosition) @@ -35,4 +35,14 @@ public FinalWinners getFinalWinners() { return new FinalWinners(winners); } + + private static List convertToRacingCar(List carNames) { + return carNames.stream().map(RacingCar::new).toList(); + } + + private void validate(List cars) { + if (cars.size() < 2) { + throw new IllegalArgumentException(ERROR_SINGLE_RACING_CAR_NAME); + } + } } diff --git a/src/main/java/racingcar/model/domain/FullGame.java b/src/main/java/racingcar/model/domain/FullGame.java index aa89afe..032cd12 100644 --- a/src/main/java/racingcar/model/domain/FullGame.java +++ b/src/main/java/racingcar/model/domain/FullGame.java @@ -1,12 +1,16 @@ package racingcar.model.domain; +import racingcar.common.ErrorMessage; + public class FullGame { public static final int START_ROUND = 1; + private final AllRacingCars allRacingCars; private final int gameCount; public FullGame(AllRacingCars allRacingCars, int gameCount) { + validate(gameCount); this.allRacingCars = allRacingCars; this.gameCount = gameCount; } @@ -18,4 +22,10 @@ public GameRecords startGame() { } return gameRecords; } + + private void validate(int gameCount) { + if (gameCount <= 0) { + throw new IllegalArgumentException(ErrorMessage.ERROR_TOO_SMALL_GAME_COUNT); + } + } } From 797f15a1a7c2a01b4bf768bf51f331040da97bdf Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 05:07:08 +0900 Subject: [PATCH 28/40] =?UTF-8?q?refactor:=20=EB=A7=A4=EC=A7=81=20?= =?UTF-8?q?=EB=84=98=EB=B2=84=20=EC=B2=98=EB=A6=AC,=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EB=B3=80=EC=88=98=EB=A1=9C=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/view/TextOutputView.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/racingcar/view/TextOutputView.java b/src/main/java/racingcar/view/TextOutputView.java index 3b5b6ca..430f1f6 100644 --- a/src/main/java/racingcar/view/TextOutputView.java +++ b/src/main/java/racingcar/view/TextOutputView.java @@ -1,5 +1,6 @@ package racingcar.view; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import racingcar.model.dto.FinalWinnersDto; @@ -10,6 +11,7 @@ public class TextOutputView implements OutputView { public static final String GAME_RECORDS_MESSAGE = "์‹คํ–‰ ๊ฒฐ๊ณผ"; public static final String FINAL_WINNERS_MESSAGE = "์ตœ์ข… ์šฐ์Šน์ž : "; + public static final String EXPRESS_POSITION = "-"; @Override public void outputGameRecords(GameResultDto gameResultDto) { @@ -24,7 +26,7 @@ public void outputGameRecords(GameResultDto gameResultDto) { for (Entry entry : carPositions.entrySet()) { String carName = entry.getKey(); int position = entry.getValue(); - System.out.println(carName + " : " + "-".repeat(position)); + System.out.println(carName + " : " + EXPRESS_POSITION.repeat(position)); } System.out.println(); } @@ -33,9 +35,13 @@ public void outputGameRecords(GameResultDto gameResultDto) { @Override public void outputFinalWinners(FinalWinnersDto finalWinnersDto) { System.out.print(FINAL_WINNERS_MESSAGE); - for (int i = 1; i<=finalWinnersDto.getWinners().size(); i++) { - System.out.print(finalWinnersDto.getWinners().get(i-1)); - if (i < finalWinnersDto.getWinners().size()) { + + List winners = finalWinnersDto.getWinners(); + int winnersCount = winners.size(); + + for (int i=1; i<=winnersCount; i++) { + System.out.print(winners.get(i-1)); + if (i < winnersCount) { System.out.print(", "); } } From 6d4e7eaa9f639b51d88ddbf4db69cfbfad723e5c Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 05:08:50 +0900 Subject: [PATCH 29/40] =?UTF-8?q?refactor:=20=EB=A7=A4=EC=A7=81=20?= =?UTF-8?q?=EB=84=98=EB=B2=84=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/domain/AllRacingCars.java | 4 +++- src/main/java/racingcar/model/domain/FullGame.java | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index c9952ca..74e37a7 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -7,6 +7,8 @@ public class AllRacingCars { + public static final int MIN_CAR_COUNT = 2; + private final List cars; public AllRacingCars(List carNames) { @@ -41,7 +43,7 @@ private static List convertToRacingCar(List carNames) { } private void validate(List cars) { - if (cars.size() < 2) { + if (cars.size() < MIN_CAR_COUNT) { throw new IllegalArgumentException(ERROR_SINGLE_RACING_CAR_NAME); } } diff --git a/src/main/java/racingcar/model/domain/FullGame.java b/src/main/java/racingcar/model/domain/FullGame.java index 032cd12..405cb4e 100644 --- a/src/main/java/racingcar/model/domain/FullGame.java +++ b/src/main/java/racingcar/model/domain/FullGame.java @@ -5,6 +5,7 @@ public class FullGame { public static final int START_ROUND = 1; + public static final int MIN_GAME_COUNT = 0; private final AllRacingCars allRacingCars; private final int gameCount; @@ -24,7 +25,7 @@ public GameRecords startGame() { } private void validate(int gameCount) { - if (gameCount <= 0) { + if (gameCount <= MIN_GAME_COUNT) { throw new IllegalArgumentException(ErrorMessage.ERROR_TOO_SMALL_GAME_COUNT); } } From 74e241e9d6f2a91bf60dd5859f4e8650e99a64c9 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 05:23:58 +0900 Subject: [PATCH 30/40] =?UTF-8?q?refactor:=20=EC=B5=9C=EC=A2=85=20?= =?UTF-8?q?=EC=9A=B0=EC=8A=B9=EC=9E=90=20=EA=B5=AC=ED=95=98=EA=B8=B0=20?= =?UTF-8?q?=EC=A0=95=EC=A0=81=20=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=82=AC=EC=9A=A9=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../racingcar/model/domain/AllRacingCars.java | 24 +++++++++---------- .../racingcar/model/domain/FinalWinners.java | 14 +++++++++-- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index 74e37a7..bc6cd5e 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -26,25 +26,23 @@ public void playOneRound(GameRecords gameRecords, int round) { } public FinalWinners getFinalWinners() { - int maxPosition = cars.stream() - .mapToInt(RacingCar::getPosition) - .max() - .orElse(0); - - List winners = cars.stream() - .filter(car -> car.isSamePosition(maxPosition)) - .toList(); + return FinalWinners.from(cars, calculateMaxPosition()); + } - return new FinalWinners(winners); + private void validate(List cars) { + if (cars.size() < MIN_CAR_COUNT) { + throw new IllegalArgumentException(ERROR_SINGLE_RACING_CAR_NAME); + } } private static List convertToRacingCar(List carNames) { return carNames.stream().map(RacingCar::new).toList(); } - private void validate(List cars) { - if (cars.size() < MIN_CAR_COUNT) { - throw new IllegalArgumentException(ERROR_SINGLE_RACING_CAR_NAME); - } + private int calculateMaxPosition() { + return cars.stream() + .mapToInt(RacingCar::getPosition) + .max() + .orElse(0); } } diff --git a/src/main/java/racingcar/model/domain/FinalWinners.java b/src/main/java/racingcar/model/domain/FinalWinners.java index 5f77667..8623796 100644 --- a/src/main/java/racingcar/model/domain/FinalWinners.java +++ b/src/main/java/racingcar/model/domain/FinalWinners.java @@ -1,17 +1,27 @@ package racingcar.model.domain; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import racingcar.model.dto.FinalWinnersDto; public class FinalWinners { private final List finalWinners; - public FinalWinners(List winners) { - this.finalWinners = winners; + private FinalWinners(final List finalWinners) { + this.finalWinners = finalWinners; + } + + public static FinalWinners from(List cars, int maxPosition) { + List result = cars.stream() + .filter(car -> car.isSamePosition(maxPosition)) + .collect(Collectors.toList()); + return new FinalWinners(result); } public FinalWinnersDto toDto() { return new FinalWinnersDto(finalWinners.stream().map(RacingCar::getName).toList()); } + } From 1abd8ac9d77cd1a7d91fff36000ed17e84ceb767 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 05:26:49 +0900 Subject: [PATCH 31/40] =?UTF-8?q?refactor:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20=EB=B6=88=EB=B3=80=EA=B0=9D=EC=B2=B4=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/domain/AllRacingCars.java | 2 +- src/main/java/racingcar/model/domain/FinalWinners.java | 3 +-- src/main/java/racingcar/model/domain/FullGame.java | 2 +- src/main/java/racingcar/model/domain/Game.java | 2 +- src/main/java/racingcar/model/domain/GameRecords.java | 2 +- src/main/java/racingcar/model/domain/RacingCar.java | 2 +- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index bc6cd5e..07285aa 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -5,7 +5,7 @@ import java.util.List; -public class AllRacingCars { +public final class AllRacingCars { public static final int MIN_CAR_COUNT = 2; diff --git a/src/main/java/racingcar/model/domain/FinalWinners.java b/src/main/java/racingcar/model/domain/FinalWinners.java index 8623796..09fbaf8 100644 --- a/src/main/java/racingcar/model/domain/FinalWinners.java +++ b/src/main/java/racingcar/model/domain/FinalWinners.java @@ -1,11 +1,10 @@ package racingcar.model.domain; -import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import racingcar.model.dto.FinalWinnersDto; -public class FinalWinners { +public final class FinalWinners { private final List finalWinners; diff --git a/src/main/java/racingcar/model/domain/FullGame.java b/src/main/java/racingcar/model/domain/FullGame.java index 405cb4e..93f0703 100644 --- a/src/main/java/racingcar/model/domain/FullGame.java +++ b/src/main/java/racingcar/model/domain/FullGame.java @@ -2,7 +2,7 @@ import racingcar.common.ErrorMessage; -public class FullGame { +public final class FullGame { public static final int START_ROUND = 1; public static final int MIN_GAME_COUNT = 0; diff --git a/src/main/java/racingcar/model/domain/Game.java b/src/main/java/racingcar/model/domain/Game.java index 28e66e5..409f86c 100644 --- a/src/main/java/racingcar/model/domain/Game.java +++ b/src/main/java/racingcar/model/domain/Game.java @@ -4,7 +4,7 @@ import java.util.Map; import racingcar.model.dto.RoundResultDto; -public class Game { +public final class Game { private final Map game = new HashMap<>(); diff --git a/src/main/java/racingcar/model/domain/GameRecords.java b/src/main/java/racingcar/model/domain/GameRecords.java index ecea5c4..0b58e0a 100644 --- a/src/main/java/racingcar/model/domain/GameRecords.java +++ b/src/main/java/racingcar/model/domain/GameRecords.java @@ -5,7 +5,7 @@ import racingcar.model.dto.GameResultDto; import racingcar.model.dto.RoundResultDto; -public class GameRecords { +public final class GameRecords { private final Map gameRecords = new HashMap<>(); diff --git a/src/main/java/racingcar/model/domain/RacingCar.java b/src/main/java/racingcar/model/domain/RacingCar.java index fb6dea1..f8976a1 100644 --- a/src/main/java/racingcar/model/domain/RacingCar.java +++ b/src/main/java/racingcar/model/domain/RacingCar.java @@ -2,7 +2,7 @@ import camp.nextstep.edu.missionutils.Randoms; -public class RacingCar { +public final class RacingCar { public static final int MIN_NUMBER = 0; public static final int MAX_NUMBER = 9; From c553b49a88a4858529a20fa92f82c0892afbadbf Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 05:57:18 +0900 Subject: [PATCH 32/40] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=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/racingcar/model/domain/FinalWinners.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/model/domain/FinalWinners.java b/src/main/java/racingcar/model/domain/FinalWinners.java index 09fbaf8..c1dd717 100644 --- a/src/main/java/racingcar/model/domain/FinalWinners.java +++ b/src/main/java/racingcar/model/domain/FinalWinners.java @@ -13,10 +13,14 @@ private FinalWinners(final List finalWinners) { } public static FinalWinners from(List cars, int maxPosition) { - List result = cars.stream() + List result = calculateFinalWinners(cars, maxPosition); + return new FinalWinners(result); + } + + private static List calculateFinalWinners(List cars, int maxPosition) { + return cars.stream() .filter(car -> car.isSamePosition(maxPosition)) .collect(Collectors.toList()); - return new FinalWinners(result); } public FinalWinnersDto toDto() { From c290180dedf7a3db05493ee1113a66541c5467f5 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 06:00:08 +0900 Subject: [PATCH 33/40] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/docs/README.md b/docs/README.md index a04f56d..4b8696a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,20 +5,15 @@ ### Domain - RacingCar (ํ•˜๋‚˜์˜ ๋ ˆ์ด์‹ฑ ์นด) - ์ฐจ ์ด๋ฆ„ ์ถœ๋ ฅ์„ ์œ„ํ•œ getter -- AllRacingCars (๋ชจ๋“  ๋ ˆ์ด์‹ฑ ์นด๋“ค, ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜) + - ์ฐจ ์œ„์น˜ ์ด๋™ ๋ฉ”์„œ๋“œ +- AllRacingCars (๋ชจ๋“  ๋ ˆ์ด์‹ฑ ์นด๋“ค) + - ์ตœ์ข… ์šฐ์Šน์ž ๋ฐ˜ํ™˜ ๋ฉ”์„œ๋“œ - FullGame (์ „์ฒด ๊ฒฝ๊ธฐ) - - AllGameResults ์ƒ์„ฑ ๋ฉ”์„œ๋“œ...? - Game (๋‹จ์ผ ๊ฒฝ๊ธฐ) - - ํ•ด๋‹น ๊ฒฝ๊ธฐ์˜ ์šฐ์Šน์ž ๊ณ„์‚ฐํ•˜์—ฌ Winners ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ -- Winners (๋‹จ์ผ ๊ฒฝ๊ธฐ ์šฐ์Šน์ž, ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜) -- WinnerCounts (๋ˆ„์  ์šฐ์Šน์ž, ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜) - - ์ตœ์ข… ์šฐ์Šน์ž ๊ณ„์‚ฐํ•˜์—ฌ FinalWinners ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ +- GameRecords (๊ฒฝ๊ธฐ ๊ธฐ๋ก) - FinalWinners (์ตœ์ข… ์šฐ์Šน์ž) + - ์ตœ์ข… ์šฐ์Šน์ž ๊ณ„์‚ฐ ๋ฉ”์„œ๋“œ - ์ตœ์ข… ์šฐ์Šน์ž ์ถœ๋ ฅ์„ ์œ„ํ•œ getter -- AllGameResults (์ „์ฒด ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ) -- GameResult (๋‹จ์ผ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ) - - ๋‹จ์ผ ๊ฒฝ๊ธฐ ์šฐ์Šน์ž(Winners) ๋ฐ˜ํ™˜ -- ๋ณ€๊ฒฝ ์˜ˆ์ •... ### Service - RacingCarService (๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋‹ด๋‹น, ์—†์• ๊ณ  ์‹ถ๋‹ค.) @@ -26,7 +21,7 @@ 1. ์ปจํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ ์ž๋™์ฐจ ์ด๋ฆ„์œผ๋กœ RacingCar ๊ฐ์ฒด ์ƒ์„ฑ 2. RacingCar ๊ฐ์ฒด๋“ค๋กœ AllRacingCars ๊ฐ์ฒด ์ƒ์„ฑ 2. AllRacingCars ๊ฐ์ฒด์™€ ์ปจํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ ์‹œ๋„ ํšŸ์ˆ˜๋กœ FullGame ๊ฐ์ฒด ์ƒ์„ฑ -3. FullGame ๊ฐ์ฒด ๋‚ด์—์„œ GameResult ์ƒ์„ฑํ•œ ๋’ค AllGameResults ์ƒ์„ฑ +3. FullGame ๊ฐ์ฒด ๋‚ด์—์„œ GameResult ์ƒ์„ฑ 4. AllGameResults์˜ ๊ฐ GameResult๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ์šฐ์Šน์ž๋“ค์„ ๋ชจ์•„ FinalWinners ๊ฐ์ฒด ์ƒ์„ฑ - ๊ฐ GameResult ๊ฐ์ฒด ๋‚ด์—์„œ ํ•˜์ดํ”ˆ ๊ฐœ์ˆ˜ ๋น„๊ต 6. GameResult์—์„œ ๋‹จ์ผ ๊ฒฝ๊ธฐ ์šฐ์Šน์ž Winners ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ From 5d54e6882abf825016e317639c583cc2c1386bf1 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 14:48:48 +0900 Subject: [PATCH 34/40] =?UTF-8?q?refactor:=20stream=20=EC=A0=81=EC=9A=A9?= =?UTF-8?q?=ED=95=B4=EB=B3=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/controller/Controller.java | 37 ++++++++++++++----- .../racingcar/model/domain/AllRacingCars.java | 4 +- .../java/racingcar/model/domain/FullGame.java | 6 +-- .../java/racingcar/model/domain/Game.java | 11 ++++-- .../racingcar/model/domain/GameRecords.java | 11 ++++-- 5 files changed, 45 insertions(+), 24 deletions(-) diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index 864a426..fe666fd 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -30,22 +30,39 @@ public Controller(InputView inputView, OutputView outputView, RacingCarService r } public void run() { - String inputNames = inputView.inputRacingCarNames(); - validateInputNames(inputNames); - List carNames = splitCarNames(inputNames); - AllRacingCars allRacingCars = racingCarService.createAllRacingCars(carNames); + AllRacingCars allRacingCars = createAllRacingCars(); - String inputCount = inputView.inputGameCount(); - validateInputCount(inputCount); - int gameCount = Integer.parseInt(inputCount); - FullGame fullGame = racingCarService.createFullGame(allRacingCars, gameCount); + FullGame fullGame = createFullGame(allRacingCars); + + getGameRecords(fullGame); + + getFinalWinners(allRacingCars); + } + + private void getFinalWinners(AllRacingCars allRacingCars) { + FinalWinnersDto finalWinnersDto = racingCarService.getFinalWinners(allRacingCars); + outputView.outputFinalWinners(finalWinnersDto); + } + private void getGameRecords(FullGame fullGame) { GameRecords gameRecords = fullGame.startGame(); + GameResultDto gameResultDto = racingCarService.getGameResult(gameRecords); outputView.outputGameRecords(gameResultDto); + } - FinalWinnersDto finalWinnersDto = racingCarService.getFinalWinners(allRacingCars); - outputView.outputFinalWinners(finalWinnersDto); + private FullGame createFullGame(AllRacingCars allRacingCars) { + String inputCount = inputView.inputGameCount(); + validateInputCount(inputCount); + int gameCount = Integer.parseInt(inputCount); + return racingCarService.createFullGame(allRacingCars, gameCount); + } + + private AllRacingCars createAllRacingCars() { + String inputNames = inputView.inputRacingCarNames(); + validateInputNames(inputNames); + List carNames = splitCarNames(inputNames); + return racingCarService.createAllRacingCars(carNames); } private void validateInputCount(String inputCount) { diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index 07285aa..84e4113 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -19,9 +19,7 @@ public AllRacingCars(List carNames) { public void playOneRound(GameRecords gameRecords, int round) { Game game = new Game(); - for (RacingCar car : cars) { - game.play(car); - } + cars.stream().forEach(game::play); gameRecords.record(round, game); } diff --git a/src/main/java/racingcar/model/domain/FullGame.java b/src/main/java/racingcar/model/domain/FullGame.java index 93f0703..4b46559 100644 --- a/src/main/java/racingcar/model/domain/FullGame.java +++ b/src/main/java/racingcar/model/domain/FullGame.java @@ -1,5 +1,6 @@ package racingcar.model.domain; +import java.util.stream.IntStream; import racingcar.common.ErrorMessage; public final class FullGame { @@ -18,9 +19,8 @@ public FullGame(AllRacingCars allRacingCars, int gameCount) { public GameRecords startGame() { GameRecords gameRecords = new GameRecords(); - for (int round = START_ROUND; round <= gameCount; round++) { - allRacingCars.playOneRound(gameRecords, round); - } + IntStream.rangeClosed(START_ROUND, gameCount) + .forEach(round -> allRacingCars.playOneRound(gameRecords, round)); return gameRecords; } diff --git a/src/main/java/racingcar/model/domain/Game.java b/src/main/java/racingcar/model/domain/Game.java index 409f86c..1b80d29 100644 --- a/src/main/java/racingcar/model/domain/Game.java +++ b/src/main/java/racingcar/model/domain/Game.java @@ -2,6 +2,8 @@ import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; import racingcar.model.dto.RoundResultDto; public final class Game { @@ -14,10 +16,11 @@ public void play(RacingCar car) { } public RoundResultDto toDto() { - Map result = new HashMap<>(); - for (Map.Entry entry : game.entrySet()) { - result.put(entry.getKey().getName(), entry.getValue()); - } + Map result = game.entrySet().stream() + .collect(Collectors.toMap( + entry -> entry.getKey().getName(), + Entry::getValue + )); return new RoundResultDto(result); } } diff --git a/src/main/java/racingcar/model/domain/GameRecords.java b/src/main/java/racingcar/model/domain/GameRecords.java index 0b58e0a..c96149a 100644 --- a/src/main/java/racingcar/model/domain/GameRecords.java +++ b/src/main/java/racingcar/model/domain/GameRecords.java @@ -2,6 +2,8 @@ import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; import racingcar.model.dto.GameResultDto; import racingcar.model.dto.RoundResultDto; @@ -14,10 +16,11 @@ public void record(int round, Game game) { } public GameResultDto toDto() { - Map result = new HashMap<>(); - for (Map.Entry entry : gameRecords.entrySet()) { - result.put(entry.getKey(), entry.getValue().toDto()); - } + Map result = gameRecords.entrySet().stream() + .collect(Collectors.toMap( + Entry::getKey, + entry -> entry.getValue().toDto() + )); return new GameResultDto(result); } } From e98fdd7cd9a90588c272bc548fd4289417876580 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 17:53:09 +0900 Subject: [PATCH 35/40] =?UTF-8?q?refactor:=20Game=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=9E=90=EC=9B=90=20=EB=AA=85=EC=8B=9C=20=EB=8C=80?= =?UTF-8?q?=EC=8B=A0=20=EC=9D=98=EC=A1=B4=20=EA=B0=9D=EC=B2=B4=20=EC=A3=BC?= =?UTF-8?q?=EC=9E=85=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95,=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=AA=85=20Round=EB=A1=9C=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 --- .../racingcar/model/domain/AllRacingCars.java | 22 +++++++++++++++---- .../racingcar/model/domain/GameRecords.java | 6 ++--- .../model/domain/{Game.java => Round.java} | 12 +++++----- 3 files changed, 26 insertions(+), 14 deletions(-) rename src/main/java/racingcar/model/domain/{Game.java => Round.java} (59%) diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index 84e4113..12a0494 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -3,6 +3,9 @@ import static racingcar.common.ErrorMessage.ERROR_SINGLE_RACING_CAR_NAME; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; public final class AllRacingCars { @@ -17,10 +20,21 @@ public AllRacingCars(List carNames) { this.cars = cars; } - public void playOneRound(GameRecords gameRecords, int round) { - Game game = new Game(); - cars.stream().forEach(game::play); - gameRecords.record(round, game); + public void playOneRound(GameRecords gameRecords, int roundCount) { + Round round = new Round(moveAllRacingCars()); + gameRecords.record(roundCount, round); + } + + private Map moveAllRacingCars() { + return cars.stream() + .map(car -> { + car.move(); + return car; + }) + .collect(Collectors.toMap( + Function.identity(), + RacingCar::getPosition + )); } public FinalWinners getFinalWinners() { diff --git a/src/main/java/racingcar/model/domain/GameRecords.java b/src/main/java/racingcar/model/domain/GameRecords.java index c96149a..fd44975 100644 --- a/src/main/java/racingcar/model/domain/GameRecords.java +++ b/src/main/java/racingcar/model/domain/GameRecords.java @@ -9,10 +9,10 @@ public final class GameRecords { - private final Map gameRecords = new HashMap<>(); + private final Map gameRecords = new HashMap<>(); - public void record(int round, Game game) { - gameRecords.put(round, game); + public void record(int roundCount, Round round) { + gameRecords.put(roundCount, round); } public GameResultDto toDto() { diff --git a/src/main/java/racingcar/model/domain/Game.java b/src/main/java/racingcar/model/domain/Round.java similarity index 59% rename from src/main/java/racingcar/model/domain/Game.java rename to src/main/java/racingcar/model/domain/Round.java index 1b80d29..ab3afc4 100644 --- a/src/main/java/racingcar/model/domain/Game.java +++ b/src/main/java/racingcar/model/domain/Round.java @@ -1,22 +1,20 @@ package racingcar.model.domain; -import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.stream.Collectors; import racingcar.model.dto.RoundResultDto; -public final class Game { +public final class Round { - private final Map game = new HashMap<>(); + private final Map round; - public void play(RacingCar car) { - car.move(); - game.put(car, car.getPosition()); + public Round(Map round) { + this.round = round; } public RoundResultDto toDto() { - Map result = game.entrySet().stream() + Map result = round.entrySet().stream() .collect(Collectors.toMap( entry -> entry.getKey().getName(), Entry::getValue From fd5f1b5e1cf189155ea54635fa166f025fcd1168 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 18:07:31 +0900 Subject: [PATCH 36/40] =?UTF-8?q?refactor:=20GameRecords=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=9E=90=EC=9B=90=20=EB=AA=85=EC=8B=9C=20?= =?UTF-8?q?=EB=8C=80=EC=8B=A0=20=EC=9D=98=EC=A1=B4=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EC=A3=BC=EC=9E=85=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/controller/Controller.java | 2 +- .../racingcar/model/domain/AllRacingCars.java | 29 +++++++++---------- .../java/racingcar/model/domain/FullGame.java | 15 ++++++---- .../racingcar/model/domain/GameRecords.java | 6 ++-- 4 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index fe666fd..c4f8d21 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -45,7 +45,7 @@ private void getFinalWinners(AllRacingCars allRacingCars) { } private void getGameRecords(FullGame fullGame) { - GameRecords gameRecords = fullGame.startGame(); + GameRecords gameRecords = fullGame.playAllRounds(); GameResultDto gameResultDto = racingCarService.getGameResult(gameRecords); outputView.outputGameRecords(gameResultDto); diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index 12a0494..3637acb 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -20,21 +20,8 @@ public AllRacingCars(List carNames) { this.cars = cars; } - public void playOneRound(GameRecords gameRecords, int roundCount) { - Round round = new Round(moveAllRacingCars()); - gameRecords.record(roundCount, round); - } - - private Map moveAllRacingCars() { - return cars.stream() - .map(car -> { - car.move(); - return car; - }) - .collect(Collectors.toMap( - Function.identity(), - RacingCar::getPosition - )); + public Round playOneRound() { + return new Round(moveAllRacingCars()); } public FinalWinners getFinalWinners() { @@ -57,4 +44,16 @@ private int calculateMaxPosition() { .max() .orElse(0); } + + private Map moveAllRacingCars() { + return cars.stream() + .map(car -> { + car.move(); + return car; + }) + .collect(Collectors.toMap( + Function.identity(), + RacingCar::getPosition + )); + } } diff --git a/src/main/java/racingcar/model/domain/FullGame.java b/src/main/java/racingcar/model/domain/FullGame.java index 4b46559..93255a8 100644 --- a/src/main/java/racingcar/model/domain/FullGame.java +++ b/src/main/java/racingcar/model/domain/FullGame.java @@ -1,6 +1,7 @@ package racingcar.model.domain; -import java.util.stream.IntStream; +import java.util.HashMap; +import java.util.Map; import racingcar.common.ErrorMessage; public final class FullGame { @@ -17,11 +18,13 @@ public FullGame(AllRacingCars allRacingCars, int gameCount) { this.gameCount = gameCount; } - public GameRecords startGame() { - GameRecords gameRecords = new GameRecords(); - IntStream.rangeClosed(START_ROUND, gameCount) - .forEach(round -> allRacingCars.playOneRound(gameRecords, round)); - return gameRecords; + public GameRecords playAllRounds() { + Map gameResult = new HashMap<>(); + for (int roundCount = START_ROUND; roundCount <= gameCount; roundCount++) { + Round round = allRacingCars.playOneRound(); + gameResult.put(roundCount, round); + } + return new GameRecords(gameResult); } private void validate(int gameCount) { diff --git a/src/main/java/racingcar/model/domain/GameRecords.java b/src/main/java/racingcar/model/domain/GameRecords.java index fd44975..b2cc1d4 100644 --- a/src/main/java/racingcar/model/domain/GameRecords.java +++ b/src/main/java/racingcar/model/domain/GameRecords.java @@ -9,10 +9,10 @@ public final class GameRecords { - private final Map gameRecords = new HashMap<>(); + private final Map gameRecords; - public void record(int roundCount, Round round) { - gameRecords.put(roundCount, round); + public GameRecords(Map gameRecords) { + this.gameRecords = gameRecords; } public GameResultDto toDto() { From 9e66bddf6f2634d5ef7de4fcb7b43035fc1c2828 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 18:14:25 +0900 Subject: [PATCH 37/40] =?UTF-8?q?refactor:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20=EA=B0=9D=EC=B2=B4=20=EC=A0=91=EA=B7=BC=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=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/racingcar/model/domain/RacingCar.java | 2 +- src/main/java/racingcar/model/domain/Round.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/model/domain/RacingCar.java b/src/main/java/racingcar/model/domain/RacingCar.java index f8976a1..e2ac916 100644 --- a/src/main/java/racingcar/model/domain/RacingCar.java +++ b/src/main/java/racingcar/model/domain/RacingCar.java @@ -2,7 +2,7 @@ import camp.nextstep.edu.missionutils.Randoms; -public final class RacingCar { +final class RacingCar { public static final int MIN_NUMBER = 0; public static final int MAX_NUMBER = 9; diff --git a/src/main/java/racingcar/model/domain/Round.java b/src/main/java/racingcar/model/domain/Round.java index ab3afc4..fa3ee35 100644 --- a/src/main/java/racingcar/model/domain/Round.java +++ b/src/main/java/racingcar/model/domain/Round.java @@ -5,7 +5,7 @@ import java.util.stream.Collectors; import racingcar.model.dto.RoundResultDto; -public final class Round { +final class Round { private final Map round; From d1b71f843720afdb2dbf6f99cd169c1e288d1452 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 18:41:45 +0900 Subject: [PATCH 38/40] =?UTF-8?q?refactor:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20=EC=A0=95=EC=A0=81=20=ED=8C=A9=ED=84=B0=EB=A6=AC=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/model/domain/AllRacingCars.java | 13 ++++++++----- .../java/racingcar/model/domain/FinalWinners.java | 4 ++-- src/main/java/racingcar/model/domain/FullGame.java | 8 ++++++-- .../java/racingcar/model/domain/GameRecords.java | 9 ++++++--- src/main/java/racingcar/model/domain/RacingCar.java | 6 +++++- src/main/java/racingcar/model/domain/Round.java | 8 ++++++-- .../java/racingcar/model/dto/FinalWinnersDto.java | 6 +++++- .../java/racingcar/model/dto/GameResultDto.java | 6 +++++- .../java/racingcar/model/dto/RoundResultDto.java | 6 +++++- .../model/service/RacingCarServiceImpl.java | 6 +++--- 10 files changed, 51 insertions(+), 21 deletions(-) diff --git a/src/main/java/racingcar/model/domain/AllRacingCars.java b/src/main/java/racingcar/model/domain/AllRacingCars.java index 3637acb..29b84eb 100644 --- a/src/main/java/racingcar/model/domain/AllRacingCars.java +++ b/src/main/java/racingcar/model/domain/AllRacingCars.java @@ -14,18 +14,21 @@ public final class AllRacingCars { private final List cars; - public AllRacingCars(List carNames) { - List cars = convertToRacingCar(carNames); + private AllRacingCars(List cars) { validate(cars); this.cars = cars; } + public static AllRacingCars from(List carNames) { + return new AllRacingCars(convertToRacingCar(carNames)); + } + public Round playOneRound() { - return new Round(moveAllRacingCars()); + return Round.from(moveAllRacingCars()); } public FinalWinners getFinalWinners() { - return FinalWinners.from(cars, calculateMaxPosition()); + return FinalWinners.of(cars, calculateMaxPosition()); } private void validate(List cars) { @@ -35,7 +38,7 @@ private void validate(List cars) { } private static List convertToRacingCar(List carNames) { - return carNames.stream().map(RacingCar::new).toList(); + return carNames.stream().map(RacingCar::from).toList(); } private int calculateMaxPosition() { diff --git a/src/main/java/racingcar/model/domain/FinalWinners.java b/src/main/java/racingcar/model/domain/FinalWinners.java index c1dd717..3cdb6dc 100644 --- a/src/main/java/racingcar/model/domain/FinalWinners.java +++ b/src/main/java/racingcar/model/domain/FinalWinners.java @@ -12,7 +12,7 @@ private FinalWinners(final List finalWinners) { this.finalWinners = finalWinners; } - public static FinalWinners from(List cars, int maxPosition) { + public static FinalWinners of(List cars, int maxPosition) { List result = calculateFinalWinners(cars, maxPosition); return new FinalWinners(result); } @@ -24,7 +24,7 @@ private static List calculateFinalWinners(List cars, int m } public FinalWinnersDto toDto() { - return new FinalWinnersDto(finalWinners.stream().map(RacingCar::getName).toList()); + return FinalWinnersDto.from(finalWinners.stream().map(RacingCar::getName).toList()); } } diff --git a/src/main/java/racingcar/model/domain/FullGame.java b/src/main/java/racingcar/model/domain/FullGame.java index 93255a8..26c0462 100644 --- a/src/main/java/racingcar/model/domain/FullGame.java +++ b/src/main/java/racingcar/model/domain/FullGame.java @@ -12,19 +12,23 @@ public final class FullGame { private final AllRacingCars allRacingCars; private final int gameCount; - public FullGame(AllRacingCars allRacingCars, int gameCount) { + private FullGame(AllRacingCars allRacingCars, int gameCount) { validate(gameCount); this.allRacingCars = allRacingCars; this.gameCount = gameCount; } + public static FullGame of(AllRacingCars allRacingCars, int gameCount) { + return new FullGame(allRacingCars, gameCount); + } + public GameRecords playAllRounds() { Map gameResult = new HashMap<>(); for (int roundCount = START_ROUND; roundCount <= gameCount; roundCount++) { Round round = allRacingCars.playOneRound(); gameResult.put(roundCount, round); } - return new GameRecords(gameResult); + return GameRecords.from(gameResult); } private void validate(int gameCount) { diff --git a/src/main/java/racingcar/model/domain/GameRecords.java b/src/main/java/racingcar/model/domain/GameRecords.java index b2cc1d4..fc28c3c 100644 --- a/src/main/java/racingcar/model/domain/GameRecords.java +++ b/src/main/java/racingcar/model/domain/GameRecords.java @@ -1,6 +1,5 @@ package racingcar.model.domain; -import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.stream.Collectors; @@ -11,16 +10,20 @@ public final class GameRecords { private final Map gameRecords; - public GameRecords(Map gameRecords) { + private GameRecords(Map gameRecords) { this.gameRecords = gameRecords; } + public static GameRecords from(Map gameRecords) { + return new GameRecords(gameRecords); + } + public GameResultDto toDto() { Map result = gameRecords.entrySet().stream() .collect(Collectors.toMap( Entry::getKey, entry -> entry.getValue().toDto() )); - return new GameResultDto(result); + return GameResultDto.from(result); } } diff --git a/src/main/java/racingcar/model/domain/RacingCar.java b/src/main/java/racingcar/model/domain/RacingCar.java index e2ac916..573bd8d 100644 --- a/src/main/java/racingcar/model/domain/RacingCar.java +++ b/src/main/java/racingcar/model/domain/RacingCar.java @@ -11,10 +11,14 @@ final class RacingCar { private final String name; private int position = 0; - public RacingCar(String name) { + private RacingCar(String name) { this.name = name; } + public static RacingCar from(String name) { + return new RacingCar(name); + } + public void move() { if (Randoms.pickNumberInRange(MIN_NUMBER, MAX_NUMBER) > JUDGE_NUMBER) { position++; diff --git a/src/main/java/racingcar/model/domain/Round.java b/src/main/java/racingcar/model/domain/Round.java index fa3ee35..a694013 100644 --- a/src/main/java/racingcar/model/domain/Round.java +++ b/src/main/java/racingcar/model/domain/Round.java @@ -9,16 +9,20 @@ final class Round { private final Map round; - public Round(Map round) { + private Round(Map round) { this.round = round; } + public static Round from(Map round) { + return new Round(round); + } + public RoundResultDto toDto() { Map result = round.entrySet().stream() .collect(Collectors.toMap( entry -> entry.getKey().getName(), Entry::getValue )); - return new RoundResultDto(result); + return RoundResultDto.from(result); } } diff --git a/src/main/java/racingcar/model/dto/FinalWinnersDto.java b/src/main/java/racingcar/model/dto/FinalWinnersDto.java index 7784e66..2c4cfbf 100644 --- a/src/main/java/racingcar/model/dto/FinalWinnersDto.java +++ b/src/main/java/racingcar/model/dto/FinalWinnersDto.java @@ -6,11 +6,15 @@ public class FinalWinnersDto { private final List winners; - public FinalWinnersDto(List winners) { + private FinalWinnersDto(List winners) { this.winners = winners; } public List getWinners() { return winners; } + + public static FinalWinnersDto from(List winners) { + return new FinalWinnersDto(winners); + } } diff --git a/src/main/java/racingcar/model/dto/GameResultDto.java b/src/main/java/racingcar/model/dto/GameResultDto.java index c05b5ba..8914bdb 100644 --- a/src/main/java/racingcar/model/dto/GameResultDto.java +++ b/src/main/java/racingcar/model/dto/GameResultDto.java @@ -6,11 +6,15 @@ public class GameResultDto { private final Map gameResult; - public GameResultDto(Map gameResult) { + private GameResultDto(Map gameResult) { this.gameResult = gameResult; } public Map getGameResult() { return gameResult; } + + public static GameResultDto from(Map gameResult) { + return new GameResultDto(gameResult); + } } diff --git a/src/main/java/racingcar/model/dto/RoundResultDto.java b/src/main/java/racingcar/model/dto/RoundResultDto.java index b6a54a0..40ab499 100644 --- a/src/main/java/racingcar/model/dto/RoundResultDto.java +++ b/src/main/java/racingcar/model/dto/RoundResultDto.java @@ -6,11 +6,15 @@ public class RoundResultDto { private final Map roundResult; - public RoundResultDto(Map roundResult) { + private RoundResultDto(Map roundResult) { this.roundResult = roundResult; } public Map getRoundResult() { return roundResult; } + + public static RoundResultDto from(Map roundResult) { + return new RoundResultDto(roundResult); + } } diff --git a/src/main/java/racingcar/model/service/RacingCarServiceImpl.java b/src/main/java/racingcar/model/service/RacingCarServiceImpl.java index b6ca9d9..1c40771 100644 --- a/src/main/java/racingcar/model/service/RacingCarServiceImpl.java +++ b/src/main/java/racingcar/model/service/RacingCarServiceImpl.java @@ -7,16 +7,16 @@ import racingcar.model.dto.FinalWinnersDto; import racingcar.model.dto.GameResultDto; -public class RacingCarServiceImpl implements RacingCarService { +public final class RacingCarServiceImpl implements RacingCarService { @Override public AllRacingCars createAllRacingCars(List carNames) { - return new AllRacingCars(carNames); + return AllRacingCars.from(carNames); } @Override public FullGame createFullGame(AllRacingCars allRacingCars, int gameCount) { - return new FullGame(allRacingCars, gameCount); + return FullGame.of(allRacingCars, gameCount); } @Override From 4eecaca42e9cc913fafe973b29d96a73eb394176 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Sun, 6 Apr 2025 18:42:25 +0900 Subject: [PATCH 39/40] =?UTF-8?q?refactor:=20final=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EB=A1=9C=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/racingcar/AppConfig.java | 2 +- src/main/java/racingcar/model/dto/FinalWinnersDto.java | 2 +- src/main/java/racingcar/model/dto/GameResultDto.java | 2 +- src/main/java/racingcar/model/dto/RoundResultDto.java | 2 +- src/main/java/racingcar/view/TextInputView.java | 2 +- src/main/java/racingcar/view/TextOutputView.java | 8 +++++--- 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/racingcar/AppConfig.java b/src/main/java/racingcar/AppConfig.java index 8f7c407..53ff0f0 100644 --- a/src/main/java/racingcar/AppConfig.java +++ b/src/main/java/racingcar/AppConfig.java @@ -8,7 +8,7 @@ import racingcar.view.TextInputView; import racingcar.view.TextOutputView; -public class AppConfig { +public final class AppConfig { public Controller controller() { return new Controller(inputView(), outputView(), racingCarService()); diff --git a/src/main/java/racingcar/model/dto/FinalWinnersDto.java b/src/main/java/racingcar/model/dto/FinalWinnersDto.java index 2c4cfbf..837f582 100644 --- a/src/main/java/racingcar/model/dto/FinalWinnersDto.java +++ b/src/main/java/racingcar/model/dto/FinalWinnersDto.java @@ -2,7 +2,7 @@ import java.util.List; -public class FinalWinnersDto { +public final class FinalWinnersDto { private final List winners; diff --git a/src/main/java/racingcar/model/dto/GameResultDto.java b/src/main/java/racingcar/model/dto/GameResultDto.java index 8914bdb..97b1676 100644 --- a/src/main/java/racingcar/model/dto/GameResultDto.java +++ b/src/main/java/racingcar/model/dto/GameResultDto.java @@ -2,7 +2,7 @@ import java.util.Map; -public class GameResultDto { +public final class GameResultDto { private final Map gameResult; diff --git a/src/main/java/racingcar/model/dto/RoundResultDto.java b/src/main/java/racingcar/model/dto/RoundResultDto.java index 40ab499..5629623 100644 --- a/src/main/java/racingcar/model/dto/RoundResultDto.java +++ b/src/main/java/racingcar/model/dto/RoundResultDto.java @@ -2,7 +2,7 @@ import java.util.Map; -public class RoundResultDto { +public final class RoundResultDto { private final Map roundResult; diff --git a/src/main/java/racingcar/view/TextInputView.java b/src/main/java/racingcar/view/TextInputView.java index 593fcea..5d3b594 100644 --- a/src/main/java/racingcar/view/TextInputView.java +++ b/src/main/java/racingcar/view/TextInputView.java @@ -2,7 +2,7 @@ import camp.nextstep.edu.missionutils.Console; -public class TextInputView implements InputView { +public final class TextInputView implements InputView { public static final String INPUT_RACING_CARS_NAME_MESSAGE = "๊ฒฝ์ฃผํ•  ์ž๋™์ฐจ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.(์ด๋ฆ„์€ ์‰ผํ‘œ(,) ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„)"; public static final String INPUT_GAME_COUNT_MESSAGE = "์‹œ๋„ํ•  ํšŒ์ˆ˜๋Š” ๋ช‡ํšŒ์ธ๊ฐ€์š”?"; diff --git a/src/main/java/racingcar/view/TextOutputView.java b/src/main/java/racingcar/view/TextOutputView.java index 430f1f6..42b93d0 100644 --- a/src/main/java/racingcar/view/TextOutputView.java +++ b/src/main/java/racingcar/view/TextOutputView.java @@ -7,11 +7,13 @@ import racingcar.model.dto.GameResultDto; import racingcar.model.dto.RoundResultDto; -public class TextOutputView implements OutputView { +public final class TextOutputView implements OutputView { public static final String GAME_RECORDS_MESSAGE = "์‹คํ–‰ ๊ฒฐ๊ณผ"; public static final String FINAL_WINNERS_MESSAGE = "์ตœ์ข… ์šฐ์Šน์ž : "; public static final String EXPRESS_POSITION = "-"; + public static final int START_ROUND = 1; + public static final int MIN_WINNERS_COUNT = 1; @Override public void outputGameRecords(GameResultDto gameResultDto) { @@ -19,7 +21,7 @@ public void outputGameRecords(GameResultDto gameResultDto) { Map gameResult = gameResultDto.getGameResult(); - for (int round = 1; round <= gameResult.size(); round++) { + for (int round = START_ROUND; round <= gameResult.size(); round++) { RoundResultDto roundResult = gameResult.get(round); Map carPositions = roundResult.getRoundResult(); @@ -39,7 +41,7 @@ public void outputFinalWinners(FinalWinnersDto finalWinnersDto) { List winners = finalWinnersDto.getWinners(); int winnersCount = winners.size(); - for (int i=1; i<=winnersCount; i++) { + for (int i = MIN_WINNERS_COUNT; i <= winnersCount; i++) { System.out.print(winners.get(i-1)); if (i < winnersCount) { System.out.print(", "); From 3d47f27b00f29c163348193f80092f0eddd5ce71 Mon Sep 17 00:00:00 2001 From: Seooooo24 Date: Wed, 9 Apr 2025 17:56:07 +0900 Subject: [PATCH 40/40] =?UTF-8?q?refactor:=20=EC=84=9C=EB=B9=84=EC=8A=A4?= =?UTF-8?q?=20=EB=A0=88=EC=9D=B4=EC=96=B4=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/AppConfig.java | 8 +---- .../java/racingcar/controller/Controller.java | 21 ++++-------- .../model/service/RacingCarService.java | 19 ----------- .../model/service/RacingCarServiceImpl.java | 32 ------------------- 4 files changed, 7 insertions(+), 73 deletions(-) delete mode 100644 src/main/java/racingcar/model/service/RacingCarService.java delete mode 100644 src/main/java/racingcar/model/service/RacingCarServiceImpl.java diff --git a/src/main/java/racingcar/AppConfig.java b/src/main/java/racingcar/AppConfig.java index 53ff0f0..d531e3a 100644 --- a/src/main/java/racingcar/AppConfig.java +++ b/src/main/java/racingcar/AppConfig.java @@ -1,8 +1,6 @@ package racingcar; import racingcar.controller.Controller; -import racingcar.model.service.RacingCarService; -import racingcar.model.service.RacingCarServiceImpl; import racingcar.view.InputView; import racingcar.view.OutputView; import racingcar.view.TextInputView; @@ -11,7 +9,7 @@ public final class AppConfig { public Controller controller() { - return new Controller(inputView(), outputView(), racingCarService()); + return new Controller(inputView(), outputView()); } private InputView inputView() { @@ -21,8 +19,4 @@ private InputView inputView() { private OutputView outputView() { return new TextOutputView(); } - - private RacingCarService racingCarService() { - return new RacingCarServiceImpl(); - } } diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index c4f8d21..ed80d02 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -8,9 +8,6 @@ import racingcar.model.domain.AllRacingCars; import racingcar.model.domain.FullGame; import racingcar.model.domain.GameRecords; -import racingcar.model.dto.FinalWinnersDto; -import racingcar.model.dto.GameResultDto; -import racingcar.model.service.RacingCarService; import racingcar.view.InputView; import racingcar.view.OutputView; @@ -21,12 +18,10 @@ public class Controller { private final InputView inputView; private final OutputView outputView; - private final RacingCarService racingCarService; - public Controller(InputView inputView, OutputView outputView, RacingCarService racingCarService) { + public Controller(InputView inputView, OutputView outputView) { this.inputView = inputView; this.outputView = outputView; - this.racingCarService = racingCarService; } public void run() { @@ -40,29 +35,26 @@ public void run() { } private void getFinalWinners(AllRacingCars allRacingCars) { - FinalWinnersDto finalWinnersDto = racingCarService.getFinalWinners(allRacingCars); - outputView.outputFinalWinners(finalWinnersDto); + outputView.outputFinalWinners(allRacingCars.getFinalWinners().toDto()); } private void getGameRecords(FullGame fullGame) { GameRecords gameRecords = fullGame.playAllRounds(); - - GameResultDto gameResultDto = racingCarService.getGameResult(gameRecords); - outputView.outputGameRecords(gameResultDto); + outputView.outputGameRecords(gameRecords.toDto()); } private FullGame createFullGame(AllRacingCars allRacingCars) { String inputCount = inputView.inputGameCount(); validateInputCount(inputCount); int gameCount = Integer.parseInt(inputCount); - return racingCarService.createFullGame(allRacingCars, gameCount); + return FullGame.of(allRacingCars, gameCount); } private AllRacingCars createAllRacingCars() { String inputNames = inputView.inputRacingCarNames(); validateInputNames(inputNames); List carNames = splitCarNames(inputNames); - return racingCarService.createAllRacingCars(carNames); + return AllRacingCars.from(carNames); } private void validateInputCount(String inputCount) { @@ -75,8 +67,7 @@ private void validateInputCount(String inputCount) { } private static List splitCarNames(String racingCarNames) { - List carNames = List.of(racingCarNames.split(DELIMITER)); - return carNames; + return List.of(racingCarNames.split(DELIMITER)); } private static void validateInputNames(String inputNames) { diff --git a/src/main/java/racingcar/model/service/RacingCarService.java b/src/main/java/racingcar/model/service/RacingCarService.java deleted file mode 100644 index 1429770..0000000 --- a/src/main/java/racingcar/model/service/RacingCarService.java +++ /dev/null @@ -1,19 +0,0 @@ -package racingcar.model.service; - -import java.util.List; -import racingcar.model.domain.AllRacingCars; -import racingcar.model.domain.FullGame; -import racingcar.model.domain.GameRecords; -import racingcar.model.dto.FinalWinnersDto; -import racingcar.model.dto.GameResultDto; - -public interface RacingCarService { - - AllRacingCars createAllRacingCars(List carNames); - - FullGame createFullGame(AllRacingCars allRacingCars, int gameCount); - - GameResultDto getGameResult(GameRecords gameRecords); - - FinalWinnersDto getFinalWinners(AllRacingCars allRacingCars); -} diff --git a/src/main/java/racingcar/model/service/RacingCarServiceImpl.java b/src/main/java/racingcar/model/service/RacingCarServiceImpl.java deleted file mode 100644 index 1c40771..0000000 --- a/src/main/java/racingcar/model/service/RacingCarServiceImpl.java +++ /dev/null @@ -1,32 +0,0 @@ -package racingcar.model.service; - -import java.util.List; -import racingcar.model.domain.AllRacingCars; -import racingcar.model.domain.FullGame; -import racingcar.model.domain.GameRecords; -import racingcar.model.dto.FinalWinnersDto; -import racingcar.model.dto.GameResultDto; - -public final class RacingCarServiceImpl implements RacingCarService { - - @Override - public AllRacingCars createAllRacingCars(List carNames) { - return AllRacingCars.from(carNames); - } - - @Override - public FullGame createFullGame(AllRacingCars allRacingCars, int gameCount) { - return FullGame.of(allRacingCars, gameCount); - } - - @Override - public GameResultDto getGameResult(GameRecords gameRecords) { - return gameRecords.toDto(); - } - - @Override - public FinalWinnersDto getFinalWinners(AllRacingCars allRacingCars) { - return allRacingCars.getFinalWinners().toDto(); - } - -}