@@ -0,0 +1,113 @@
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+import java.util.Scanner;
+
+public class RacingCar {
+
+    static String move = "-";
+
+    static List<Car> recordMovingCar = new ArrayList<>();
+
+    public static void main(String[] args) {
+
+        InputView userInput = scannerInput();
+
+        int numberOfCarsValue = userInput.getNumberOfCars();
+        int numberOfAttemptsValue = userInput.getNumberOfAttempts();
+
+        System.out.println("======= READY =========");
+        for (int carNumber=0; carNumber < numberOfCarsValue; carNumber++) { System.out.println(move); }
+
+        System.out.println("======= START!! =======");
+        randomMove(numberOfCarsValue, numberOfAttemptsValue);
+
+    }
+
+    public static void randomMove(int numberOfCarsValue, int numberOfAttemptsValue) {
+        Random random = new Random();
+
+        for (int attempt=0; attempt < numberOfAttemptsValue; attempt++) {
+            for (int eachCar = 0; eachCar < numberOfCarsValue; eachCar++) {
+
+                int randomValueForMove = random.nextInt(numberOfAttemptsValue);
+
+                String move = "-";
+                Car car = new Car();
+                car.setMoving(move);
+                recordMovingCar.add(car);
+
+                String beforeMoving = "";
+
+//                System.out.println("랜덤 값 : " + randomValueForMove);
+
+                if (randomValueForMove > 9 || randomValueForMove < 4) {
+                    beforeMoving = recordMovingCar.get(eachCar).getMoving();
+                    String doNotMove = beforeMoving + moving(randomValueForMove);
+                    car.setMoving(doNotMove);
+                }
+
+
+                if (randomValueForMove > 0 & randomValueForMove > 3 & randomValueForMove <= 9) {
+                    beforeMoving = recordMovingCar.get(eachCar).getMoving();
+                    String plusMoving = beforeMoving + moving(randomValueForMove);
+                    car.setMoving(plusMoving);
+                }
+
+                recordMovingCar.add(car);
+                recordMovingCar.get(eachCar).setMoving(car.getMoving());
+                System.out.println(recordMovingCar.get(eachCar).getMoving());
+            }
+            System.out.print(System.lineSeparator());
+        }
+    }
+
+    public static String moving(int randomValueForMove) {
+        String move = "-";
+
+        if (randomValueForMove > 9 || randomValueForMove < 4) {
+            move = "";
+            return move;
+        }
+
+        for (int number=0; number < randomValueForMove; number++) { move = move + "-";}
+
+        return move;
+    }
+
+    public static InputView scannerInput() {
+
+        InputView inputView = new InputView();
+        Scanner scanner = new Scanner(System.in);
+
+        System.out.println("자동차 대수는 몇 대인가요?");
+        inputView.setNumberOfCars(scanner.nextInt());
+
+        System.out.println("시도 횟수는 몇 회인가요?");
+        inputView.setNumberOfAttempts(scanner.nextInt());
+
+        return inputView;
+    }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

리뷰: https://edu.nextstep.camp/s/wLaV8qhA/lt/SuvyWqa2 
프로그래밍 요구사항을 미준수하셨네요. 아래 규칙을 준수하며 프로그래밍을 하다보면 객체지향 설계 연습이 되니, 지켜주셔요~

규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다.
규칙 2: else 예약어를 쓰지 않는다.
메소드의 라인 수를 15라인이 넘지 않도록 구현한다.

---

TDD 를 했을 때의 장점이 여럿 있지만, 그 중 하나는 기능 단위로 테스트코드를 작성하고 이를 검증하며 점진적으로 개발을 할 수 있다는 점이에요.
소프트웨어가 좀만 복잡해져도 우리는 한번에 모든 로직을 바로 구현할 수 없어요.
기능 요구사항을 보면, 아래와 같은 요구사항들이 있지요.
- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다.

그렇다면, 아래와 같이 작은 단위부터 차곡차곡 기능을 구현해갈 수 있어요.
- 자동차가 랜덤 값이 4이상일 경우, 전진한다. 
- 자동차가 랜덤 값이 4미만일 경우, 멈춘다. 
- 주어진 횟수 동안 n대의 자동차가 게임을 수행한다.
...

위와 같이 프로그래밍을 하게 될 경우, 현재 어떤 값을 가지고 있는지 계속 디버깅해가면서 작성할 수 밖에 없고,
이에 객체지향적인 설계가 아닌 절차지향적인 사고를 하게 됩니다.
지금은 좀 낯설더라도 포비가 가이드하는대로 천천히 미션을 수행해보시길 바래요.