- [x] 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- [x] 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
- [x] 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
- [x] 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- [x] 전진하는 조건은 0에서 9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우이다.
- [x] 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.
- [x] 우승자가 여러 명일 경우 쉼표(,)를 이용하여 구분한다.
- [x] 사용자가 잘못된 값을 입력한 경우 throw문을 사용해 "[ERROR]"로 시작하는 메시지를 가지는 예외를 발생시킨 후, 애플리케이션은 종료되어야 한다.
App 클래스
역할
App 클래스의 play 메서드는 자동차 경주가 시작될 수 있도록 한다.
- inputView : 콘솔창에서 사용자의 입력을 받는 역할
- Console.readLineAsync 함수만 사용해서 입력을 받는 것이 아니라, 다른 함수를 사용해서 입력을 받을 수도 있지 않을까? 라는 생각으로 inputView 인스턴스를 생성할 때, 외부에서 입력을 받는 함수를 주입할 수 있도록 했다.
- outputView : 콘솔창에 게임 진행 상황, 결과를 출력하는 역할
- 마찬가지로 Console.print가 아닌 다른 함수를 사용할 수도 있기 때문에 outputView 인스턴스를 생성할 때 외부에서 주입할 수 있도록 했다.
Model
MVC 패턴에서 Model은 데이터와, 데이터와 관련된 비즈니스 로직을 가진다.
Car
경주에 참여하는 한 자동차의 데이터(이름, 현재 위치)와, 비즈니스 로직을 표현한다.
moveCar