-
경주할 자동차들의 이름을 사용자로부터 입력받는다.
- 자동차 이름은 쉼표(,)를 기준으로 구분하여 받는다.
- 자동차명으로 빈문자열 혹은 공백만 입력되면 예외가 발생한다.
- 자동차명이 중복될 경우 예외가 발생한다.
- 자동차명이 1대만 입력되어도 예외가 발생하지 않는다.
- 자동차 이름이 5글자를 넘어가면 예외가 발생한다.
-
사용자로부터 전체 라운드 횟수로 양의 정수를 입력받는다.
- 횟수로 정수 이외의 값이 입력되면 예외가 발생한다.
- 횟수로 0이 입력되면 예외가 발생한다.
- 횟수로 음수가 입력되면 예외가 발생한다.
-
각 라운드마다 각 자동차는 전진 혹은 정지한다.
- 각 자동차는 0~9 사이의 숫자를 임의로 생성하고, 4 이상이면 전진한다.
- 각 라운드 종료시, 모든 자동차의 현재 위치를 출력한다.
-
전체 라운드 종료 후 우승자를 출력한다.
- 우승자는 가장 멀리 전진한 자동차가 된다.
- 우승자가 두 명 이상이어도 예외가 발생하지 않는다.
-
게임 종료 후 더 이상 사용되지 않는 데이터를 제거한다.
- 종료된 Game 인스턴스에 명시적으로 null을 할당한다.
- 새로운 Game 인스턴스를 생성했을 때 이전 게임의 Car 인스턴스가 CarRepository에 남아있지 않도록 한다.
-
게임 종료 후 새로운 게임의 시작 여부를 사용자로부터 입력받는다.
- y를 입력받으면 위의 과정을 전부 다시 시작한다.
- n를 입력받으면 프로그램을 정상적으로 종료시킨다.
- 핵심 비지니스 로직을 가지는 객체를 domain 패키지, UI 관련한 객체를 view 패키지에 구현한다.
- MVC 패턴 기반 리팩토링
- domain 패키지의 객체는 view 패키지 객체에 의존하지 않는다.
- view 패키지의 객체는 domain 패키지 객체에 의존할 수 있다.