From 3f4c15e1367e3c05ce6f641ab941cb3d3d32fa40 Mon Sep 17 00:00:00 2001 From: songzio Date: Wed, 25 Mar 2026 14:41:20 +0900 Subject: [PATCH 01/10] =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 2 +- src/main/java/racingcar/Car.java | 4 ++++ src/main/java/racingcar/GameController.java | 4 ++++ src/main/java/racingcar/InputView.java | 4 ++++ src/main/java/racingcar/OutputView.java | 4 ++++ src/main/java/racingcar/RacingGame.java | 4 ++++ 6 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/main/java/racingcar/Car.java create mode 100644 src/main/java/racingcar/GameController.java create mode 100644 src/main/java/racingcar/InputView.java create mode 100644 src/main/java/racingcar/OutputView.java create mode 100644 src/main/java/racingcar/RacingGame.java diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..c2b9df5 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -2,6 +2,6 @@ public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + } } diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 0000000..246c8e5 --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,4 @@ +package racingcar; + +public class Car { +} diff --git a/src/main/java/racingcar/GameController.java b/src/main/java/racingcar/GameController.java new file mode 100644 index 0000000..08cacde --- /dev/null +++ b/src/main/java/racingcar/GameController.java @@ -0,0 +1,4 @@ +package racingcar; + +public class GameController { +} diff --git a/src/main/java/racingcar/InputView.java b/src/main/java/racingcar/InputView.java new file mode 100644 index 0000000..d4e73ad --- /dev/null +++ b/src/main/java/racingcar/InputView.java @@ -0,0 +1,4 @@ +package racingcar; + +public class InputView { +} diff --git a/src/main/java/racingcar/OutputView.java b/src/main/java/racingcar/OutputView.java new file mode 100644 index 0000000..fab9c49 --- /dev/null +++ b/src/main/java/racingcar/OutputView.java @@ -0,0 +1,4 @@ +package racingcar; + +public class OutputView { +} diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java new file mode 100644 index 0000000..8c66d3d --- /dev/null +++ b/src/main/java/racingcar/RacingGame.java @@ -0,0 +1,4 @@ +package racingcar; + +public class RacingGame { +} From 6e1def28e1ca378673858253103203af0afa0eaa Mon Sep 17 00:00:00 2001 From: songzio Date: Wed, 25 Mar 2026 15:02:18 +0900 Subject: [PATCH 02/10] =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=B0=A8=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 246c8e5..c16b9cc 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,4 +1,14 @@ package racingcar; public class Car { + + public String carName; + public int count; + + public Car() {} + + public Car(String carName) { // 매개변수를 가진 생성자 + this.carName = carName; + this.count = 0; + } } From 6068cd17e8505449d062e9d5ef77e3937cc51274 Mon Sep 17 00:00:00 2001 From: songzio Date: Wed, 25 Mar 2026 15:31:40 +0900 Subject: [PATCH 03/10] =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=B0=A8=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EA=B8=B0=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/InputView.java | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/main/java/racingcar/InputView.java b/src/main/java/racingcar/InputView.java index d4e73ad..d762dd7 100644 --- a/src/main/java/racingcar/InputView.java +++ b/src/main/java/racingcar/InputView.java @@ -1,4 +1,36 @@ package racingcar; +import camp.nextstep.edu.missionutils.Console; + +import java.util.ArrayList; +import java.util.List; + public class InputView { + + public List createCars() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + + String input = Console.readLine(); + String[] carNames = input.split(","); + + List existNames = new ArrayList<>(); //차 이름 중복 예외처리 하려고 만든 리스트 + + List carList = new ArrayList<>(); + + for (String name : carNames) { + + if (name.isEmpty() || name.contains(" ")) { + throw new IllegalArgumentException("빈값, 공백 오류"); + } + + if (existNames.contains(name)) { + throw new IllegalArgumentException("중복된 차 있음"); + } + existNames.add(name); + + Car car = new Car(name); + carList.add(car); + } + return carList; + } } From c1e5565eb0ac619f5ac6a4cc2496c53d2c2dd2d2 Mon Sep 17 00:00:00 2001 From: songzio Date: Wed, 25 Mar 2026 15:57:24 +0900 Subject: [PATCH 04/10] =?UTF-8?q?=EC=B0=A8=EB=9F=89=20=EC=9D=B4=EB=8F=99?= =?UTF-8?q?=20=ED=9A=9F=EC=88=98=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/InputView.java | 28 ++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/InputView.java b/src/main/java/racingcar/InputView.java index d762dd7..a1b7c72 100644 --- a/src/main/java/racingcar/InputView.java +++ b/src/main/java/racingcar/InputView.java @@ -10,8 +10,8 @@ public class InputView { public List createCars() { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); - String input = Console.readLine(); - String[] carNames = input.split(","); + String nameInput = Console.readLine(); + String[] carNames = nameInput.split(","); List existNames = new ArrayList<>(); //차 이름 중복 예외처리 하려고 만든 리스트 @@ -19,6 +19,10 @@ public List createCars() { for (String name : carNames) { + if (name.length() > 5) { + throw new IllegalArgumentException("차 이름 5글자보다 클 수 없음"); + } + if (name.isEmpty() || name.contains(" ")) { throw new IllegalArgumentException("빈값, 공백 오류"); } @@ -33,4 +37,24 @@ public List createCars() { } return carList; } + + public int getCount() { + + System.out.println("시도할 회수는 몇회인가요?"); + String countInput = Console.readLine(); + + int tryCount; + + try { + tryCount = Integer.parseInt(countInput); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("시도 횟수는 숫자여야함"); + } + + if (tryCount <= 0) { + throw new IllegalArgumentException("0보다 작은 수 안됨"); + } + + return tryCount; + } } From 85a44227aed3a9f9d527e3944b5e108cc34f8db9 Mon Sep 17 00:00:00 2001 From: songzio Date: Wed, 25 Mar 2026 16:07:17 +0900 Subject: [PATCH 05/10] =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=B0=A8=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EA=B0=9C=ED=84=B0=20=EC=84=B8=ED=84=B0=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index c16b9cc..334bb70 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -11,4 +11,20 @@ public Car(String carName) { // 매개변수를 가진 생성자 this.carName = carName; this.count = 0; } + + public String getCarName() { + return carName; + } + + public void setCarName(String carName) { + this.carName = carName; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } } From 7871e5ab6fc72b6c883a509b04616482adc8b003 Mon Sep 17 00:00:00 2001 From: songzio Date: Wed, 25 Mar 2026 16:41:31 +0900 Subject: [PATCH 06/10] =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EC=8B=A4=ED=96=89?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 6 ++++ src/main/java/racingcar/GameController.java | 4 --- src/main/java/racingcar/OutputView.java | 4 --- src/main/java/racingcar/RacingGame.java | 33 +++++++++++++++++++++ 4 files changed, 39 insertions(+), 8 deletions(-) delete mode 100644 src/main/java/racingcar/GameController.java delete mode 100644 src/main/java/racingcar/OutputView.java diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 334bb70..2d6fdf0 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -12,6 +12,12 @@ public Car(String carName) { // 매개변수를 가진 생성자 this.count = 0; } + public void upCount(int number) { + if (number >= 4) { + this.count ++; + }ㅎ + } + public String getCarName() { return carName; } diff --git a/src/main/java/racingcar/GameController.java b/src/main/java/racingcar/GameController.java deleted file mode 100644 index 08cacde..0000000 --- a/src/main/java/racingcar/GameController.java +++ /dev/null @@ -1,4 +0,0 @@ -package racingcar; - -public class GameController { -} diff --git a/src/main/java/racingcar/OutputView.java b/src/main/java/racingcar/OutputView.java deleted file mode 100644 index fab9c49..0000000 --- a/src/main/java/racingcar/OutputView.java +++ /dev/null @@ -1,4 +0,0 @@ -package racingcar; - -public class OutputView { -} diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java index 8c66d3d..7b79a13 100644 --- a/src/main/java/racingcar/RacingGame.java +++ b/src/main/java/racingcar/RacingGame.java @@ -1,4 +1,37 @@ package racingcar; +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.List; + public class RacingGame { + + InputView inputView = new InputView(); + + public List start(List list) { + + List carList = inputView.createCars(); + int count = inputView.getCount(); + + for (int i = 0; i < count; i ++) { + for (Car car : carList) { + int randomNumber = Randoms.pickNumberInRange(0,9); + car.upCount(randomNumber); + } + } + + for (Car car : carList) { + int carCount = car.getCount(); + String carName = car.getCarName(); + + System.out.print(carName + " : "); + + for (int j = 0; j < carCount; j++) { + System.out.print("-"); + } + + System.out.println(); + } + return carList; + } } From 4b13715723b7e5687e3f3fa574cd031d065678d5 Mon Sep 17 00:00:00 2001 From: songzio Date: Wed, 25 Mar 2026 16:43:42 +0900 Subject: [PATCH 07/10] =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=9C=BC=EB=A1=9C=20co?= =?UTF-8?q?unnt=20=EC=98=AC=EB=A6=AC=EB=8A=94=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 2d6fdf0..3141153 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -15,7 +15,7 @@ public Car(String carName) { // 매개변수를 가진 생성자 public void upCount(int number) { if (number >= 4) { this.count ++; - }ㅎ + } } public String getCarName() { From 7ac0c1213582290f02dd02157f39dab5551cf82e Mon Sep 17 00:00:00 2001 From: songzio Date: Wed, 25 Mar 2026 18:20:07 +0900 Subject: [PATCH 08/10] =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/RacingResult.java | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/racingcar/RacingResult.java diff --git a/src/main/java/racingcar/RacingResult.java b/src/main/java/racingcar/RacingResult.java new file mode 100644 index 0000000..5dcbd9b --- /dev/null +++ b/src/main/java/racingcar/RacingResult.java @@ -0,0 +1,30 @@ +package racingcar; + +import java.util.ArrayList; +import java.util.List; + +public class RacingResult { + + RacingGame racingGame = new RacingGame(); + + public void result(List carList) { + ArrayList winnerList = new ArrayList<>(); + int maxNum = 0; + + for (Car car : carList) { + if (car.getCount() >= maxNum) { + maxNum = car.getCount(); + } + } + + for(Car car: carList) { + if (car.getCount() == maxNum ) { + winnerList.add(car.getCarName()); + } + } + + String winnerNames = String.join(", ", winnerList); + System.out.print("최종 우승자 : "); + System.out.print(winnerNames); + } +} From c30b887472b092b2e691737f0c6e9473b1400b06 Mon Sep 17 00:00:00 2001 From: songzio Date: Wed, 25 Mar 2026 18:34:41 +0900 Subject: [PATCH 09/10] =?UTF-8?q?RacingGame=EC=95=88=EC=97=90=20for?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD,=20application=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 13 ++++++++++++- src/main/java/racingcar/RacingGame.java | 19 +++++++++++-------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index c2b9df5..65445c5 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,18 @@ package racingcar; +import java.util.List; + public class Application { public static void main(String[] args) { + // 1. 게임 엔진 객체 생성 + RacingGame racingGame = new RacingGame(); + + // 2. 게임 실행 및 최종 자동차 리스트 받아오기 + // RacingGame.java의 start 메서드는 List를 반환하도록 설계하셨습니다. + List carList = racingGame.start(null); + // 3. 우승자 판별 및 결과 출력 + RacingResult racingResult = new RacingResult(); + racingResult.result(carList); } -} +} \ No newline at end of file diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java index 7b79a13..7f5a270 100644 --- a/src/main/java/racingcar/RacingGame.java +++ b/src/main/java/racingcar/RacingGame.java @@ -13,23 +13,26 @@ public List start(List list) { List carList = inputView.createCars(); int count = inputView.getCount(); + System.out.println("실행결과"); + for (int i = 0; i < count; i ++) { for (Car car : carList) { int randomNumber = Randoms.pickNumberInRange(0,9); car.upCount(randomNumber); } - } - for (Car car : carList) { - int carCount = car.getCount(); - String carName = car.getCarName(); + for (Car car : carList) { + int carCount = car.getCount(); + String carName = car.getCarName(); - System.out.print(carName + " : "); + System.out.print(carName + " : "); - for (int j = 0; j < carCount; j++) { - System.out.print("-"); - } + for (int j = 0; j < carCount; j++) { + System.out.print("-"); + } + System.out.println(); + } System.out.println(); } return carList; From 3777d640892f716ad56eb0051f7afd09c0604f8d Mon Sep 17 00:00:00 2001 From: songzio Date: Tue, 7 Apr 2026 15:05:45 +0900 Subject: [PATCH 10/10] =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/main/racingcar/Application.class | Bin 0 -> 1039 bytes bin/main/racingcar/Car.class | Bin 0 -> 705 bytes bin/main/racingcar/InputView.class | Bin 0 -> 2379 bytes bin/main/racingcar/OutputView.class | Bin 0 -> 1875 bytes bin/main/racingcar/RacingGame.class | Bin 0 -> 1540 bytes bin/main/racingcar/RacingResult.class | Bin 0 -> 1579 bytes bin/test/racingcar/ApplicationTest.class | Bin 0 -> 7547 bytes bin/test/study/StringTest.class | Bin 0 -> 3433 bytes src/main/java/racingcar/Application.java | 14 ++++---- src/main/java/racingcar/Car.java | 31 +++++------------- src/main/java/racingcar/InputView.java | 2 +- src/main/java/racingcar/OutputView.java | 26 +++++++++++++++ src/main/java/racingcar/RacingGame.java | 37 +++++++++------------- src/main/java/racingcar/RacingResult.java | 5 +-- 14 files changed, 61 insertions(+), 54 deletions(-) create mode 100644 bin/main/racingcar/Application.class create mode 100644 bin/main/racingcar/Car.class create mode 100644 bin/main/racingcar/InputView.class create mode 100644 bin/main/racingcar/OutputView.class create mode 100644 bin/main/racingcar/RacingGame.class create mode 100644 bin/main/racingcar/RacingResult.class create mode 100644 bin/test/racingcar/ApplicationTest.class create mode 100644 bin/test/study/StringTest.class create mode 100644 src/main/java/racingcar/OutputView.java diff --git a/bin/main/racingcar/Application.class b/bin/main/racingcar/Application.class new file mode 100644 index 0000000000000000000000000000000000000000..7b4d54b492dad103629ab0169b26fe68eda11b39 GIT binary patch literal 1039 zcmZuv+int36kP{~4j@_zEfmzYc!gfTdV469#5A!n!8U0PN#oODoZx9-Aj6>XvwSIu zBz}M&Wn718nSu0S&Smej*IsMS`up$q9{}(0)6?+1gfvZSZ_jtN5` zeJQ`oT30%q+G+dJwmgBQL**#1ArLKBS^~yV|Erxu6p0jKSQ1!nD#tz<_1d=kS+={j zK&IKZWVa<HJ*!Y^wiQ_9!HWf)-K~sFp+AX883`Fn}c^UHTw}hu9E^ z4L#{{R+)0eCqMF3x7JicuWn+Cq5^7u?=yQi>Uv3RBB7VZDLlbb&f1;EskFR^Go8J3 zJDg$mmI(kSqs&-)|SvOg$oyL8CRRc#@ZK-bdvK!hi{ zm8;2Hjl19;+a4qSYno1S)oBKChimHkoWfn+61azDMs)EQ244dE6QnQ3H2VZu?rWbW z$X)F0j|cw8H?b}e-q31 AdH?_b literal 0 HcmV?d00001 diff --git a/bin/main/racingcar/Car.class b/bin/main/racingcar/Car.class new file mode 100644 index 0000000000000000000000000000000000000000..5d3edd7181e97e1c10f0778feae599a93dd01f86 GIT binary patch literal 705 zcmZut%TB^T6g@)=1uT@O@8=FMkq_{(Au%CQS)e5D9BPAAET$I!$Gr+LV;L5PslA#4tpl~j4WOFEkL9^38_uNRp zV*Nl~dIF`ruWC06N!=7kx}$MGm}m>6w*0`4b_A-mztDP5z-*09y(|pmY-ErZFlzN) z2JCAiiIj>;HY}tCoIOAA4#t;#FFcg}p>98N<*+A1U%lg`8J+pp3jMK5$PT=S{wE$Qwff)D1=0#Lk>kj;n(dCpq3iAXYO*xx8|rVc zMh6DJIKfRrI-(ukCMy|ac~0@w(Fnk4Ji~6RKQS<#P<+sYGS3nTAkidA(ek8Kn3*P# zG*lU><>)s2e#~Gt7C+($3RPIJZjoyoKcZ-!#Oel=dR`BiC)eRFep4=dDi<)v{sQyF z8xRh|1uVubn!E)I$;Km`dj<)uo6^a$*0U#oSWjRH%giYA-^srn~lOuKiDa@ zv^pbpWJC&9r&yfU5BLUHt)1yde+pUtL8tV&oA4&g?A+aZ&$;L2dCoce^1nY{0C)%8 zGO{ETm}*Ej!XecRHX8Ay)v9Y3WVj@(KBJyjgAvsT2ak4~(L$DloLb$`t^E?R%gS3N zxawn_nh)9V`r$^7gjG$tp*1I?9h!MU?TBa+@|$8IHPWh@y4Yt9UDjzmA)%;g8P_!u zd?8a)Ev;TPsgz$<-sA+5wDd@@Nl#eR@V4k-L$#77J#1Q{P`kh`jnwR~@uC1lG71+Z z)zY1?w5T6zu$BqMlFY9t?MjaYkD0n*wO9-!TH`@LLfh2CzwBS1Pxs$e>|1@Qt2gbj zdx|~$IQ3hPJ>0{yOR3v;r~3!&o=JP~dS%(H=%Ql(@O=8(P+3K}GBr77k6g5eo~P~% zDN|4Gr^b8AeJIB3GS-s_C(Xsa{dfZ<66ClDCt@(dvUG?JEsT%M)s(mTumPK7Y?QD$ zq((i;$SpxbvuqvdhjlRP=vyJe$?ZA zVi$@TmZ}@9(c*_s*aN*(bD_o~r&@p&~Y}q5%Qnb}Kq&QjL>SZFr-cdh}iM!cqXQzyhB;?Nb z7<<8oW_#g|jhfQ;b%~@!BhU4u4_XJw1y#ZIi`xN4^Cr2vEDU$EZ^aWgF4AtcX+`t6D zBt1;c&%_FtRx$E9a0{`IKbtzN#bK<&XFLsayqhS&*TnJ?HldGNgVYZf!7rk`g6!qM+=fkJ;E@YXv1cDcgl2{xeEY zMI`rPJE|QFcM}Iulj&0PQ)W6C=Fv_97BMLyL+P&~;+4dCN(3frkv&6)S!qlJF!6uk NlX4l#1&XuK^*{HlgG~Sc literal 0 HcmV?d00001 diff --git a/bin/main/racingcar/OutputView.class b/bin/main/racingcar/OutputView.class new file mode 100644 index 0000000000000000000000000000000000000000..2f733d1b01ca6895327f9b7a56c1ee8dd7314a44 GIT binary patch literal 1875 zcmaJ?TW=dh6#gbov-WlyCytXgB@`FZ#%Y?E`=w4pscDG8xe$j0XhE86M#&`WU9&se zD(~(I7K*aFGjq;&zVBSdzyE#s8-S~L z*FXP#?DE^Z;Ba@lu)Mh|Y{k$wD_yDP7!vu(b%x%O zw*i*!+K~anNTplsB5|tw(p9UW zyDEavQ44}^2|tAaWDE>;5UcJ7O4KY2AxosZkT?!kBHq#~tZ0;~@&&IIlNe#>Hya;+ z`^RS==I-CSd;f=DO`O451EUN>U0f_YgfRvq;^MdjoR5*Cj1Vkkt*Emw5LuMCzv2Z_ zNsml3`8H{ELUtx{c+|johEpxobY$T%j5C)6y?ln9>SQMEsMOW?<8rX2HVac!D9RIeDQ=Nu_$1 zwa-&JD^%!&&3#?&4k=VQCh5OS8mo%idyBl@tayJE<3_En_H~OeSkcCYbY0;S?V%>^ zP)Vmyk%5Xbo2trfm#fexhlvL*W{<0yBd;W0Wazn^Gw~8i2CjFuOH?%rFXIMv@2)4Q zR@d4yR@&iyRlFAp*A~UL0A(e7-N41Jg`u=FoV*i>(G?^?1F>^Uk8bylQP{8lHxAF}O)^c$St2(^ z?+Lnnr!g2s&c*1>$P@=p;~9!Qh!H#sE#Z0cr(c)9=vFrA;DsZ7+Dz*+S~27F#OktS zINYYrI8t{7MZ%pW*B<)m(kgEe3!RaSRx~&DGp-$CKGNAz5~H3WW}^}6NbGUMJcC!T rK!nPK6BkAAyh=L>ycWf(V3FSaH~b2e#{P-ka$&w0=L^*rx$_Mg{(z5;L!4@@KkrhREEw`ohi zv=gsx%C=*|5SV-{zn7(!bepB^y~mCn3S^Y)MPXezKM2g!`jOQ`b6FtUiNYhNlLJoM zM|OIp*OjZnioi;Kz@?vOz&H?Bs0$byoraS|5@QxJ7#B$93-t`xuZ0xSdX=+aVnkq~ zrd($$YVSGzJ-OF%cv9=wvQ?M9()*s#2p_3HV6fLd73?(?gwiMaT)t3?If+8mD%DgF z@-VZjnyw5ZpV^m=Ijj%h*pPm?QqE!?Z<|;UIPpLHSvZ4Pa%lUG3>`)U+JDi)J6IAJ zX*%IXCvw>fL07YQ59dvs8yaGtEem-~&$Q<&H{6Nb9Vdud;Vnlt9Dfu=TrjaLFg}dP z!bPmGk_sJPh8>@@41ucl?B!8h!etZhla_vl!&3{Z_<*Bwogdlj^kIepEtO4N6&UMN zK&)AOgf$Z%3!JlM+biklAauNv(}+rK6$Gl|YU%?j)opazfrT>G1*SY@Kk1IS>hh?` zQKa(Ks%Gd4Di%J$rvhf=^|&+g)k0m9ciqAUKBsbGirB&3PM|_o(X)PIa)r7^ylLSk zZZX*-8EnPiIEZg_t}iUy)^v}@xo)(*@TpcGU2W-Wt+32-^`z|XI7L-JD2|oRTDL>I zP-T`MBkqFKQXP`6U9GZ6_=lLap5_pev2JX@STIf_bA``-i~3M z&onJ(yJ48YN$!{+E+gWVE|g$_Q<&vBnguynvCjUyXb!&eMS;OqYYt5aN_ literal 0 HcmV?d00001 diff --git a/bin/main/racingcar/RacingResult.class b/bin/main/racingcar/RacingResult.class new file mode 100644 index 0000000000000000000000000000000000000000..95f72b0564a3bb702600c884d6cc17f7717f1076 GIT binary patch literal 1579 zcmZuxT~iZR7=BJj*koBMh7U!B66*&bHCC(EET(E&6b&fEVr8Zmhp+=nlMUT$P%f%h z)|p=Q+UazxH{Mof#L~`mdflJkMSnqlgZiA!LN?&d`F!8!ectE1@A>cTU;hBOh`Smh z0)4J5+Rjo@y6IVeHEUICB~L?Cple00$#h9NOX-^nD^}4HXdky7+sg{H4UfzTM01rz zOGg_L24ZLz*ps&%Yr0lmu-w~np=1dp^Od43%}Li*``|F@E!$Or{rL|^HyOzFc?fh5 z=Y1MA&n~6&cGWXg;6%Y*a->&t8R5uIi}4U_PP%56E*iRt)kM1Nx^i8?=}02cfj;cl zuutHlrir>W(2oNGaoe+8=~Y|`Harp{G#Q+m9XNzR4FgQLiLiBR;A0F?Eyub~4STi_ zLdu#N4hwWP^e7=9SZ!flqN# zKvz!Eot9;))Ec$mxqNj~C4b7mXE;q#bU7 z^)ql4*92m#3TlTI0WVd28oNam2f2kx!LLnWUu_%(3UxJz>uoMWS}5r5%d>m1d!8ap@| z4Fk@d+_59Ehag>CN3d6ci0`;+=l=2ENZx&oo~gF%iB0qhWMa=T*dN=(L4kjf%0&C4 z8~9}4cO?8pR$Uzzc=GQ5rv2gF_D|6{rW{UeAbn@s=S}j=*q=C?iN1uHyu5)NXJwUB zX+)vY$dIf`AWrH!X{Shgl%!8_ok1^V_|42?9~QZGa1d*3;|CbPPZ;!5zvgT7I7pod zViMOWK^zZp19_&c<3~(kn%bs_c@wu7c?R9VYK^gGFw3(7dGyh~fpL2q;~SpM@$>+q b??|FugV4~YA*r6{5YKxCX?uqj5q$d|{#19H literal 0 HcmV?d00001 diff --git a/bin/test/racingcar/ApplicationTest.class b/bin/test/racingcar/ApplicationTest.class new file mode 100644 index 0000000000000000000000000000000000000000..5951e3dd81ca47fd44a92bfcecc0dc0704d8ab70 GIT binary patch literal 7547 zcmbVQ33yc175;CwnT!t-21G!Xh(SUO3<1JoL`4Ki8^DqnOl=(}lSdes%#5=Ha4T(t zMzIZwC?F`cR8VOfWieW{`)2KK_kC}fN%wuR{qKD<^IkG-Tj>JRyC1JQmj@ z9=$W+=?=tVbVDVHzc1M4iw5L%+E^0b9Eb^A*qk?^Mh25Q(wjQg>rEZmmpZnS*>6aM;(>0x zEf5P3YDFj%j;jqI($wZ~w9B(4!Ql8e5{TQSHFR0`t!05Ld)vdQ`>{(=ZE{2u$-S%LZSlGu&DOy}u2&dKNd&JH|~^(wLVN*%pFdGd7Dt5kYTOYJ_C z?Cy_QMRQU+Bx~k-gRS)^mRlNp|!q1 z$boB_lGy|;@hDZzg(ke&fj0@9Z>tI#nz5FW(@g}~N7j-w5E^B5ID@|Kj!s|od;!<0 z?S4I?+Qfmk2#hx=TQ^6;+hq4T(IQYD33mkQwuM6hC$6Uw*1K4@8#UY@35yxEynd^O z8}T+uU^o$vB&eVhYOI}{4#9<+aI*tmff-VfjB?-N@rR?j5+rNq`q0534VTu;?FZ%A(!g5Z&L3(T?4$R-dCVMNI04~ODBE(&z>u=BFU)o5sK z-UO|_=`_t#u6JWBD1vb$SQ>oM1O-|P3wsV(wjKV$lru*8n$BxUunkU z^2n55=xQ3f3>kal$OY0L5gCv8HY$gC#7)7V-sKCfh;}8q^-w%p@-EzgcQ|mTK;5Xv zHUeM6PP|h<3&fh#B;Z$Xt)HJ!J&$_)Far@M3^O!1v4>+rwwdcV4_E*eJF!1oaG=}g3CDhm9Ctgc95%ue<19B{! zFk*n6C$r*P;p%Xh(`(chS*yo4hdW~~d=wvd;A6vTJ`m~&Z`D1`O6lq7+e9G@M|WuW z1U|`a>NZURuUcz2{iFfDhSO3|k5xB^!&?)P#@rLKScW~=x+9`n-Ov4|K{@)f*0)L; zS;|lghuX%9GQ3;~O&a1h z8tziI@0zwBYv@z9ADOmaXt-C|es0>%YPe6?eq-8xr{TTI_FL2TXASo&+n-F^KQuh3 zY=1XxuWNW%+5VHYiDC_pNt-A#ZB7l3E1Sc#jnVLaWs{r2|G8Jft>H;!8)w=s&~QT8 zCYrXX8a}LS7n-(w%kWDemRDfXx zGrSBPVgX0d(Oo%&7&Yq<4FV0e`aVL}bKYnUv4oS}xjf3QRA83ZA*xt_@{_O#Q&5UB zUOCj2lh@^zYZpIHAU_T1F@`G-e+7R_YoEi|XVfE={3`*Z+c^G}u5_UKkLNF_@fvB) z=Sq4_Gy||34mO)%(g1b?|2i$yMB4Ng168|%aCTEFe z+Y&7$sSLYJ7O|R$HMWSJf{62N5$lLJ-xjgH zAmRdB#6?70YKyqAAmSoh#LJ0zl`UdJLBz$jh}RHtjV znO3oSE;Gus)GX8Xl6=*AJ)di5Wwr9(4{o&ZRb^|d(U#BJ7MEMwLN#NzqeB_?w~B)iFzcki1V%~1`XNmU11x{8j7A212==Y+6bnY!Pv;nE;8N2 zZ@H4=n3Gtm2eD?PgdL=O zKVrdf8c|jj$q|Dhx1Kqd5aT+fy?&~*+=cpD*7EB1V)urY_7Zn%%NexQoJISc){Q3ZSoQW8PnrqTC8^38;jhn9bCSuSUQUaouHXSgWry~-Z#{$C zO<+Tkr?E|^TR}`g!2W*?hNAM03`fUk0O6L%sbHDD( z_NzU0kksAm*N}zU>{m|gIn;M@bLEV5S!Q!puKP1m(R?YzBAx9)m952aXhixGi3Mz9 z4BIK;J2)ZTie

#WK-gG4`EzXY#H2Cpl%H;eK?m}JHrRsl+pjR_$-JP;Z9)0* zSQu2b${996&OxoR1?AW0If6cK2f8*FlrQOzu;q&IB3|O}YkX0EindSVbNIYky@D^| zOKSCHd<|b$tJm-?d|R!)gYV-9YV||>1V2@)pW&DIm0JB8Nu<wK$d4&)qqExNQM7eOO)p=s9s8Fj)Fn>EoO@vwVEU9#9YBoFxGmJ@Q8Y`5R=6su~;lEEB_xwM@G*8 literal 0 HcmV?d00001 diff --git a/bin/test/study/StringTest.class b/bin/test/study/StringTest.class new file mode 100644 index 0000000000000000000000000000000000000000..ecbf42ba96d3677c03fd3efdf8f3291e710ffd15 GIT binary patch literal 3433 zcmb7GZBr9h7(Ew|gcu8~Kz%`tikJW;VtuQTT1c@{gS0}m)Yfzf3oM4+xVus4D=KXr zb*4^RT6Cb(PTR3g`9ND5qoYngclt}n@)tUN?rsQ?#J3OG%|7?u=bZE0bD!OR{=54C zKr=2mP{2^88}YtTf0v=j%0RcI8x9mvbVxia`lF&U;P31mk|G8}@c~(pjh7h;y}siN zMM1Ssa-k3q@(fSUP zsBDB&x4tpQr&3=}rGA_Wn?Kz%znwF0j)&)GzcQ!k_SZ}*G0w2|SX?pWVd=Q6%ap!F zQB*@TWL2T;)ge_I@DIg_FkNG^A!&XwCi}U*fD;0VXlmH$Lx<6X1q8z;H01)ACzjvF3I`(k^h}WxV3RK?Yymeb2YZ zjTR1FBI|8u;$pO0CH;{>QEORtBGcl{sd4kpq&YnqPR%5##$j{z!F+PoiC5`#iM-*q!ui>-dFeMx`La@^ ze!0i1!Mjyz;%eBOykuTalBuT5i_-%2-flPE0`H;J9-|CLo_@2t2Q~E^@1}M!YOH6n zXOI%{FrBk%yzNF0-l5YZT78Ch6>FZ-N=I$Lo8LxH%>0CHTDCsmz`JC=61n} z<3?wHs~T7O^tO?R6yr_Xg;RLnf$)=dbs3BsB6=Czvfi%fhNwiO&VGh{*#!+osSJF9yM-w)P9dfuR>|RXE*2B@5TTI87c-vy+hJ%?UHta zp*0&l-KL(gc+`NS;&5-DShItnGG9J&k1JC=-GO0hk4weQREcJFsc|hL9g_JQxzwh^ zUxST&Hofv%Rn^d`X~#MwV^HnWUC=<^0Mz)mEaj7xv+8NdAF?>nM6sVvq^ga&5yx4E zmBULRhJUm9rdQg@4~t4)RMKlgs(Lye3*@%ItjI$PyGLVE_VlM8v>_kAHoF(6GxPJ* zMV}3U(qfz`L$M1CAGjf7hytS&AkVccilkZYl4t`yW!RQeuza!|IM1;0@l&Z|+BI^3 zzI1ly?Q@wuency9;B$tWr&&rau##o<5qL;&A+;*NK|lJyqi6olPj|*6b+_UCo&FTS zMOQuyII)thZhHdVSJ4yj9E}#Bl>YHqWpw9>KBJ@@V6RXfsuxx#P}$Lt#QGKYQPoo@ zZ0_nQ61H|Fu7F&EN|e{1@}$ zhbb2?Po=OcRA1ysU=J_PexW>p<}C3x@CKT?k$^p@z~(IA$_%iO0bWVKeoJ_3Uf@$S z#(^t@V5q(@fwt!AB-+cw1VTBu+h}GjO0XTP;myLW$l#WzaZ70Q4ZLaL9?OdxrZK)9 z>pAXSbOA}65KboW-rqPSL=up);O#wcAoxat@{{ZxSV#NGYhGoi$xv8hQz&!s(@SHg zX-*LtF>2YcmLlA`#dS{7y0oLVp&PA?oK_(ex)wl1jPBgx=O{LU5AhK`riegepI{6Z NXy-4IxxXkb`5&K@=Bxk! literal 0 HcmV?d00001 diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 65445c5..55eadce 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -4,15 +4,17 @@ public class Application { public static void main(String[] args) { - // 1. 게임 엔진 객체 생성 - RacingGame racingGame = new RacingGame(); + // 1. 입출력 뷰 객체 생성 + InputView inputView = new InputView(); + OutputView outputView = new OutputView(); - // 2. 게임 실행 및 최종 자동차 리스트 받아오기 - // RacingGame.java의 start 메서드는 List를 반환하도록 설계하셨습니다. - List carList = racingGame.start(null); + // 2. 게임 엔진에 뷰 객체 주입 및 실행 (null 파라미터 제거) + RacingGame racingGame = new RacingGame(inputView, outputView); + List carList = racingGame.start(); // 3. 우승자 판별 및 결과 출력 + // (RacingResult 내부에서도 outputView를 사용하도록 수정하는 것을 권장함) RacingResult racingResult = new RacingResult(); - racingResult.result(carList); + racingResult.result(carList); } } \ No newline at end of file diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 3141153..be2559d 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,36 +1,21 @@ package racingcar; public class Car { + // public에서 private으로 변경하여 외부 조작 방지 + private String carName; + private int count; - public String carName; - public int count; - - public Car() {} - - public Car(String carName) { // 매개변수를 가진 생성자 + public Car(String carName) { this.carName = carName; this.count = 0; } public void upCount(int number) { if (number >= 4) { - this.count ++; + this.count++; } } - public String getCarName() { - return carName; - } - - public void setCarName(String carName) { - this.carName = carName; - } - - public int getCount() { - return count; - } - - public void setCount(int count) { - this.count = count; - } -} + public String getCarName() { return carName; } + public int getCount() { return count; } +} \ No newline at end of file diff --git a/src/main/java/racingcar/InputView.java b/src/main/java/racingcar/InputView.java index a1b7c72..4dd2990 100644 --- a/src/main/java/racingcar/InputView.java +++ b/src/main/java/racingcar/InputView.java @@ -57,4 +57,4 @@ public int getCount() { return tryCount; } -} +} \ No newline at end of file diff --git a/src/main/java/racingcar/OutputView.java b/src/main/java/racingcar/OutputView.java new file mode 100644 index 0000000..b07f1bb --- /dev/null +++ b/src/main/java/racingcar/OutputView.java @@ -0,0 +1,26 @@ +package racingcar; + +import java.util.List; + +public class OutputView { + + public void printRunResultHeader() { + System.out.println("\n실행 결과"); + } + + public void printCarPosition(Car car) { + System.out.print(car.getCarName() + " : "); + for (int i = 0; i < car.getCount(); i++) { + System.out.print("-"); + } + System.out.println(); + } + + public void printEmptyLine() { + System.out.println(); + } + + public void printWinners(List winnerNames) { + System.out.print("최종 우승자 : " + String.join(", ", winnerNames)); + } +} \ No newline at end of file diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java index 7f5a270..8fc1f39 100644 --- a/src/main/java/racingcar/RacingGame.java +++ b/src/main/java/racingcar/RacingGame.java @@ -1,40 +1,33 @@ package racingcar; import camp.nextstep.edu.missionutils.Randoms; - import java.util.List; public class RacingGame { + private final InputView inputView; + private final OutputView outputView; - InputView inputView = new InputView(); - - public List start(List list) { + // 생성자를 통한 의존성 주입 + public RacingGame(InputView inputView, OutputView outputView) { + this.inputView = inputView; + this.outputView = outputView; + } + // 불필요한 List 매개변수 제거 + public List start() { List carList = inputView.createCars(); int count = inputView.getCount(); - System.out.println("실행결과"); + outputView.printRunResultHeader(); - for (int i = 0; i < count; i ++) { + for (int i = 0; i < count; i++) { for (Car car : carList) { - int randomNumber = Randoms.pickNumberInRange(0,9); + int randomNumber = Randoms.pickNumberInRange(0, 9); car.upCount(randomNumber); + outputView.printCarPosition(car); // 출력 위임 } - - for (Car car : carList) { - int carCount = car.getCount(); - String carName = car.getCarName(); - - System.out.print(carName + " : "); - - for (int j = 0; j < carCount; j++) { - System.out.print("-"); - } - - System.out.println(); - } - System.out.println(); + outputView.printEmptyLine(); } return carList; } -} +} \ No newline at end of file diff --git a/src/main/java/racingcar/RacingResult.java b/src/main/java/racingcar/RacingResult.java index 5dcbd9b..87cddfd 100644 --- a/src/main/java/racingcar/RacingResult.java +++ b/src/main/java/racingcar/RacingResult.java @@ -5,7 +5,8 @@ public class RacingResult { - RacingGame racingGame = new RacingGame(); + // 문제의 원인! 이 줄을 과감하게 삭제합니다. + // RacingGame racingGame = new RacingGame(); public void result(List carList) { ArrayList winnerList = new ArrayList<>(); @@ -27,4 +28,4 @@ public void result(List carList) { System.out.print("최종 우승자 : "); System.out.print(winnerNames); } -} +} \ No newline at end of file