From 69d278cd19cae969a372f3d1166d604e7b65dc80 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 10:25:04 +0900 Subject: [PATCH 01/37] =?UTF-8?q?feat:=20Car=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 14 ++++++++++++++ src/main/java/racingcar/model/Car.java | 20 ++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/main/java/racingcar/model/Car.java diff --git a/docs/README.md b/docs/README.md index e69de29b..7f818328 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,14 @@ +### 구현해야 하는 기능 목록 + +##자동차 +-[] 클래스 기본 틀 작성(변수, 생성자 등) +-[] 랜덤 수(0~9) 반환 메소드 +-[] 자동차를 한 칸 전진하는 메소드 + +##입력 +-[] 자동차 이름 & 입력 횟수 입력 +-[] 입력받은 데이터 전달 + +##출력 +-[] 라운드 진행 시마다 경기 진행 상황 출력 +-[] 경주 종료 후 최종 결과 및 우승자 출력 diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java new file mode 100644 index 00000000..1106058f --- /dev/null +++ b/src/main/java/racingcar/model/Car.java @@ -0,0 +1,20 @@ +package racingcar.model; + +public class Car { + int location; + String name; + + + public Car(String name) { + this.name = name; + this.location = 0; + } + + public void moveForward() { + if(isAbleToMove()) ++location; + } + + private boolean isAbleToMove() { + return (int)(Math.random() * 10) >= 4; + } +} From 9229ec466f63f75909bbaed4e87a7d905304913b Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 11:38:35 +0900 Subject: [PATCH 02/37] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=9E=85=EB=A0=A5=20&=20=EA=B4=80=EB=A0=A8=20DTO?= =?UTF-8?q?=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 15 +++++++++++---- .../controller/RacingController.java | 4 ++++ .../controller/dto/RacerInfoInputDto.java | 19 +++++++++++++++++++ src/main/java/racingcar/model/Car.java | 12 ++++++++++++ 4 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 src/main/java/racingcar/controller/RacingController.java create mode 100644 src/main/java/racingcar/controller/dto/RacerInfoInputDto.java diff --git a/docs/README.md b/docs/README.md index 7f818328..cf2f859c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,14 +1,21 @@ ### 구현해야 하는 기능 목록 ##자동차 --[] 클래스 기본 틀 작성(변수, 생성자 등) --[] 랜덤 수(0~9) 반환 메소드 --[] 자동차를 한 칸 전진하는 메소드 +-[x] 클래스 기본 틀 작성(변수, 생성자 등) +-[x] 랜덤 수(0~9) 반환 메소드 +-[x] 자동차를 한 칸 전진하는 메소드 ##입력 --[] 자동차 이름 & 입력 횟수 입력 +-[x] 자동차 이름 & 입력 횟수 입력 -[] 입력받은 데이터 전달 ##출력 -[] 라운드 진행 시마다 경기 진행 상황 출력 -[] 경주 종료 후 최종 결과 및 우승자 출력 + + +###고민 사항 +- 자동차 정보를 입력받는 DTO를 어떻게 설계하는 것이 좋을까? + - 입력 텍스트 그대로(poni,woni,jun)를 DTO에 넣기 + - 이름을 분리하여 List에 넣기 + - 이름을 분리한 것을 바탕으로 Car 객체들로 변환하고, List에 넣기 \ No newline at end of file diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java new file mode 100644 index 00000000..57939a02 --- /dev/null +++ b/src/main/java/racingcar/controller/RacingController.java @@ -0,0 +1,4 @@ +package racingcar.controller; + +public class RacingController { +} diff --git a/src/main/java/racingcar/controller/dto/RacerInfoInputDto.java b/src/main/java/racingcar/controller/dto/RacerInfoInputDto.java new file mode 100644 index 00000000..22192d01 --- /dev/null +++ b/src/main/java/racingcar/controller/dto/RacerInfoInputDto.java @@ -0,0 +1,19 @@ +package racingcar.controller.dto; + +import racingcar.model.Car; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public record RacerInfoInputDto( + String cars, + int gameCount +) { + public List toCars() { + return Arrays.stream(cars.split(",")) + .map(String::trim) + .map(Car::new) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java index 1106058f..da558201 100644 --- a/src/main/java/racingcar/model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -1,5 +1,9 @@ package racingcar.model; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public class Car { int location; String name; @@ -17,4 +21,12 @@ public void moveForward() { private boolean isAbleToMove() { return (int)(Math.random() * 10) >= 4; } + + public int getLocation() { + return location; + } + + public String getName() { + return name; + } } From 685fe5ac91d28187748c614b33a708b291732658 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 11:49:47 +0900 Subject: [PATCH 03/37] =?UTF-8?q?feat:=20=EB=A0=88=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=EC=83=81=ED=99=A9=20=EC=B6=9C=EB=A0=A5=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?DTO=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../racingcar/controller/dto/RaceStatusOutputDto.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/racingcar/controller/dto/RaceStatusOutputDto.java diff --git a/src/main/java/racingcar/controller/dto/RaceStatusOutputDto.java b/src/main/java/racingcar/controller/dto/RaceStatusOutputDto.java new file mode 100644 index 00000000..79dc66e4 --- /dev/null +++ b/src/main/java/racingcar/controller/dto/RaceStatusOutputDto.java @@ -0,0 +1,11 @@ +package racingcar.controller.dto; + +import racingcar.model.Car; + +import java.util.List; + +public record RaceStatusOutputDto( + List cars +) +{ +} From 40da36d11f8135aaad09ca62feab65c2e899e85a Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 11:54:29 +0900 Subject: [PATCH 04/37] =?UTF-8?q?feat:=20=EB=A0=88=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=EC=B5=9C=EC=A2=85=20=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20DTO=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/dto/RaceFinalResultOutputDto.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/racingcar/controller/dto/RaceFinalResultOutputDto.java diff --git a/src/main/java/racingcar/controller/dto/RaceFinalResultOutputDto.java b/src/main/java/racingcar/controller/dto/RaceFinalResultOutputDto.java new file mode 100644 index 00000000..2813273b --- /dev/null +++ b/src/main/java/racingcar/controller/dto/RaceFinalResultOutputDto.java @@ -0,0 +1,8 @@ +package racingcar.controller.dto; + +import java.util.List; + +public record RaceFinalResultOutputDto ( + List winners +) { +} From 61d357ea3799888ea5a5643905caae9c15abf3a5 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 12:40:04 +0900 Subject: [PATCH 05/37] =?UTF-8?q?refactor:=20Car=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=97=90=20static=20=EB=A9=A4=EB=B2=84=20=EB=B3=80?= =?UTF-8?q?=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/model/Car.java | 10 ++++------ src/main/java/racingcar/view/InputView.java | 5 +++++ src/main/java/racingcar/view/OutputView.java | 4 ++++ 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 src/main/java/racingcar/view/InputView.java create mode 100644 src/main/java/racingcar/view/OutputView.java diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java index da558201..aa9727ef 100644 --- a/src/main/java/racingcar/model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -1,10 +1,8 @@ package racingcar.model; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - public class Car { + private static final int CAN_MOVE_STANDARD = 4; + int location; String name; @@ -14,12 +12,12 @@ public Car(String name) { this.location = 0; } - public void moveForward() { + public void move() { if(isAbleToMove()) ++location; } private boolean isAbleToMove() { - return (int)(Math.random() * 10) >= 4; + return (int)(Math.random() * 10) >= CAN_MOVE_STANDARD; } public int getLocation() { diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java new file mode 100644 index 00000000..9f719576 --- /dev/null +++ b/src/main/java/racingcar/view/InputView.java @@ -0,0 +1,5 @@ +package racingcar.view; + +public class InputView { + +} diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java new file mode 100644 index 00000000..abf938a6 --- /dev/null +++ b/src/main/java/racingcar/view/OutputView.java @@ -0,0 +1,4 @@ +package racingcar.view; + +public class OutputView { +} From 7bbb90e0b894283c29ebaaa69bd38b99ddcbea48 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 14:19:04 +0900 Subject: [PATCH 06/37] =?UTF-8?q?feat:=20InputView=20&=20OutputView=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../racingcar/controller/RacingController.java | 15 +++++++++++++++ src/main/java/racingcar/view/InputView.java | 10 ++++++++++ src/main/java/racingcar/view/OutputView.java | 7 +++++++ 3 files changed, 32 insertions(+) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 57939a02..6d056d8a 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -1,4 +1,19 @@ package racingcar.controller; +import racingcar.view.InputView; +import racingcar.view.OutputView; + public class RacingController { + private final InputView inputView; + private final OutputView outputView; + + public RacingController(InputView inputView, OutputView outputView) { + this.inputView = inputView; + this.outputView = outputView; + } + + public void getInfosBeforeRaceStart() { + output + } + } diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index 9f719576..3c1617e2 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -1,5 +1,15 @@ package racingcar.view; +import java.util.Scanner; + public class InputView { + public void getStringInput() { + Scanner sc = new Scanner(System.in); + sc.nextLine(); + } + public void getNumInput() { + Scanner sc = new Scanner(System.in); + sc.nextInt(); + } } diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index abf938a6..701300df 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -1,4 +1,11 @@ package racingcar.view; public class OutputView { + public void getCars() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분"); + } + + public void getTryCount() { + System.out.println("시도할 회수는 몇회인가요?"); + } } From f64079ae5c213bbb742a59ced0f66979a6a36ac8 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 14:27:51 +0900 Subject: [PATCH 07/37] =?UTF-8?q?feat:=20StringUtils=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../racingcar/controller/RacingController.java | 5 ++++- .../racingcar/controller/util/StringUtils.java | 14 ++++++++++++++ src/main/java/racingcar/view/InputView.java | 8 ++++---- 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 src/main/java/racingcar/controller/util/StringUtils.java diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 6d056d8a..235cdf92 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -7,13 +7,16 @@ public class RacingController { private final InputView inputView; private final OutputView outputView; + public RacingController(InputView inputView, OutputView outputView) { this.inputView = inputView; this.outputView = outputView; } public void getInfosBeforeRaceStart() { - output + outputView.getCars(); + inputView.getStringInput(); } + } diff --git a/src/main/java/racingcar/controller/util/StringUtils.java b/src/main/java/racingcar/controller/util/StringUtils.java new file mode 100644 index 00000000..a38d598a --- /dev/null +++ b/src/main/java/racingcar/controller/util/StringUtils.java @@ -0,0 +1,14 @@ +package racingcar.controller.util; + +import java.util.Arrays; +import java.util.List; + +public class StringUtils { + public List splitByComma(String str) { + return Arrays.stream(str.split(",")).toList(); + } + + public String NumToSticks(int count) { + return "-".repeat(count); + } +} diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index 3c1617e2..ff322075 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -3,13 +3,13 @@ import java.util.Scanner; public class InputView { - public void getStringInput() { + public String getStringInput() { Scanner sc = new Scanner(System.in); - sc.nextLine(); + return sc.nextLine(); } - public void getNumInput() { + public int getNumInput() { Scanner sc = new Scanner(System.in); - sc.nextInt(); + return sc.nextInt(); } } From a7ff5463aff0256494c1cddc06bdb6e6d3655354 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 16:28:29 +0900 Subject: [PATCH 08/37] =?UTF-8?q?refactor:=20StringUtils=20-=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=97=B4=EC=9D=84=20=EC=9D=B4=EC=9A=A9=ED=95=B4=20Car?= =?UTF-8?q?=EB=93=A4=EC=9D=84=20=EB=A7=8C=EB=93=9C=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 3 ++- .../controller/RacingController.java | 15 +++++++++++-- ...ultOutputDto.java => RaceFinalResult.java} | 2 +- ...ceStatusOutputDto.java => RaceStatus.java} | 2 +- .../racingcar/controller/dto/RacerInfo.java | 12 +++++++++++ .../controller/dto/RacerInfoInputDto.java | 19 ----------------- .../controller/util/StringUtils.java | 21 +++++++++++++++---- src/main/java/racingcar/view/OutputView.java | 2 ++ 8 files changed, 48 insertions(+), 28 deletions(-) rename src/main/java/racingcar/controller/dto/{RaceFinalResultOutputDto.java => RaceFinalResult.java} (69%) rename src/main/java/racingcar/controller/dto/{RaceStatusOutputDto.java => RaceStatus.java} (76%) create mode 100644 src/main/java/racingcar/controller/dto/RacerInfo.java delete mode 100644 src/main/java/racingcar/controller/dto/RacerInfoInputDto.java diff --git a/docs/README.md b/docs/README.md index cf2f859c..4a128363 100644 --- a/docs/README.md +++ b/docs/README.md @@ -18,4 +18,5 @@ - 자동차 정보를 입력받는 DTO를 어떻게 설계하는 것이 좋을까? - 입력 텍스트 그대로(poni,woni,jun)를 DTO에 넣기 - 이름을 분리하여 List에 넣기 - - 이름을 분리한 것을 바탕으로 Car 객체들로 변환하고, List에 넣기 \ No newline at end of file + - 이름을 분리한 것을 바탕으로 Car 객체들로 변환하고, List에 넣기 +- 입력 텍스트 \ No newline at end of file diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 235cdf92..343cf0e5 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -1,8 +1,11 @@ package racingcar.controller; +import racingcar.controller.dto.RacerInfo; +import racingcar.controller.util.StringUtils; import racingcar.view.InputView; import racingcar.view.OutputView; + public class RacingController { private final InputView inputView; private final OutputView outputView; @@ -13,10 +16,18 @@ public RacingController(InputView inputView, OutputView outputView) { this.outputView = outputView; } - public void getInfosBeforeRaceStart() { + public RacerInfo getInfosBeforeRaceStart() { outputView.getCars(); - inputView.getStringInput(); + String racerStr = inputView.getStringInput(); + List + + outputView.getTryCount(); + int tryCnt = inputView.getNumInput(); + + return new RacerInfo(, tryCnt); } + public void raceStart(RacerInfo racerInfo) { + } } diff --git a/src/main/java/racingcar/controller/dto/RaceFinalResultOutputDto.java b/src/main/java/racingcar/controller/dto/RaceFinalResult.java similarity index 69% rename from src/main/java/racingcar/controller/dto/RaceFinalResultOutputDto.java rename to src/main/java/racingcar/controller/dto/RaceFinalResult.java index 2813273b..b541f200 100644 --- a/src/main/java/racingcar/controller/dto/RaceFinalResultOutputDto.java +++ b/src/main/java/racingcar/controller/dto/RaceFinalResult.java @@ -2,7 +2,7 @@ import java.util.List; -public record RaceFinalResultOutputDto ( +public record RaceFinalResult( List winners ) { } diff --git a/src/main/java/racingcar/controller/dto/RaceStatusOutputDto.java b/src/main/java/racingcar/controller/dto/RaceStatus.java similarity index 76% rename from src/main/java/racingcar/controller/dto/RaceStatusOutputDto.java rename to src/main/java/racingcar/controller/dto/RaceStatus.java index 79dc66e4..fa64a4fd 100644 --- a/src/main/java/racingcar/controller/dto/RaceStatusOutputDto.java +++ b/src/main/java/racingcar/controller/dto/RaceStatus.java @@ -4,7 +4,7 @@ import java.util.List; -public record RaceStatusOutputDto( +public record RaceStatus( List cars ) { diff --git a/src/main/java/racingcar/controller/dto/RacerInfo.java b/src/main/java/racingcar/controller/dto/RacerInfo.java new file mode 100644 index 00000000..2d03b43b --- /dev/null +++ b/src/main/java/racingcar/controller/dto/RacerInfo.java @@ -0,0 +1,12 @@ +package racingcar.controller.dto; + +import racingcar.model.Car; + +import java.util.List; + + +public record RacerInfo( + List cars, + int gameCount +) { +} diff --git a/src/main/java/racingcar/controller/dto/RacerInfoInputDto.java b/src/main/java/racingcar/controller/dto/RacerInfoInputDto.java deleted file mode 100644 index 22192d01..00000000 --- a/src/main/java/racingcar/controller/dto/RacerInfoInputDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package racingcar.controller.dto; - -import racingcar.model.Car; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -public record RacerInfoInputDto( - String cars, - int gameCount -) { - public List toCars() { - return Arrays.stream(cars.split(",")) - .map(String::trim) - .map(Car::new) - .collect(Collectors.toList()); - } -} diff --git a/src/main/java/racingcar/controller/util/StringUtils.java b/src/main/java/racingcar/controller/util/StringUtils.java index a38d598a..03fb4e49 100644 --- a/src/main/java/racingcar/controller/util/StringUtils.java +++ b/src/main/java/racingcar/controller/util/StringUtils.java @@ -1,14 +1,27 @@ package racingcar.controller.util; -import java.util.Arrays; +import racingcar.model.Car; + +import java.util.ArrayList; import java.util.List; public class StringUtils { - public List splitByComma(String str) { - return Arrays.stream(str.split(",")).toList(); + public static String[] splitByComma(String str) { + return str.split(","); } - public String NumToSticks(int count) { + public static String NumToSticks(int count) { return "-".repeat(count); } + + public static List makeCarsUsingString(String str) { + String[] strs = StringUtils.splitByComma(str); + List cars = new ArrayList<>(); + + for (var c : strs) { + cars.add(new Car(c)); + } + + return cars; + } } diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index 701300df..06524d77 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -8,4 +8,6 @@ public void getCars() { public void getTryCount() { System.out.println("시도할 회수는 몇회인가요?"); } + + public void } From 45ea1264cc19a22606669b7057cdf0825b8ac843 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 16:47:18 +0900 Subject: [PATCH 09/37] =?UTF-8?q?refactor:=20OutputView=20-=20=EA=B2=BD?= =?UTF-8?q?=EA=B8=B0=20=EC=83=81=ED=99=A9,=20=EA=B2=BD=EA=B8=B0=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../racingcar/controller/RacingController.java | 15 ++++++++++++--- .../controller/dto/RaceFinalResult.java | 8 -------- .../racingcar/controller/dto/RaceStatus.java | 11 ----------- .../{controller => }/util/StringUtils.java | 2 +- src/main/java/racingcar/view/OutputView.java | 17 ++++++++++++++++- 5 files changed, 29 insertions(+), 24 deletions(-) delete mode 100644 src/main/java/racingcar/controller/dto/RaceFinalResult.java delete mode 100644 src/main/java/racingcar/controller/dto/RaceStatus.java rename src/main/java/racingcar/{controller => }/util/StringUtils.java (94%) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 343cf0e5..8587b01a 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -1,10 +1,13 @@ package racingcar.controller; import racingcar.controller.dto.RacerInfo; -import racingcar.controller.util.StringUtils; +import racingcar.util.StringUtils; +import racingcar.model.Car; import racingcar.view.InputView; import racingcar.view.OutputView; +import java.util.List; + public class RacingController { private final InputView inputView; @@ -19,15 +22,21 @@ public RacingController(InputView inputView, OutputView outputView) { public RacerInfo getInfosBeforeRaceStart() { outputView.getCars(); String racerStr = inputView.getStringInput(); - List + List cars = StringUtils.makeCarsUsingString(racerStr); outputView.getTryCount(); int tryCnt = inputView.getNumInput(); - return new RacerInfo(, tryCnt); + return new RacerInfo(cars, tryCnt); } public void raceStart(RacerInfo racerInfo) { + for(int i = 0; i < racerInfo.gameCount(); ++i) { + for(var c : racerInfo.cars()) { + c.move(); + } + outputView. + } } } diff --git a/src/main/java/racingcar/controller/dto/RaceFinalResult.java b/src/main/java/racingcar/controller/dto/RaceFinalResult.java deleted file mode 100644 index b541f200..00000000 --- a/src/main/java/racingcar/controller/dto/RaceFinalResult.java +++ /dev/null @@ -1,8 +0,0 @@ -package racingcar.controller.dto; - -import java.util.List; - -public record RaceFinalResult( - List winners -) { -} diff --git a/src/main/java/racingcar/controller/dto/RaceStatus.java b/src/main/java/racingcar/controller/dto/RaceStatus.java deleted file mode 100644 index fa64a4fd..00000000 --- a/src/main/java/racingcar/controller/dto/RaceStatus.java +++ /dev/null @@ -1,11 +0,0 @@ -package racingcar.controller.dto; - -import racingcar.model.Car; - -import java.util.List; - -public record RaceStatus( - List cars -) -{ -} diff --git a/src/main/java/racingcar/controller/util/StringUtils.java b/src/main/java/racingcar/util/StringUtils.java similarity index 94% rename from src/main/java/racingcar/controller/util/StringUtils.java rename to src/main/java/racingcar/util/StringUtils.java index 03fb4e49..1b17f289 100644 --- a/src/main/java/racingcar/controller/util/StringUtils.java +++ b/src/main/java/racingcar/util/StringUtils.java @@ -1,4 +1,4 @@ -package racingcar.controller.util; +package racingcar.util; import racingcar.model.Car; diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index 06524d77..f60c5da0 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -1,5 +1,10 @@ package racingcar.view; +import racingcar.util.StringUtils; +import racingcar.model.Car; + +import java.util.List; + public class OutputView { public void getCars() { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분"); @@ -9,5 +14,15 @@ public void getTryCount() { System.out.println("시도할 회수는 몇회인가요?"); } - public void + public void printRaceStatus(List cars) { + System.out.println("실행 결과"); + for(var c : cars) { + System.out.println(c.getName() + " : " + StringUtils.NumToSticks(c.getLocation())); + } + System.out.print('\n'); + } + + public void printRaceFinalStatus(List winners) { + System.out.print("최종 우승자 : " + String.join(", ", winners)); + } } From 37fa75d7d46cf0b7bdbfd9e031a75f31406d562b Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 16:58:07 +0900 Subject: [PATCH 10/37] =?UTF-8?q?feat:=20RacingController=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 10 +++++- .../controller/RacingController.java | 34 +++++++++++++++---- .../dto/{RacerInfo.java => RaceInfo.java} | 2 +- src/main/java/racingcar/util/RaceManager.java | 4 +++ 4 files changed, 41 insertions(+), 9 deletions(-) rename src/main/java/racingcar/controller/dto/{RacerInfo.java => RaceInfo.java} (84%) create mode 100644 src/main/java/racingcar/util/RaceManager.java diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e7..7c7e2bd3 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,15 @@ package racingcar; +import racingcar.controller.RacingController; +import racingcar.controller.dto.RaceInfo; +import racingcar.view.InputView; +import racingcar.view.OutputView; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + RacingController racingController = new RacingController(new InputView(), new OutputView()); + + RaceInfo raceInfo = racingController.getInfosBeforeRaceStart(); + racingController.raceStart(raceInfo); } } diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 8587b01a..11a10208 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -1,11 +1,12 @@ package racingcar.controller; -import racingcar.controller.dto.RacerInfo; +import racingcar.controller.dto.RaceInfo; import racingcar.util.StringUtils; import racingcar.model.Car; import racingcar.view.InputView; import racingcar.view.OutputView; +import java.util.ArrayList; import java.util.List; @@ -19,7 +20,7 @@ public RacingController(InputView inputView, OutputView outputView) { this.outputView = outputView; } - public RacerInfo getInfosBeforeRaceStart() { + public RaceInfo getInfosBeforeRaceStart() { outputView.getCars(); String racerStr = inputView.getStringInput(); List cars = StringUtils.makeCarsUsingString(racerStr); @@ -27,16 +28,35 @@ public RacerInfo getInfosBeforeRaceStart() { outputView.getTryCount(); int tryCnt = inputView.getNumInput(); - return new RacerInfo(cars, tryCnt); + return new RaceInfo(cars, tryCnt); } - public void raceStart(RacerInfo racerInfo) { - for(int i = 0; i < racerInfo.gameCount(); ++i) { - for(var c : racerInfo.cars()) { + public void raceStart(RaceInfo raceInfo) { + List cars = raceInfo.cars(); + + for(int i = 0; i < raceInfo.gameCount(); ++i) { + for(var c : cars) { c.move(); } + outputView.printRaceStatus(cars); + } + + finishRace(cars); + } - outputView. + private void finishRace(List cars) { + int maxLocation = 0; + + for(var c : cars) { + if(maxLocation < c.getLocation()) maxLocation = c.getLocation(); + } + + List winners = new ArrayList<>(); + for(var c : cars) { + if(maxLocation == c.getLocation()) + winners.add(c.getName()); } + + outputView.printRaceFinalStatus(winners); } } diff --git a/src/main/java/racingcar/controller/dto/RacerInfo.java b/src/main/java/racingcar/controller/dto/RaceInfo.java similarity index 84% rename from src/main/java/racingcar/controller/dto/RacerInfo.java rename to src/main/java/racingcar/controller/dto/RaceInfo.java index 2d03b43b..eb3cd52d 100644 --- a/src/main/java/racingcar/controller/dto/RacerInfo.java +++ b/src/main/java/racingcar/controller/dto/RaceInfo.java @@ -5,7 +5,7 @@ import java.util.List; -public record RacerInfo( +public record RaceInfo( List cars, int gameCount ) { diff --git a/src/main/java/racingcar/util/RaceManager.java b/src/main/java/racingcar/util/RaceManager.java new file mode 100644 index 00000000..beb05f84 --- /dev/null +++ b/src/main/java/racingcar/util/RaceManager.java @@ -0,0 +1,4 @@ +package racingcar.util; + +public class RaceManager { +} From 3225b97e5aa3d0970c3e321abf418ebdf03d1fc5 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 17:11:52 +0900 Subject: [PATCH 11/37] =?UTF-8?q?feat:=20RaceManager=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/RacingController.java | 12 ++-------- src/main/java/racingcar/util/RaceManager.java | 22 +++++++++++++++++++ src/main/java/racingcar/view/OutputView.java | 5 ++++- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 11a10208..d29ff1f7 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -34,6 +34,8 @@ public RaceInfo getInfosBeforeRaceStart() { public void raceStart(RaceInfo raceInfo) { List cars = raceInfo.cars(); + outputView.printRaceStart(); + for(int i = 0; i < raceInfo.gameCount(); ++i) { for(var c : cars) { c.move(); @@ -45,17 +47,7 @@ public void raceStart(RaceInfo raceInfo) { } private void finishRace(List cars) { - int maxLocation = 0; - - for(var c : cars) { - if(maxLocation < c.getLocation()) maxLocation = c.getLocation(); - } - List winners = new ArrayList<>(); - for(var c : cars) { - if(maxLocation == c.getLocation()) - winners.add(c.getName()); - } outputView.printRaceFinalStatus(winners); } diff --git a/src/main/java/racingcar/util/RaceManager.java b/src/main/java/racingcar/util/RaceManager.java index beb05f84..c3fe43b9 100644 --- a/src/main/java/racingcar/util/RaceManager.java +++ b/src/main/java/racingcar/util/RaceManager.java @@ -1,4 +1,26 @@ package racingcar.util; +import racingcar.model.Car; + +import java.util.ArrayList; +import java.util.List; + public class RaceManager { + public void movingCars(List cars) { + for(var c : cars) c.move(); + } + + public List findWinners(List cars) { + int maxLocation = 0; + + for(var c : cars) { + if(maxLocation < c.getLocation()) maxLocation = c.getLocation(); + } + + List winners = new ArrayList<>(); + for(var c : cars) { + if(maxLocation == c.getLocation()) + winners.add(c.getName()); + } + } } diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index f60c5da0..85cd0dfb 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -14,8 +14,11 @@ public void getTryCount() { System.out.println("시도할 회수는 몇회인가요?"); } + public void printRaceStart() { + System.out.println("\n실행 결과"); + } + public void printRaceStatus(List cars) { - System.out.println("실행 결과"); for(var c : cars) { System.out.println(c.getName() + " : " + StringUtils.NumToSticks(c.getLocation())); } From 8b31444d2c7091ee2e9915817ef4055193c9023e Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 17:15:42 +0900 Subject: [PATCH 12/37] =?UTF-8?q?refactor:=20RacingController,=20RaceManag?= =?UTF-8?q?er=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/Application.java | 4 +--- .../racingcar/controller/RacingController.java | 17 ++++++++--------- src/main/java/racingcar/util/RaceManager.java | 2 ++ 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 7c7e2bd3..7bbf13df 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -2,12 +2,10 @@ import racingcar.controller.RacingController; import racingcar.controller.dto.RaceInfo; -import racingcar.view.InputView; -import racingcar.view.OutputView; public class Application { public static void main(String[] args) { - RacingController racingController = new RacingController(new InputView(), new OutputView()); + RacingController racingController = new RacingController(); RaceInfo raceInfo = racingController.getInfosBeforeRaceStart(); racingController.raceStart(raceInfo); diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index d29ff1f7..0698f19f 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -1,23 +1,25 @@ package racingcar.controller; import racingcar.controller.dto.RaceInfo; +import racingcar.util.RaceManager; import racingcar.util.StringUtils; import racingcar.model.Car; import racingcar.view.InputView; import racingcar.view.OutputView; -import java.util.ArrayList; import java.util.List; public class RacingController { private final InputView inputView; private final OutputView outputView; + private final RaceManager raceManager; - public RacingController(InputView inputView, OutputView outputView) { - this.inputView = inputView; - this.outputView = outputView; + public RacingController() { + this.inputView = new InputView(); + this.outputView = new OutputView(); + this.raceManager = new RaceManager(); } public RaceInfo getInfosBeforeRaceStart() { @@ -37,9 +39,7 @@ public void raceStart(RaceInfo raceInfo) { outputView.printRaceStart(); for(int i = 0; i < raceInfo.gameCount(); ++i) { - for(var c : cars) { - c.move(); - } + raceManager.movingCars(cars); outputView.printRaceStatus(cars); } @@ -47,8 +47,7 @@ public void raceStart(RaceInfo raceInfo) { } private void finishRace(List cars) { - - + List winners = raceManager.findWinners(cars); outputView.printRaceFinalStatus(winners); } } diff --git a/src/main/java/racingcar/util/RaceManager.java b/src/main/java/racingcar/util/RaceManager.java index c3fe43b9..46ea5e26 100644 --- a/src/main/java/racingcar/util/RaceManager.java +++ b/src/main/java/racingcar/util/RaceManager.java @@ -22,5 +22,7 @@ public List findWinners(List cars) { if(maxLocation == c.getLocation()) winners.add(c.getName()); } + + return winners; } } From 50e603030e003364dff915be18a3d288ee870e4f Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 19:03:00 +0900 Subject: [PATCH 13/37] =?UTF-8?q?refactor:=20InputView=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 --- docs/README.md | 24 ++++++++++---------- src/main/java/racingcar/view/InputView.java | 4 ++-- src/main/java/racingcar/view/OutputView.java | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/README.md b/docs/README.md index 4a128363..10b08245 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,20 +1,20 @@ -### 구현해야 하는 기능 목록 +## 구현해야 하는 기능 목록 -##자동차 --[x] 클래스 기본 틀 작성(변수, 생성자 등) --[x] 랜덤 수(0~9) 반환 메소드 --[x] 자동차를 한 칸 전진하는 메소드 +### 자동차 +- [x] 클래스 기본 틀 작성(변수, 생성자 등) +- [x] 랜덤 수(0~9) 반환 메소드 +- [x] 자동차를 한 칸 전진하는 메소드 -##입력 --[x] 자동차 이름 & 입력 횟수 입력 --[] 입력받은 데이터 전달 +### 입력 +- [x] 자동차 이름 & 입력 횟수 입력 +- [x] 입력받은 데이터 전달 -##출력 --[] 라운드 진행 시마다 경기 진행 상황 출력 --[] 경주 종료 후 최종 결과 및 우승자 출력 +### 출력 +- [x] 라운드 진행 시마다 경기 진행 상황 출력 +- [x] 경주 종료 후 최종 결과 및 우승자 출력 -###고민 사항 +### 고민 사항 - 자동차 정보를 입력받는 DTO를 어떻게 설계하는 것이 좋을까? - 입력 텍스트 그대로(poni,woni,jun)를 DTO에 넣기 - 이름을 분리하여 List에 넣기 diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index ff322075..8f89e2c2 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -3,13 +3,13 @@ import java.util.Scanner; public class InputView { + private final Scanner sc = new Scanner(System.in); + public String getStringInput() { - Scanner sc = new Scanner(System.in); return sc.nextLine(); } public int getNumInput() { - Scanner sc = new Scanner(System.in); return sc.nextInt(); } } diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index 85cd0dfb..1b449c07 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -7,11 +7,11 @@ public class OutputView { public void getCars() { - System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분"); + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)\n"); } public void getTryCount() { - System.out.println("시도할 회수는 몇회인가요?"); + System.out.println("시도할 회수는 몇회인가요?\n"); } public void printRaceStart() { From 279705a237b9eb79e2a07b73c325c3cb2d5f9b01 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 19:36:05 +0900 Subject: [PATCH 14/37] =?UTF-8?q?feat:=20CheckCarName=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 3 +++ .../java/racingcar/util/CheckCarName.java | 20 +++++++++++++++++++ .../java/racingcar/util/CheckTryCount.java | 4 ++++ 3 files changed, 27 insertions(+) create mode 100644 src/main/java/racingcar/util/CheckCarName.java create mode 100644 src/main/java/racingcar/util/CheckTryCount.java diff --git a/docs/README.md b/docs/README.md index 10b08245..f917371a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -13,6 +13,9 @@ - [x] 라운드 진행 시마다 경기 진행 상황 출력 - [x] 경주 종료 후 최종 결과 및 우승자 출력 +### 예외 처리 +- [x] + ### 고민 사항 - 자동차 정보를 입력받는 DTO를 어떻게 설계하는 것이 좋을까? diff --git a/src/main/java/racingcar/util/CheckCarName.java b/src/main/java/racingcar/util/CheckCarName.java new file mode 100644 index 00000000..aa6458bd --- /dev/null +++ b/src/main/java/racingcar/util/CheckCarName.java @@ -0,0 +1,20 @@ +package racingcar.util; + +public class CheckCarName { + private final int NAME_MAX_LENGTH = 5; + + public void isNull(String name) { + if(name == null) + throw new IllegalArgumentException("이름에는 null 값이 들어갈 수 없습니다."); + } + + public void isBlank(String name) { + if(name.isBlank()) + throw new IllegalArgumentException("이름은 공백일 수 없습니다."); + } + + public void isMoreThanMaxLength(String name) { + if(name.length() > 5) + throw new IllegalArgumentException("이름은 5자를 넘을 수 없습니다."); + } +} diff --git a/src/main/java/racingcar/util/CheckTryCount.java b/src/main/java/racingcar/util/CheckTryCount.java new file mode 100644 index 00000000..376881fb --- /dev/null +++ b/src/main/java/racingcar/util/CheckTryCount.java @@ -0,0 +1,4 @@ +package racingcar.util; + +public class CheckTryCount { +} From a2c3577bf6e73071f44b2df48bcb1b233d784495 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 19:39:25 +0900 Subject: [PATCH 15/37] =?UTF-8?q?refactor:=20CheckCarName=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/util/CheckCarName.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/racingcar/util/CheckCarName.java b/src/main/java/racingcar/util/CheckCarName.java index aa6458bd..add7ee68 100644 --- a/src/main/java/racingcar/util/CheckCarName.java +++ b/src/main/java/racingcar/util/CheckCarName.java @@ -1,20 +1,26 @@ package racingcar.util; public class CheckCarName { - private final int NAME_MAX_LENGTH = 5; + private static final int NAME_MAX_LENGTH = 5; - public void isNull(String name) { + public static void isNull(String name) { if(name == null) throw new IllegalArgumentException("이름에는 null 값이 들어갈 수 없습니다."); } - public void isBlank(String name) { + public static void isBlank(String name) { if(name.isBlank()) throw new IllegalArgumentException("이름은 공백일 수 없습니다."); } - public void isMoreThanMaxLength(String name) { - if(name.length() > 5) + public static void isMoreThanMaxLength(String name) { + if(name.length() > NAME_MAX_LENGTH) throw new IllegalArgumentException("이름은 5자를 넘을 수 없습니다."); } + + public static void checkName(String name) { + isNull(name); + isBlank(name); + isMoreThanMaxLength(name); + } } From 8d258263b8aadd3ab712326c98a655ba14d3c0ee Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 19:54:19 +0900 Subject: [PATCH 16/37] =?UTF-8?q?refactor:=20InputView=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 --- docs/README.md | 7 +++++-- src/main/java/racingcar/view/InputView.java | 8 +++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index f917371a..a5e13b9d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -14,7 +14,8 @@ - [x] 경주 종료 후 최종 결과 및 우승자 출력 ### 예외 처리 -- [x] +- [x] 자동차 이름 관련 +- [x] 시도 횟수 관련 ### 고민 사항 @@ -22,4 +23,6 @@ - 입력 텍스트 그대로(poni,woni,jun)를 DTO에 넣기 - 이름을 분리하여 List에 넣기 - 이름을 분리한 것을 바탕으로 Car 객체들로 변환하고, List에 넣기 -- 입력 텍스트 \ No newline at end of file +- Util 패키지 관련 + - 객체들을 new로 생성해서 사용하는 것이 좋은가? + - 아니면 객체를 별도로 생성하지 않고 객체 내부 메소드들을 모두 static 메소드로 만들어서 쓰는 것이 나은가? \ No newline at end of file diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index 8f89e2c2..a3fac1c6 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -1,5 +1,6 @@ package racingcar.view; +import java.util.InputMismatchException; import java.util.Scanner; public class InputView { @@ -10,6 +11,11 @@ public String getStringInput() { } public int getNumInput() { - return sc.nextInt(); + try { + return sc.nextInt(); + } + catch (InputMismatchException e) { + throw new IllegalArgumentException("숫자 외 다른 형태의 값을 입력할 수 없습니다."); + } } } From d728091ff54fa1462f8d3f70ecee7a235677c68f Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 20:02:36 +0900 Subject: [PATCH 17/37] =?UTF-8?q?feat:=20CheckTryCount=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 +++- src/main/java/racingcar/util/CheckTryCount.java | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index a5e13b9d..7aeb1507 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,4 +25,6 @@ - 이름을 분리한 것을 바탕으로 Car 객체들로 변환하고, List에 넣기 - Util 패키지 관련 - 객체들을 new로 생성해서 사용하는 것이 좋은가? - - 아니면 객체를 별도로 생성하지 않고 객체 내부 메소드들을 모두 static 메소드로 만들어서 쓰는 것이 나은가? \ No newline at end of file + - 아니면 객체를 별도로 생성하지 않고 객체 내부 메소드들을 모두 static 메소드로 만들어서 쓰는 것이 나은가? +- 시도 횟수를 입력할 때, 숫자가 아닌 다른 형태의 값을 입력했을 경우 + - CheckTryCount 라는 별도의 클래스에서 이를 검증할 방법은 없을까?(현재 코드는 sc.nextInt() 하는 시점에 try-catch를 통해 예외처리 하고 있음) \ No newline at end of file diff --git a/src/main/java/racingcar/util/CheckTryCount.java b/src/main/java/racingcar/util/CheckTryCount.java index 376881fb..d8d82248 100644 --- a/src/main/java/racingcar/util/CheckTryCount.java +++ b/src/main/java/racingcar/util/CheckTryCount.java @@ -1,4 +1,8 @@ package racingcar.util; public class CheckTryCount { + public static void isPositive(int tryCnt) { + if(tryCnt < 0) + throw new IllegalArgumentException("시도 횟수는 자연수여야 합니다."); + } } From 7da49d6b35dc9725dbd0207e4dfab28edbd6ed32 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 22 Sep 2025 20:09:21 +0900 Subject: [PATCH 18/37] =?UTF-8?q?refactor:=20RacingController=20-=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=A6=9D=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=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/controller/RacingController.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 0698f19f..1cfea9ad 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -1,6 +1,8 @@ package racingcar.controller; import racingcar.controller.dto.RaceInfo; +import racingcar.util.CheckCarName; +import racingcar.util.CheckTryCount; import racingcar.util.RaceManager; import racingcar.util.StringUtils; import racingcar.model.Car; @@ -26,9 +28,11 @@ public RaceInfo getInfosBeforeRaceStart() { outputView.getCars(); String racerStr = inputView.getStringInput(); List cars = StringUtils.makeCarsUsingString(racerStr); + for(var c : cars) CheckCarName.checkName(c.getName()); outputView.getTryCount(); int tryCnt = inputView.getNumInput(); + CheckTryCount.isPositive(tryCnt); return new RaceInfo(cars, tryCnt); } From 84f9b6f65acbbb80a8b71eac5f8a212b8b12948d Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Fri, 26 Sep 2025 14:25:22 +0900 Subject: [PATCH 19/37] =?UTF-8?q?style:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EA=B3=B5=EB=B0=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/controller/RacingController.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 1cfea9ad..59459a4c 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -8,16 +8,13 @@ import racingcar.model.Car; import racingcar.view.InputView; import racingcar.view.OutputView; - import java.util.List; - public class RacingController { private final InputView inputView; private final OutputView outputView; private final RaceManager raceManager; - public RacingController() { this.inputView = new InputView(); this.outputView = new OutputView(); From 7313a946c7f7e63d202ed617990a571d18ff8078 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Fri, 26 Sep 2025 14:27:49 +0900 Subject: [PATCH 20/37] =?UTF-8?q?refactor:=20=EC=9E=90=EB=8F=99=EC=B0=A8?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20-=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=98=81=EC=97=AD?= =?UTF-8?q?=EC=9C=BC=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/controller/RacingController.java | 3 +-- src/main/java/racingcar/model/Car.java | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 59459a4c..8a5b9967 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -16,7 +16,7 @@ public class RacingController { private final RaceManager raceManager; public RacingController() { - this.inputView = new InputView(); + this.inputView = new InputView(); this.outputView = new OutputView(); this.raceManager = new RaceManager(); } @@ -25,7 +25,6 @@ public RaceInfo getInfosBeforeRaceStart() { outputView.getCars(); String racerStr = inputView.getStringInput(); List cars = StringUtils.makeCarsUsingString(racerStr); - for(var c : cars) CheckCarName.checkName(c.getName()); outputView.getTryCount(); int tryCnt = inputView.getNumInput(); diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java index aa9727ef..d97c9c03 100644 --- a/src/main/java/racingcar/model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -1,5 +1,7 @@ package racingcar.model; +import racingcar.util.CheckCarName; + public class Car { private static final int CAN_MOVE_STANDARD = 4; @@ -8,6 +10,7 @@ public class Car { public Car(String name) { + CheckCarName.checkName(name); this.name = name; this.location = 0; } From 7fba792dee8441169f51597e988dc9e11a887815 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Fri, 26 Sep 2025 14:30:02 +0900 Subject: [PATCH 21/37] =?UTF-8?q?style:=20=EC=A0=91=EA=B7=BC=20=EC=A0=9C?= =?UTF-8?q?=EC=96=B4=EC=9E=90(private)=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/model/Car.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java index d97c9c03..41336797 100644 --- a/src/main/java/racingcar/model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -5,8 +5,8 @@ public class Car { private static final int CAN_MOVE_STANDARD = 4; - int location; - String name; + private int location; + private String name; public Car(String name) { From d7231b853ea2c395486cf4b52246bcf56d2ad84c Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Fri, 26 Sep 2025 14:35:01 +0900 Subject: [PATCH 22/37] =?UTF-8?q?refactor:=20=EC=9C=A0=ED=9A=A8=EC=84=B1?= =?UTF-8?q?=20=EA=B2=80=EC=A6=9D=20=EA=B4=80=EB=A0=A8=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD(Validator)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/controller/RacingController.java | 4 ++-- .../util/{CheckCarName.java => CarNameValidator.java} | 2 +- .../util/{CheckTryCount.java => TryCountValidator.java} | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename src/main/java/racingcar/util/{CheckCarName.java => CarNameValidator.java} (95%) rename src/main/java/racingcar/util/{CheckTryCount.java => TryCountValidator.java} (85%) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 8a5b9967..c4f74a40 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -2,7 +2,7 @@ import racingcar.controller.dto.RaceInfo; import racingcar.util.CheckCarName; -import racingcar.util.CheckTryCount; +import racingcar.util.TryCountValidator; import racingcar.util.RaceManager; import racingcar.util.StringUtils; import racingcar.model.Car; @@ -28,7 +28,7 @@ public RaceInfo getInfosBeforeRaceStart() { outputView.getTryCount(); int tryCnt = inputView.getNumInput(); - CheckTryCount.isPositive(tryCnt); + TryCountValidator.isPositive(tryCnt); return new RaceInfo(cars, tryCnt); } diff --git a/src/main/java/racingcar/util/CheckCarName.java b/src/main/java/racingcar/util/CarNameValidator.java similarity index 95% rename from src/main/java/racingcar/util/CheckCarName.java rename to src/main/java/racingcar/util/CarNameValidator.java index add7ee68..40d4061d 100644 --- a/src/main/java/racingcar/util/CheckCarName.java +++ b/src/main/java/racingcar/util/CarNameValidator.java @@ -1,6 +1,6 @@ package racingcar.util; -public class CheckCarName { +public class CarNameValidator { private static final int NAME_MAX_LENGTH = 5; public static void isNull(String name) { diff --git a/src/main/java/racingcar/util/CheckTryCount.java b/src/main/java/racingcar/util/TryCountValidator.java similarity index 85% rename from src/main/java/racingcar/util/CheckTryCount.java rename to src/main/java/racingcar/util/TryCountValidator.java index d8d82248..f714deb3 100644 --- a/src/main/java/racingcar/util/CheckTryCount.java +++ b/src/main/java/racingcar/util/TryCountValidator.java @@ -1,6 +1,6 @@ package racingcar.util; -public class CheckTryCount { +public class TryCountValidator { public static void isPositive(int tryCnt) { if(tryCnt < 0) throw new IllegalArgumentException("시도 횟수는 자연수여야 합니다."); From cb66dfcfe8e34f3e6a62bb4019457dda2e734b26 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Fri, 26 Sep 2025 14:37:17 +0900 Subject: [PATCH 23/37] =?UTF-8?q?style:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EA=B3=B5=EB=B0=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/controller/RacingController.java | 1 - src/main/java/racingcar/controller/dto/RaceInfo.java | 1 - src/main/java/racingcar/model/Car.java | 4 ++-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index c4f74a40..9c551d46 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -1,7 +1,6 @@ package racingcar.controller; import racingcar.controller.dto.RaceInfo; -import racingcar.util.CheckCarName; import racingcar.util.TryCountValidator; import racingcar.util.RaceManager; import racingcar.util.StringUtils; diff --git a/src/main/java/racingcar/controller/dto/RaceInfo.java b/src/main/java/racingcar/controller/dto/RaceInfo.java index eb3cd52d..1e86faa7 100644 --- a/src/main/java/racingcar/controller/dto/RaceInfo.java +++ b/src/main/java/racingcar/controller/dto/RaceInfo.java @@ -4,7 +4,6 @@ import java.util.List; - public record RaceInfo( List cars, int gameCount diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java index 41336797..19e4e7b9 100644 --- a/src/main/java/racingcar/model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -1,6 +1,6 @@ package racingcar.model; -import racingcar.util.CheckCarName; +import racingcar.util.CarNameValidator; public class Car { private static final int CAN_MOVE_STANDARD = 4; @@ -10,7 +10,7 @@ public class Car { public Car(String name) { - CheckCarName.checkName(name); + CarNameValidator.checkName(name); this.name = name; this.location = 0; } From 014e73cb818903db0c5eb9da9b4a18284dedc551 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Fri, 26 Sep 2025 14:43:29 +0900 Subject: [PATCH 24/37] =?UTF-8?q?refactor:=20Iterator=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20=EB=B6=80=EB=B6=84=20Stream=EC=9D=84=20=ED=99=9C=EC=9A=A9?= =?UTF-8?q?=ED=95=9C=20=ED=98=95=ED=83=9C=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/util/RaceManager.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/main/java/racingcar/util/RaceManager.java b/src/main/java/racingcar/util/RaceManager.java index 46ea5e26..386482df 100644 --- a/src/main/java/racingcar/util/RaceManager.java +++ b/src/main/java/racingcar/util/RaceManager.java @@ -11,17 +11,9 @@ public void movingCars(List cars) { } public List findWinners(List cars) { - int maxLocation = 0; + int maxLocation = cars.stream().mapToInt(Car::getLocation).max().orElse(0); - for(var c : cars) { - if(maxLocation < c.getLocation()) maxLocation = c.getLocation(); - } - - List winners = new ArrayList<>(); - for(var c : cars) { - if(maxLocation == c.getLocation()) - winners.add(c.getName()); - } + List winners = cars.stream().filter(c -> c.getLocation() == maxLocation).map(Car::getName).toList(); return winners; } From f1e0633dfe3a5009de11d25f74c1c7d267731d14 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Fri, 26 Sep 2025 14:48:01 +0900 Subject: [PATCH 25/37] =?UTF-8?q?refactor:=20StringUtils=20-=20Stream?= =?UTF-8?q?=EC=9D=84=20=ED=99=9C=EC=9A=A9=ED=95=9C=20=ED=98=95=ED=83=9C?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/util/StringUtils.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/racingcar/util/StringUtils.java b/src/main/java/racingcar/util/StringUtils.java index 1b17f289..eab1d2ec 100644 --- a/src/main/java/racingcar/util/StringUtils.java +++ b/src/main/java/racingcar/util/StringUtils.java @@ -3,6 +3,7 @@ import racingcar.model.Car; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class StringUtils { @@ -15,13 +16,6 @@ public static String NumToSticks(int count) { } public static List makeCarsUsingString(String str) { - String[] strs = StringUtils.splitByComma(str); - List cars = new ArrayList<>(); - - for (var c : strs) { - cars.add(new Car(c)); - } - - return cars; + return Arrays.stream(StringUtils.splitByComma(str)).map(Car::new).toList(); } } From 2ac88377ae69d83608be57ab812bd71f3097abb8 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Fri, 26 Sep 2025 14:55:21 +0900 Subject: [PATCH 26/37] =?UTF-8?q?refactor:=20RacingController=EC=9D=98=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=9E=90=20-=20=EC=99=B8=EB=B6=80=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EA=B0=9D=EC=B2=B4=EB=A5=BC=20=EC=A3=BC=EC=9E=85?= =?UTF-8?q?=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 5 ++++- src/main/java/racingcar/controller/RacingController.java | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 7bbf13df..2440b5cb 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -2,10 +2,13 @@ import racingcar.controller.RacingController; import racingcar.controller.dto.RaceInfo; +import racingcar.util.RaceManager; +import racingcar.view.InputView; +import racingcar.view.OutputView; public class Application { public static void main(String[] args) { - RacingController racingController = new RacingController(); + RacingController racingController = new RacingController(new InputView(), new OutputView(), new RaceManager()); RaceInfo raceInfo = racingController.getInfosBeforeRaceStart(); racingController.raceStart(raceInfo); diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 9c551d46..95d438dc 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -14,10 +14,10 @@ public class RacingController { private final OutputView outputView; private final RaceManager raceManager; - public RacingController() { - this.inputView = new InputView(); - this.outputView = new OutputView(); - this.raceManager = new RaceManager(); + public RacingController(InputView inputView, OutputView outputView, RaceManager raceManager) { + this.inputView = inputView; + this.outputView = outputView; + this.raceManager = raceManager; } public RaceInfo getInfosBeforeRaceStart() { From 4a8e1f074aac6a618b75b81cc7f937f29bb94c2e Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Sun, 28 Sep 2025 17:02:45 +0900 Subject: [PATCH 27/37] =?UTF-8?q?feat:=20DTO=20-=20RaceInfoRequest=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../racingcar/controller/dto/RaceInfoRequest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/racingcar/controller/dto/RaceInfoRequest.java diff --git a/src/main/java/racingcar/controller/dto/RaceInfoRequest.java b/src/main/java/racingcar/controller/dto/RaceInfoRequest.java new file mode 100644 index 00000000..a20ba7c7 --- /dev/null +++ b/src/main/java/racingcar/controller/dto/RaceInfoRequest.java @@ -0,0 +1,11 @@ +package racingcar.controller.dto; + +import racingcar.model.Car; + +import java.util.List; + +public record RaceInfoRequest( + List carNames, + int gameCount +) { +} From a96b0a33c47d27721d6090dcd361d6900a23c783 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Sun, 28 Sep 2025 17:06:44 +0900 Subject: [PATCH 28/37] =?UTF-8?q?feat:=20DTO=20-=20RaceInfoResponse=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/controller/dto/RaceInfoRequest.java | 6 +----- .../java/racingcar/controller/dto/RaceInfoResponse.java | 9 +++++++++ 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 src/main/java/racingcar/controller/dto/RaceInfoResponse.java diff --git a/src/main/java/racingcar/controller/dto/RaceInfoRequest.java b/src/main/java/racingcar/controller/dto/RaceInfoRequest.java index a20ba7c7..5b6baaee 100644 --- a/src/main/java/racingcar/controller/dto/RaceInfoRequest.java +++ b/src/main/java/racingcar/controller/dto/RaceInfoRequest.java @@ -1,11 +1,7 @@ package racingcar.controller.dto; -import racingcar.model.Car; - -import java.util.List; - public record RaceInfoRequest( - List carNames, + String carNames, int gameCount ) { } diff --git a/src/main/java/racingcar/controller/dto/RaceInfoResponse.java b/src/main/java/racingcar/controller/dto/RaceInfoResponse.java new file mode 100644 index 00000000..eecc44e2 --- /dev/null +++ b/src/main/java/racingcar/controller/dto/RaceInfoResponse.java @@ -0,0 +1,9 @@ +package racingcar.controller.dto; + +import java.util.List; + +public record RaceInfoResponse( + List carNames, + int gameCount +) { +} From b6e57634cfe789616f34d6750a49202ebaa90392 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Sun, 28 Sep 2025 17:17:41 +0900 Subject: [PATCH 29/37] =?UTF-8?q?refactor:=20StringUtils=20-=20DTO=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=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 --- src/main/java/racingcar/Application.java | 1 - .../java/racingcar/controller/RacingController.java | 12 +++++++----- src/main/java/racingcar/controller/dto/RaceInfo.java | 11 ----------- src/main/java/racingcar/util/StringUtils.java | 8 ++------ 4 files changed, 9 insertions(+), 23 deletions(-) delete mode 100644 src/main/java/racingcar/controller/dto/RaceInfo.java diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 2440b5cb..65e58d6c 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,6 @@ package racingcar; import racingcar.controller.RacingController; -import racingcar.controller.dto.RaceInfo; import racingcar.util.RaceManager; import racingcar.view.InputView; import racingcar.view.OutputView; diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 95d438dc..f7dbf41d 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -1,6 +1,7 @@ package racingcar.controller; -import racingcar.controller.dto.RaceInfo; +import racingcar.controller.dto.RaceInfoRequest; +import racingcar.controller.dto.RaceInfoResponse; import racingcar.util.TryCountValidator; import racingcar.util.RaceManager; import racingcar.util.StringUtils; @@ -20,8 +21,9 @@ public RacingController(InputView inputView, OutputView outputView, RaceManager this.raceManager = raceManager; } - public RaceInfo getInfosBeforeRaceStart() { + public RaceInfoResponse getInfosBeforeRaceStart() { outputView.getCars(); + String racerStr = inputView.getStringInput(); List cars = StringUtils.makeCarsUsingString(racerStr); @@ -29,11 +31,11 @@ public RaceInfo getInfosBeforeRaceStart() { int tryCnt = inputView.getNumInput(); TryCountValidator.isPositive(tryCnt); - return new RaceInfo(cars, tryCnt); + return new RaceInfoResponse(cars, tryCnt); } - public void raceStart(RaceInfo raceInfo) { - List cars = raceInfo.cars(); + public void raceStart(RaceInfoResponse raceInfo) { + List cars = StringUtils.makeCarsUsingString(raceInfo.carNames()); outputView.printRaceStart(); diff --git a/src/main/java/racingcar/controller/dto/RaceInfo.java b/src/main/java/racingcar/controller/dto/RaceInfo.java deleted file mode 100644 index 1e86faa7..00000000 --- a/src/main/java/racingcar/controller/dto/RaceInfo.java +++ /dev/null @@ -1,11 +0,0 @@ -package racingcar.controller.dto; - -import racingcar.model.Car; - -import java.util.List; - -public record RaceInfo( - List cars, - int gameCount -) { -} diff --git a/src/main/java/racingcar/util/StringUtils.java b/src/main/java/racingcar/util/StringUtils.java index eab1d2ec..137710f9 100644 --- a/src/main/java/racingcar/util/StringUtils.java +++ b/src/main/java/racingcar/util/StringUtils.java @@ -2,10 +2,6 @@ import racingcar.model.Car; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - public class StringUtils { public static String[] splitByComma(String str) { return str.split(","); @@ -15,7 +11,7 @@ public static String NumToSticks(int count) { return "-".repeat(count); } - public static List makeCarsUsingString(String str) { - return Arrays.stream(StringUtils.splitByComma(str)).map(Car::new).toList(); + public static Car makeCarUsingString(String str) { + return new Car(str); } } From 903d7546242b26f1df99818d15991bf15f3fa34e Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Sun, 28 Sep 2025 18:40:11 +0900 Subject: [PATCH 30/37] =?UTF-8?q?refactor:=20StringUtils=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=20=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20=EC=BD=94=EB=93=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/Application.java | 3 ++- .../java/racingcar/controller/RacingController.java | 11 +++++++---- src/main/java/racingcar/util/StringUtils.java | 7 +++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 65e58d6c..278693d5 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,6 +1,7 @@ package racingcar; import racingcar.controller.RacingController; +import racingcar.controller.dto.RaceInfoResponse; import racingcar.util.RaceManager; import racingcar.view.InputView; import racingcar.view.OutputView; @@ -9,7 +10,7 @@ public class Application { public static void main(String[] args) { RacingController racingController = new RacingController(new InputView(), new OutputView(), new RaceManager()); - RaceInfo raceInfo = racingController.getInfosBeforeRaceStart(); + RaceInfoResponse raceInfo = racingController.getInfosBeforeRaceStart(); racingController.raceStart(raceInfo); } } diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index f7dbf41d..7bc54124 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -8,6 +8,8 @@ import racingcar.model.Car; import racingcar.view.InputView; import racingcar.view.OutputView; + +import java.util.ArrayList; import java.util.List; public class RacingController { @@ -23,19 +25,20 @@ public RacingController(InputView inputView, OutputView outputView, RaceManager public RaceInfoResponse getInfosBeforeRaceStart() { outputView.getCars(); - String racerStr = inputView.getStringInput(); - List cars = StringUtils.makeCarsUsingString(racerStr); outputView.getTryCount(); int tryCnt = inputView.getNumInput(); TryCountValidator.isPositive(tryCnt); - return new RaceInfoResponse(cars, tryCnt); + List carNames = StringUtils.splitByComma(racerStr); + + return new RaceInfoResponse(carNames, tryCnt); } public void raceStart(RaceInfoResponse raceInfo) { - List cars = StringUtils.makeCarsUsingString(raceInfo.carNames()); + List cars = raceInfo.carNames().stream() + .map(Car::new).toList(); outputView.printRaceStart(); diff --git a/src/main/java/racingcar/util/StringUtils.java b/src/main/java/racingcar/util/StringUtils.java index 137710f9..4c227b31 100644 --- a/src/main/java/racingcar/util/StringUtils.java +++ b/src/main/java/racingcar/util/StringUtils.java @@ -2,9 +2,12 @@ import racingcar.model.Car; +import java.util.Arrays; +import java.util.List; + public class StringUtils { - public static String[] splitByComma(String str) { - return str.split(","); + public static List splitByComma(String str) { + return Arrays.stream(str.split(",")).toList(); } public static String NumToSticks(int count) { From 12502f42897cec37b761634bbfc6c0f9099123a8 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Sun, 28 Sep 2025 18:47:27 +0900 Subject: [PATCH 31/37] =?UTF-8?q?refactor:=20RacingController=20-=20RaceIn?= =?UTF-8?q?foRequest(DTO)=EB=A5=BC=20=ED=99=9C=EC=9A=A9=ED=95=9C=20?= =?UTF-8?q?=ED=98=95=ED=83=9C=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/controller/RacingController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 7bc54124..c1ba4e90 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -9,7 +9,6 @@ import racingcar.view.InputView; import racingcar.view.OutputView; -import java.util.ArrayList; import java.util.List; public class RacingController { @@ -31,7 +30,9 @@ public RaceInfoResponse getInfosBeforeRaceStart() { int tryCnt = inputView.getNumInput(); TryCountValidator.isPositive(tryCnt); - List carNames = StringUtils.splitByComma(racerStr); + RaceInfoRequest raceInfoInput = new RaceInfoRequest(racerStr, tryCnt); + + List carNames = StringUtils.splitByComma(raceInfoInput.carNames()); return new RaceInfoResponse(carNames, tryCnt); } From dcede87c5e78e443ee7b84588df0a743e713db30 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 29 Sep 2025 09:36:33 +0900 Subject: [PATCH 32/37] =?UTF-8?q?refactor:=20StringUtils=20-=20String=20?= =?UTF-8?q?=EA=B8=B0=EB=B0=98=20Car=20=EC=83=9D=EC=84=B1=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=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/util/StringUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/util/StringUtils.java b/src/main/java/racingcar/util/StringUtils.java index 4c227b31..58a56a1b 100644 --- a/src/main/java/racingcar/util/StringUtils.java +++ b/src/main/java/racingcar/util/StringUtils.java @@ -14,7 +14,7 @@ public static String NumToSticks(int count) { return "-".repeat(count); } - public static Car makeCarUsingString(String str) { - return new Car(str); + public static List makeCarUsingStrings(List strs) { + return strs.stream().map(Car::new).toList(); } } From b93d0f66b32f2c1e8b8f898115807f3524bcf0d1 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 29 Sep 2025 09:38:52 +0900 Subject: [PATCH 33/37] =?UTF-8?q?refactor:=20RacingController=20-=20String?= =?UTF-8?q?Utils=EC=9D=98=20=EB=A9=94=EC=86=8C=EB=93=9C=EB=A5=BC=20?= =?UTF-8?q?=ED=99=9C=EC=9A=A9=ED=95=98=EC=97=AC=20Car=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/controller/RacingController.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index c1ba4e90..02cea96f 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -38,8 +38,7 @@ public RaceInfoResponse getInfosBeforeRaceStart() { } public void raceStart(RaceInfoResponse raceInfo) { - List cars = raceInfo.carNames().stream() - .map(Car::new).toList(); + List cars = StringUtils.makeCarUsingStrings(raceInfo.carNames()); outputView.printRaceStart(); From 593e6ccb0477c102efb075d34e52b76496b8862e Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 29 Sep 2025 11:23:36 +0900 Subject: [PATCH 34/37] =?UTF-8?q?refactor:=20TryCountValidator=20-=20isNum?= =?UTF-8?q?ber=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/controller/RacingController.java | 2 +- src/main/java/racingcar/util/StringUtils.java | 2 +- src/main/java/racingcar/util/TryCountValidator.java | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index 02cea96f..afda4ffa 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -38,7 +38,7 @@ public RaceInfoResponse getInfosBeforeRaceStart() { } public void raceStart(RaceInfoResponse raceInfo) { - List cars = StringUtils.makeCarUsingStrings(raceInfo.carNames()); + List cars = StringUtils.makeCarsUsingStrings(raceInfo.carNames()); outputView.printRaceStart(); diff --git a/src/main/java/racingcar/util/StringUtils.java b/src/main/java/racingcar/util/StringUtils.java index 58a56a1b..5a4bf883 100644 --- a/src/main/java/racingcar/util/StringUtils.java +++ b/src/main/java/racingcar/util/StringUtils.java @@ -14,7 +14,7 @@ public static String NumToSticks(int count) { return "-".repeat(count); } - public static List makeCarUsingStrings(List strs) { + public static List makeCarsUsingStrings(List strs) { return strs.stream().map(Car::new).toList(); } } diff --git a/src/main/java/racingcar/util/TryCountValidator.java b/src/main/java/racingcar/util/TryCountValidator.java index f714deb3..229003e8 100644 --- a/src/main/java/racingcar/util/TryCountValidator.java +++ b/src/main/java/racingcar/util/TryCountValidator.java @@ -1,6 +1,14 @@ package racingcar.util; public class TryCountValidator { + public static void isNumber(String tryCnt) { + try { + Integer.parseInt(tryCnt); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("시도 횟수에 문자를 입력할 수 없습니다."); + } + } + public static void isPositive(int tryCnt) { if(tryCnt < 0) throw new IllegalArgumentException("시도 횟수는 자연수여야 합니다."); From 0b2d3510d24e6a7d4f2729f03635af76f6f168f9 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 29 Sep 2025 11:24:48 +0900 Subject: [PATCH 35/37] =?UTF-8?q?refactor:=20InputView=20-=20getNumInput()?= =?UTF-8?q?=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/view/InputView.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index a3fac1c6..0419ec52 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -9,13 +9,4 @@ public class InputView { public String getStringInput() { return sc.nextLine(); } - - public int getNumInput() { - try { - return sc.nextInt(); - } - catch (InputMismatchException e) { - throw new IllegalArgumentException("숫자 외 다른 형태의 값을 입력할 수 없습니다."); - } - } } From 69b3c01dd64e9acfc5c1cbf78f66a33c31e6f7ee Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 29 Sep 2025 11:28:39 +0900 Subject: [PATCH 36/37] =?UTF-8?q?refactor:=20RacingController=20-=20tryCou?= =?UTF-8?q?nt=20=EA=B4=80=EB=A0=A8=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/controller/RacingController.java | 9 +++++---- src/main/java/racingcar/util/TryCountValidator.java | 5 +++++ src/main/java/racingcar/view/InputView.java | 1 - 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java index afda4ffa..cff6b5bb 100644 --- a/src/main/java/racingcar/controller/RacingController.java +++ b/src/main/java/racingcar/controller/RacingController.java @@ -27,14 +27,15 @@ public RaceInfoResponse getInfosBeforeRaceStart() { String racerStr = inputView.getStringInput(); outputView.getTryCount(); - int tryCnt = inputView.getNumInput(); - TryCountValidator.isPositive(tryCnt); + String tryCnt = inputView.getStringInput(); + TryCountValidator.checkTryCount(tryCnt); + int tryCount = Integer.parseInt(tryCnt); - RaceInfoRequest raceInfoInput = new RaceInfoRequest(racerStr, tryCnt); + RaceInfoRequest raceInfoInput = new RaceInfoRequest(racerStr, tryCount); List carNames = StringUtils.splitByComma(raceInfoInput.carNames()); - return new RaceInfoResponse(carNames, tryCnt); + return new RaceInfoResponse(carNames, tryCount); } public void raceStart(RaceInfoResponse raceInfo) { diff --git a/src/main/java/racingcar/util/TryCountValidator.java b/src/main/java/racingcar/util/TryCountValidator.java index 229003e8..2534f841 100644 --- a/src/main/java/racingcar/util/TryCountValidator.java +++ b/src/main/java/racingcar/util/TryCountValidator.java @@ -13,4 +13,9 @@ public static void isPositive(int tryCnt) { if(tryCnt < 0) throw new IllegalArgumentException("시도 횟수는 자연수여야 합니다."); } + + public static void checkTryCount(String tryCnt) { + isNumber(tryCnt); + isPositive(Integer.parseInt(tryCnt)); + } } diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index 0419ec52..304489e0 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -1,6 +1,5 @@ package racingcar.view; -import java.util.InputMismatchException; import java.util.Scanner; public class InputView { From dc2bbdd9b36d29578ca9c24941218d7fe84b83c0 Mon Sep 17 00:00:00 2001 From: JanooGwan Date: Mon, 29 Sep 2025 12:48:06 +0900 Subject: [PATCH 37/37] =?UTF-8?q?style:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EA=B3=B5=EB=B0=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/Car.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java index 19e4e7b9..7e6b271c 100644 --- a/src/main/java/racingcar/model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -8,7 +8,6 @@ public class Car { private int location; private String name; - public Car(String name) { CarNameValidator.checkName(name); this.name = name;