From 3251ff1b730032982645f16dce67845ab7a6d8a3 Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Thu, 20 Mar 2025 19:52:38 +0900 Subject: [PATCH 01/15] docs: update readme --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c550c4c2a09..e99e567af60 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,14 @@ * 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다. ## 온라인 코드 리뷰 과정 -* [텍스트와 이미지로 살펴보는 온라인 코드 리뷰 과정](https://github.com/next-step/nextstep-docs/tree/master/codereview) \ No newline at end of file +* [텍스트와 이미지로 살펴보는 온라인 코드 리뷰 과정](https://github.com/next-step/nextstep-docs/tree/master/codereview) + +--- + +## "3단계 - 자동차 경주" 기능 목록 및 요구사항 + +### 기능 요구사항 +- [ ] 자동차 대수를 입력받는다. +- [ ] 이동할 횟수를 입력받는다. +- [ ] 랜덤 값을 생성하여 전진 (값이 4 이상) 혹은 정지 (값이 3 이하) 할지 결정한다. +- [ ] 매 이동 시 마다 자동차 상태를 출력한다. \ No newline at end of file From 6cef38f9bde6cb645a4081da2d48db3717988f77 Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Thu, 20 Mar 2025 21:18:37 +0900 Subject: [PATCH 02/15] =?UTF-8?q?feat:=20Controller=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/RacingGame.java | 46 ++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/main/java/controller/RacingGame.java diff --git a/src/main/java/controller/RacingGame.java b/src/main/java/controller/RacingGame.java new file mode 100644 index 00000000000..7764f24f1fd --- /dev/null +++ b/src/main/java/controller/RacingGame.java @@ -0,0 +1,46 @@ +package controller; + +import domain.Car; +import view.InputView; +import view.ResultView; + +import java.util.ArrayList; +import java.util.List; + +public class RacingGame { + private final List cars = new ArrayList<>(); + private final int numberOfRounds; + + public RacingGame(int numberOfCars, int numberOfRounds) { + this.numberOfRounds = numberOfRounds; + generateCars(numberOfCars); + } + + private void generateCars(int numberOfCars) { + for (int i = 0; i < numberOfCars; i++) { + cars.add(new Car()); + } + } + + private void runOneRound() { + for (Car car : cars) { + car.run(); + } + } + + private void run() { + ResultView.printResult("실행 결과"); + for (int i = 0; i < numberOfRounds; i++) { + runOneRound(); + ResultView.printResult(""); + } + } + + public static void main(String[] args) { + int numberOfCars = InputView.getNumberOfCars(); + int numberOfRounds = InputView.getNumberOfRounds(); + + RacingGame game = new RacingGame(numberOfCars, numberOfRounds); + game.run(); + } +} From 7956ae60c91e9a4f1d1d412f74cd9427f820eb00 Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Thu, 20 Mar 2025 21:18:50 +0900 Subject: [PATCH 03/15] =?UTF-8?q?feat:=20domain=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Car.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/domain/Car.java diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java new file mode 100644 index 00000000000..95b1b7693b7 --- /dev/null +++ b/src/main/java/domain/Car.java @@ -0,0 +1,29 @@ +package domain; + +import java.util.Random; +import view.ResultView; + +public class Car { + private int position = 0; + private static final Random random = new Random(); + + private int getRandomValue() { + return random.nextInt(10); + } + + private void move(int randomValue) { + if (randomValue >= 4) { + position++; + } + } + + private void viewCurrentPosition() { + ResultView.printCurrentPosition(position); + } + + public void run() { + int randomValue = getRandomValue(); + move(randomValue); + viewCurrentPosition(); + } +} \ No newline at end of file From 351ce8736b4ae038f76557f67750e8ce38d90e90 Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Thu, 20 Mar 2025 21:18:58 +0900 Subject: [PATCH 04/15] =?UTF-8?q?feat:=20view=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/InputView.java | 20 ++++++++++++++++++++ src/main/java/view/ResultView.java | 11 +++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/ResultView.java diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 00000000000..0803b2fb1c6 --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,20 @@ +package view; + +import java.util.Scanner; + +public class InputView { + private static final Scanner scanner = new Scanner(System.in); + + public static int getNumberOfCars() { + return getInput("자동차 대수는 몇 대 인가요?"); + } + + public static int getNumberOfRounds() { + return getInput("시도할 회수는 몇 회 인가요?"); + } + + private static int getInput(String message) { + System.out.println(message); + return scanner.nextInt(); + } +} \ No newline at end of file diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java new file mode 100644 index 00000000000..8e893def761 --- /dev/null +++ b/src/main/java/view/ResultView.java @@ -0,0 +1,11 @@ +package view; + +public class ResultView { + public static void printCurrentPosition(int position) { + printResult("-".repeat(position)); + } + + public static void printResult(String message) { + System.out.println(message); + } +} \ No newline at end of file From b02bfce20e2019ba45b81b667be7be6bc1fb5e95 Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Fri, 21 Mar 2025 18:28:42 +0900 Subject: [PATCH 05/15] =?UTF-8?q?refactor:=20Position=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=ED=99=94,=20MOVE=5FTHRS=20=EC=83=81=EC=88=98=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Car.java | 9 +++++---- src/main/java/domain/Position.java | 14 ++++++++++++++ src/main/java/view/ResultView.java | 4 ---- 3 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 src/main/java/domain/Position.java diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java index 95b1b7693b7..0830b8dd1e9 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/domain/Car.java @@ -4,21 +4,22 @@ import view.ResultView; public class Car { - private int position = 0; + private final Position position = new Position(); private static final Random random = new Random(); + private static final int MOVE_THRS = 4; private int getRandomValue() { return random.nextInt(10); } private void move(int randomValue) { - if (randomValue >= 4) { - position++; + if (randomValue >= MOVE_THRS) { + this.position.move(); } } private void viewCurrentPosition() { - ResultView.printCurrentPosition(position); + ResultView.printResult(this.position.toString()); } public void run() { diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java new file mode 100644 index 00000000000..8514daac65e --- /dev/null +++ b/src/main/java/domain/Position.java @@ -0,0 +1,14 @@ +package domain; + +class Position { + private int value = 0; + + public void move() { + this.value++; + } + + @Override + public String toString() { + return "-".repeat(this.value); + } +} diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java index 8e893def761..1ff403b9264 100644 --- a/src/main/java/view/ResultView.java +++ b/src/main/java/view/ResultView.java @@ -1,10 +1,6 @@ package view; public class ResultView { - public static void printCurrentPosition(int position) { - printResult("-".repeat(position)); - } - public static void printResult(String message) { System.out.println(message); } From 88691285dbfbbcb0aa5f77ee7d36c26899d11d46 Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Fri, 21 Mar 2025 20:48:56 +0900 Subject: [PATCH 06/15] =?UTF-8?q?refactor:=20Cars=20=EC=9D=BC=EA=B8=89=20?= =?UTF-8?q?=EC=BB=AC=EB=A0=89=EC=85=98=20=EA=B0=9D=EC=B2=B4=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/RacingGame.java | 24 ++++++------------- src/main/java/domain/Car.java | 19 ++++++--------- src/main/java/domain/Cars.java | 30 ++++++++++++++++++++++++ src/main/java/domain/Position.java | 2 +- 4 files changed, 45 insertions(+), 30 deletions(-) create mode 100644 src/main/java/domain/Cars.java diff --git a/src/main/java/controller/RacingGame.java b/src/main/java/controller/RacingGame.java index 7764f24f1fd..664e455ca6a 100644 --- a/src/main/java/controller/RacingGame.java +++ b/src/main/java/controller/RacingGame.java @@ -1,38 +1,28 @@ package controller; -import domain.Car; +import domain.Cars; import view.InputView; import view.ResultView; -import java.util.ArrayList; -import java.util.List; - public class RacingGame { - private final List cars = new ArrayList<>(); + private final Cars cars; private final int numberOfRounds; public RacingGame(int numberOfCars, int numberOfRounds) { this.numberOfRounds = numberOfRounds; - generateCars(numberOfCars); - } - - private void generateCars(int numberOfCars) { - for (int i = 0; i < numberOfCars; i++) { - cars.add(new Car()); - } + this.cars = new Cars(numberOfCars); } private void runOneRound() { - for (Car car : cars) { - car.run(); - } + this.cars.randomMove(); + this.cars.printCurrentPositions(); + ResultView.printResult(""); } private void run() { ResultView.printResult("실행 결과"); - for (int i = 0; i < numberOfRounds; i++) { + for (int i = 0; i < this.numberOfRounds; i++) { runOneRound(); - ResultView.printResult(""); } } diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java index 0830b8dd1e9..8dc8648af40 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/domain/Car.java @@ -3,28 +3,23 @@ import java.util.Random; import view.ResultView; -public class Car { +class Car { private final Position position = new Position(); private static final Random random = new Random(); private static final int MOVE_THRS = 4; - private int getRandomValue() { - return random.nextInt(10); + void move() { + this.position.increase(); } - private void move(int randomValue) { + void randomMove() { + int randomValue = random.nextInt(10); if (randomValue >= MOVE_THRS) { - this.position.move(); + move(); } } - private void viewCurrentPosition() { + void printCurrentPosition() { ResultView.printResult(this.position.toString()); } - - public void run() { - int randomValue = getRandomValue(); - move(randomValue); - viewCurrentPosition(); - } } \ No newline at end of file diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java new file mode 100644 index 00000000000..324aa6af8ba --- /dev/null +++ b/src/main/java/domain/Cars.java @@ -0,0 +1,30 @@ +package domain; + +import java.util.ArrayList; +import java.util.List; + +public class Cars { + private final List cars = new ArrayList<>(); + + public Cars(int numberOfCars) { + generateCars(numberOfCars); + } + + private void generateCars(int numberOfCars) { + for (int i = 0; i < numberOfCars; i++) { + this.cars.add(new Car()); + } + } + + public void randomMove() { + for (Car car : this.cars) { + car.randomMove(); + } + } + + public void printCurrentPositions() { + for (Car car : this.cars) { + car.printCurrentPosition(); + } + } +} diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index 8514daac65e..739c00ea1c1 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -3,7 +3,7 @@ class Position { private int value = 0; - public void move() { + public void increase() { this.value++; } From b9ec1db3616a9b64b71994e6446fd2fdc22ced3e Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Mon, 24 Mar 2025 13:18:55 +0900 Subject: [PATCH 07/15] =?UTF-8?q?refactor:=20Position=EC=97=90=20validate?= =?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/domain/Position.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index 739c00ea1c1..c52da1d42ca 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -11,4 +11,10 @@ public void increase() { public String toString() { return "-".repeat(this.value); } + + private void validate() { + if (this.value < 0) { + throw new IllegalArgumentException("Position value must be greater than or equal to 0."); + } + } } From f9ca171fd5aa5df34273668d80f66d8726e3f1f8 Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Mon, 24 Mar 2025 13:19:10 +0900 Subject: [PATCH 08/15] =?UTF-8?q?refactor:=20=EC=A0=95=EC=9D=98=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Car.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java index 8dc8648af40..a7fb9ee6e4d 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/domain/Car.java @@ -4,11 +4,11 @@ import view.ResultView; class Car { - private final Position position = new Position(); private static final Random random = new Random(); private static final int MOVE_THRS = 4; + private final Position position = new Position(); - void move() { + private void move() { this.position.increase(); } From f1b69c3a53faa403d0e55425e9484bc83f1d3426 Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Mon, 24 Mar 2025 13:35:12 +0900 Subject: [PATCH 09/15] =?UTF-8?q?refactor:=20=EC=9D=B8=ED=84=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EB=B0=A9=EC=8B=9D=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/RacingGame.java | 4 +++- src/main/java/domain/Car.java | 14 ++++---------- src/main/java/domain/Cars.java | 4 ++-- src/main/java/domain/NumberGenerator.java | 6 ++++++ src/main/java/domain/RandomNumberGenerator.java | 13 +++++++++++++ 5 files changed, 28 insertions(+), 13 deletions(-) create mode 100644 src/main/java/domain/NumberGenerator.java create mode 100644 src/main/java/domain/RandomNumberGenerator.java diff --git a/src/main/java/controller/RacingGame.java b/src/main/java/controller/RacingGame.java index 664e455ca6a..4c80ec3d515 100644 --- a/src/main/java/controller/RacingGame.java +++ b/src/main/java/controller/RacingGame.java @@ -1,12 +1,14 @@ package controller; import domain.Cars; +import domain.RandomNumberGenerator; import view.InputView; import view.ResultView; public class RacingGame { private final Cars cars; private final int numberOfRounds; + private final RandomNumberGenerator randomNumberGenerator = new RandomNumberGenerator(); public RacingGame(int numberOfCars, int numberOfRounds) { this.numberOfRounds = numberOfRounds; @@ -14,7 +16,7 @@ public RacingGame(int numberOfCars, int numberOfRounds) { } private void runOneRound() { - this.cars.randomMove(); + this.cars.move(randomNumberGenerator); this.cars.printCurrentPositions(); ResultView.printResult(""); } diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java index a7fb9ee6e4d..a682ddad242 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/domain/Car.java @@ -1,21 +1,15 @@ package domain; -import java.util.Random; import view.ResultView; class Car { - private static final Random random = new Random(); private static final int MOVE_THRS = 4; private final Position position = new Position(); - private void move() { - this.position.increase(); - } - - void randomMove() { - int randomValue = random.nextInt(10); - if (randomValue >= MOVE_THRS) { - move(); + void move(NumberGenerator numberGenerator) { + final int number = numberGenerator.generate(); + if (number >= MOVE_THRS) { + this.position.increase(); } } diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index 324aa6af8ba..1c89dfd47f6 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -16,9 +16,9 @@ private void generateCars(int numberOfCars) { } } - public void randomMove() { + public void move(NumberGenerator numberGenerator) { for (Car car : this.cars) { - car.randomMove(); + car.move(numberGenerator); } } diff --git a/src/main/java/domain/NumberGenerator.java b/src/main/java/domain/NumberGenerator.java new file mode 100644 index 00000000000..d1e5b53aa44 --- /dev/null +++ b/src/main/java/domain/NumberGenerator.java @@ -0,0 +1,6 @@ +package domain; + +public interface NumberGenerator { + int generate(); +} + diff --git a/src/main/java/domain/RandomNumberGenerator.java b/src/main/java/domain/RandomNumberGenerator.java new file mode 100644 index 00000000000..d6d4760497a --- /dev/null +++ b/src/main/java/domain/RandomNumberGenerator.java @@ -0,0 +1,13 @@ +package domain; + +import java.util.Random; + +public class RandomNumberGenerator implements NumberGenerator { + private static final Random random = new Random(); + private static final int MAX_BOUND = 10; + + @Override + public int generate() { + return random.nextInt(MAX_BOUND); + } +} From 98fda6fc6ed94b85cc2a666aaa1807d0e7aa50bc Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Mon, 24 Mar 2025 13:59:44 +0900 Subject: [PATCH 10/15] refactor: add test for Cars --- src/test/java/domain/CarsTest.java | 61 +++++++++++++++++++ .../java/domain/StaticNumberGenerator.java | 14 +++++ 2 files changed, 75 insertions(+) create mode 100644 src/test/java/domain/CarsTest.java create mode 100644 src/test/java/domain/StaticNumberGenerator.java diff --git a/src/test/java/domain/CarsTest.java b/src/test/java/domain/CarsTest.java new file mode 100644 index 00000000000..078f1c4f3d1 --- /dev/null +++ b/src/test/java/domain/CarsTest.java @@ -0,0 +1,61 @@ +package domain; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +import static org.assertj.core.api.InstanceOfAssertFactories.list; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.BDDAssertions.as; + +public class CarsTest { + @DisplayName("숫자가 4 미만이면 움직이지 않는다.") + @Test + void moveTestSmallerThanFour() { + Cars cars = new Cars(1); + NumberGenerator numberGenerator = new StaticNumberGenerator(3); + + cars.move(numberGenerator); + + assertThat(cars) + .extracting("cars", as(list(Car.class))) + .first() + .extracting("position") + .extracting("value") + .isEqualTo(0); + } + + @DisplayName("숫자가 4 이상이면 움직인다.") + @Test + void moveTestLargerThanOrEqualToFour() { + Cars cars = new Cars(1); + NumberGenerator numberGenerator = new StaticNumberGenerator(5); + + cars.move(numberGenerator); + + assertThat(cars) + .extracting("cars", as(list(Car.class))) + .first() + .extracting("position") + .extracting("value") + .isEqualTo(1); + } + + @DisplayName("print 테스트") + @Test + void printTest() { + Cars cars = new Cars(1); + NumberGenerator numberGenerator = new StaticNumberGenerator(5); + + cars.move(numberGenerator); + + ByteArrayOutputStream output = new ByteArrayOutputStream(); + System.setOut(new PrintStream(output)); + + cars.printCurrentPositions(); + + assertThat(output.toString()).isEqualTo("-\n"); + } +} \ No newline at end of file diff --git a/src/test/java/domain/StaticNumberGenerator.java b/src/test/java/domain/StaticNumberGenerator.java new file mode 100644 index 00000000000..f3c5613a54b --- /dev/null +++ b/src/test/java/domain/StaticNumberGenerator.java @@ -0,0 +1,14 @@ +package domain; + +public class StaticNumberGenerator implements NumberGenerator { + private static int NUMBER; + + public StaticNumberGenerator(int number) { + NUMBER = number; + } + + @Override + public int generate() { + return NUMBER; + } +} \ No newline at end of file From 0fb2064899b556238dd9b9086348dc05f308386d Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Mon, 24 Mar 2025 16:34:09 +0900 Subject: [PATCH 11/15] =?UTF-8?q?refactor:=20resultview=EC=9D=98=20?= =?UTF-8?q?=EC=97=AD=ED=95=A0=20=ED=99=95=EB=8C=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/RacingGame.java | 7 +++--- src/main/java/domain/Car.java | 6 ++--- src/main/java/domain/Cars.java | 6 +++-- src/main/java/domain/Position.java | 2 +- src/main/java/view/ResultView.java | 13 +++++++++- src/test/java/domain/CarsTest.java | 30 ++---------------------- 6 files changed, 25 insertions(+), 39 deletions(-) diff --git a/src/main/java/controller/RacingGame.java b/src/main/java/controller/RacingGame.java index 4c80ec3d515..2db72927eb4 100644 --- a/src/main/java/controller/RacingGame.java +++ b/src/main/java/controller/RacingGame.java @@ -17,12 +17,13 @@ public RacingGame(int numberOfCars, int numberOfRounds) { private void runOneRound() { this.cars.move(randomNumberGenerator); - this.cars.printCurrentPositions(); - ResultView.printResult(""); + // this.cars.printCurrentPositions(); + ResultView.printCurrentPositions(this.cars.getCurrentPositions()); + ResultView.printMessage(""); } private void run() { - ResultView.printResult("실행 결과"); + ResultView.printMessage("실행 결과"); for (int i = 0; i < this.numberOfRounds; i++) { runOneRound(); } diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java index a682ddad242..a80d5c8eebc 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/domain/Car.java @@ -1,7 +1,5 @@ package domain; -import view.ResultView; - class Car { private static final int MOVE_THRS = 4; private final Position position = new Position(); @@ -13,7 +11,7 @@ void move(NumberGenerator numberGenerator) { } } - void printCurrentPosition() { - ResultView.printResult(this.position.toString()); + Position getPosition() { + return this.position; } } \ No newline at end of file diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index 1c89dfd47f6..54e4e793510 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -22,9 +22,11 @@ public void move(NumberGenerator numberGenerator) { } } - public void printCurrentPositions() { + public List getCurrentPositions() { + List positions = new ArrayList<>(); for (Car car : this.cars) { - car.printCurrentPosition(); + positions.add(car.getPosition()); } + return positions; } } diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index c52da1d42ca..8088d0a9ee4 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -1,6 +1,6 @@ package domain; -class Position { +public class Position { private int value = 0; public void increase() { diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java index 1ff403b9264..9e67f31e4d5 100644 --- a/src/main/java/view/ResultView.java +++ b/src/main/java/view/ResultView.java @@ -1,7 +1,18 @@ package view; +import java.util.List; + +import domain.Position; + public class ResultView { - public static void printResult(String message) { + + public static void printCurrentPositions(List positions) { + for (Position position : positions) { + printMessage(position.toString()); + } + } + + public static void printMessage(String message) { System.out.println(message); } } \ No newline at end of file diff --git a/src/test/java/domain/CarsTest.java b/src/test/java/domain/CarsTest.java index 078f1c4f3d1..64da07d7292 100644 --- a/src/test/java/domain/CarsTest.java +++ b/src/test/java/domain/CarsTest.java @@ -19,12 +19,7 @@ void moveTestSmallerThanFour() { cars.move(numberGenerator); - assertThat(cars) - .extracting("cars", as(list(Car.class))) - .first() - .extracting("position") - .extracting("value") - .isEqualTo(0); + assertThat(cars.getCurrentPositions()).first().extracting("value").isEqualTo(0); } @DisplayName("숫자가 4 이상이면 움직인다.") @@ -35,27 +30,6 @@ void moveTestLargerThanOrEqualToFour() { cars.move(numberGenerator); - assertThat(cars) - .extracting("cars", as(list(Car.class))) - .first() - .extracting("position") - .extracting("value") - .isEqualTo(1); - } - - @DisplayName("print 테스트") - @Test - void printTest() { - Cars cars = new Cars(1); - NumberGenerator numberGenerator = new StaticNumberGenerator(5); - - cars.move(numberGenerator); - - ByteArrayOutputStream output = new ByteArrayOutputStream(); - System.setOut(new PrintStream(output)); - - cars.printCurrentPositions(); - - assertThat(output.toString()).isEqualTo("-\n"); + assertThat(cars.getCurrentPositions()).first().extracting("value").isEqualTo(1); } } \ No newline at end of file From 6f367dc89fd681f64346142df6f0a04f55746794 Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Mon, 24 Mar 2025 16:34:21 +0900 Subject: [PATCH 12/15] =?UTF-8?q?refactor:=20Cars=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/CarsTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/domain/CarsTest.java b/src/test/java/domain/CarsTest.java index 64da07d7292..29d4425da7b 100644 --- a/src/test/java/domain/CarsTest.java +++ b/src/test/java/domain/CarsTest.java @@ -11,6 +11,16 @@ import static org.assertj.core.api.BDDAssertions.as; public class CarsTest { + @DisplayName("입력받은 숫자만큼 자동차를 생성한다.") + @Test + void generateCarsTest() { + int numberOfCars = 3; + + Cars cars = new Cars(numberOfCars); + + assertThat(cars).extracting("cars").asInstanceOf(list(Car.class)).hasSize(numberOfCars); + } + @DisplayName("숫자가 4 미만이면 움직이지 않는다.") @Test void moveTestSmallerThanFour() { From a59eb0ef0eca1e43ab84c3e17985923307f73e18 Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Mon, 24 Mar 2025 18:34:49 +0900 Subject: [PATCH 13/15] =?UTF-8?q?refactor:=20car.move=EB=A5=BC=20racingGam?= =?UTF-8?q?e=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/controller/RacingGame.java | 8 +++++--- src/main/java/domain/Car.java | 6 +++--- src/main/java/domain/Cars.java | 14 ++------------ src/main/java/view/ResultView.java | 8 ++------ 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/main/java/controller/RacingGame.java b/src/main/java/controller/RacingGame.java index 2db72927eb4..83cbd72a4bd 100644 --- a/src/main/java/controller/RacingGame.java +++ b/src/main/java/controller/RacingGame.java @@ -1,5 +1,6 @@ package controller; +import domain.Car; import domain.Cars; import domain.RandomNumberGenerator; import view.InputView; @@ -16,9 +17,10 @@ public RacingGame(int numberOfCars, int numberOfRounds) { } private void runOneRound() { - this.cars.move(randomNumberGenerator); - // this.cars.printCurrentPositions(); - ResultView.printCurrentPositions(this.cars.getCurrentPositions()); + for (Car car : cars.getCars()) { + car.move(randomNumberGenerator); + ResultView.printPosition(car.getCurrentPosition()); + } ResultView.printMessage(""); } diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java index a80d5c8eebc..a552f82be6a 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/domain/Car.java @@ -1,17 +1,17 @@ package domain; -class Car { +public class Car { private static final int MOVE_THRS = 4; private final Position position = new Position(); - void move(NumberGenerator numberGenerator) { + public void move(NumberGenerator numberGenerator) { final int number = numberGenerator.generate(); if (number >= MOVE_THRS) { this.position.increase(); } } - Position getPosition() { + public Position getCurrentPosition() { return this.position; } } \ No newline at end of file diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index 54e4e793510..e38e6b2b8d5 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -16,17 +16,7 @@ private void generateCars(int numberOfCars) { } } - public void move(NumberGenerator numberGenerator) { - for (Car car : this.cars) { - car.move(numberGenerator); - } - } - - public List getCurrentPositions() { - List positions = new ArrayList<>(); - for (Car car : this.cars) { - positions.add(car.getPosition()); - } - return positions; + public List getCars() { + return this.cars; } } diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java index 9e67f31e4d5..90aa96aa077 100644 --- a/src/main/java/view/ResultView.java +++ b/src/main/java/view/ResultView.java @@ -1,15 +1,11 @@ package view; -import java.util.List; - import domain.Position; public class ResultView { - public static void printCurrentPositions(List positions) { - for (Position position : positions) { - printMessage(position.toString()); - } + public static void printPosition(Position position) { + printMessage(position.toString()); } public static void printMessage(String message) { From 4065de434b920769123eadaad9cd78e43b34ca0d Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Mon, 24 Mar 2025 18:43:32 +0900 Subject: [PATCH 14/15] refactor: refactor test --- src/test/java/domain/CarTest.java | 30 ++++++++++++++++++++++++++++++ src/test/java/domain/CarsTest.java | 26 -------------------------- 2 files changed, 30 insertions(+), 26 deletions(-) create mode 100644 src/test/java/domain/CarTest.java diff --git a/src/test/java/domain/CarTest.java b/src/test/java/domain/CarTest.java new file mode 100644 index 00000000000..bae2f1185d3 --- /dev/null +++ b/src/test/java/domain/CarTest.java @@ -0,0 +1,30 @@ +package domain; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class CarTest { + @DisplayName("숫자가 4 미만이면 움직이지 않는다.") + @Test + void moveTestSmallerThanFour() { + Car car = new Car(); + NumberGenerator numberGenerator = new StaticNumberGenerator(3); + + car.move(numberGenerator); + + assertThat(car.getCurrentPosition()).extracting("value").isEqualTo(0); + } + + @DisplayName("숫자가 4 이상이면 움직인다.") + @Test + void moveTestLargerThanOrEqualToFour() { + Car car = new Car(); + NumberGenerator numberGenerator = new StaticNumberGenerator(5); + + car.move(numberGenerator); + + assertThat(car.getCurrentPosition()).extracting("value").isEqualTo(1); + } +} \ No newline at end of file diff --git a/src/test/java/domain/CarsTest.java b/src/test/java/domain/CarsTest.java index 29d4425da7b..c5e0a134641 100644 --- a/src/test/java/domain/CarsTest.java +++ b/src/test/java/domain/CarsTest.java @@ -3,12 +3,8 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; - import static org.assertj.core.api.InstanceOfAssertFactories.list; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.BDDAssertions.as; public class CarsTest { @DisplayName("입력받은 숫자만큼 자동차를 생성한다.") @@ -20,26 +16,4 @@ void generateCarsTest() { assertThat(cars).extracting("cars").asInstanceOf(list(Car.class)).hasSize(numberOfCars); } - - @DisplayName("숫자가 4 미만이면 움직이지 않는다.") - @Test - void moveTestSmallerThanFour() { - Cars cars = new Cars(1); - NumberGenerator numberGenerator = new StaticNumberGenerator(3); - - cars.move(numberGenerator); - - assertThat(cars.getCurrentPositions()).first().extracting("value").isEqualTo(0); - } - - @DisplayName("숫자가 4 이상이면 움직인다.") - @Test - void moveTestLargerThanOrEqualToFour() { - Cars cars = new Cars(1); - NumberGenerator numberGenerator = new StaticNumberGenerator(5); - - cars.move(numberGenerator); - - assertThat(cars.getCurrentPositions()).first().extracting("value").isEqualTo(1); - } } \ No newline at end of file From bd07d909018510dca5af2ab1e4e5a5c9291f2308 Mon Sep 17 00:00:00 2001 From: bo-10000 Date: Mon, 24 Mar 2025 19:12:26 +0900 Subject: [PATCH 15/15] =?UTF-8?q?refactor:=20CarsTest=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/CarsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/domain/CarsTest.java b/src/test/java/domain/CarsTest.java index c5e0a134641..097a03368a8 100644 --- a/src/test/java/domain/CarsTest.java +++ b/src/test/java/domain/CarsTest.java @@ -14,6 +14,6 @@ void generateCarsTest() { Cars cars = new Cars(numberOfCars); - assertThat(cars).extracting("cars").asInstanceOf(list(Car.class)).hasSize(numberOfCars); + assertThat(cars.getCars()).asInstanceOf(list(Car.class)).hasSize(numberOfCars); } } \ No newline at end of file