- 자동차 경주 게임 요구사항을 파악한다.
- 요구사항에 대한 구현을 완료한 후 자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR)를 통해 과제를 제출한다.
- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다.
- 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
- 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
- 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다.
- 우승자가 한 명 이상일 경우, 쉼표(,)로 이름을 구분해 출력한다.
- 사용자가 잘못된 값을 입력할 경우 “[ERROR]”로 시작하는 에러 메시지를 출력 후 입력을 다시 받는다.
-
InputUtil
- 예외가 없을때까지 사용자 입력을 받아 string으로 반환한다.
Car
이름을 ',' 로 구분RacingRoundTotal
을 숫자로 예외없이 변환
- 예외가 없을때까지 사용자 입력을 받아 string으로 반환한다.
-
Car
- fields :
name
(CarName
) 과position
(CarPosition
)을 가진다. - field :
name
- 제약 : 길이가 0 ~ 5
- field :
position
- 초기값 : 0
- method :
drive
- 매턴 수행 결과에 따라 한칸 앞으로 이동
- 현재 포지션을 '-' 반복으로 리턴한다.
- fields :
-
Cars
- 문자열로 받은 자동차 이름을 ','로 구분해서 Car List를 가진다
Car
들을 drive 할수 있다.Car
가 drive 했을때 마지막 지점을 기억한다- 특정 지점에 위치한
Car
를 list로 반환한다
-
CarRacingGame
경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분) pobi,crong,honux 시도할 회수는 몇회인가요? 5 실행 결과 pobi : - crong : honux : - pobi : -- crong : - honux : -- pobi : --- crong : -- honux : --- pobi : ---- crong : --- honux : ---- pobi : ----- crong : ---- honux : ----- 최종 우승자는 pobi,honux 입니다.
- 레이싱 게임 기본 동작
- 사용자 입력을 받고 예외시 [ERROR] 메시지 출력후 다시 입력을 받는다.
- 입력 받은 정보로
Cars
생성 - 입력 받은 정보로
RacingRoundTotal
생성(시도 횟수) RacingRoundTotal
만큼 반복해서 driveWinner
를 출력한다.
- 레이싱 게임 기본 동작
-
Winner
.- Cars에서 우승자 List를 추출한다..
- 우승자를 출력한다.
- 동시 우승이면 , 로 노출한다.
- 자동차 경주 게임을 실행하는 시작점은 src/main/java 폴더의 racinggame.Application의 main()이다.
- 자동차 경주 게임은 JDK 8 버전에서 실행가능해야 한다. JDK 8에서 정상 동작하지 않을 경우 0점 처리한다.
- JDK에서 기본 제공하는 Random, Scanner API 대신 nextstep.utils 패키지에서 제공하는 Randoms, Console API를
활용해 구현해야 한다.
- Random 값 추출은 nextstep.utils.Randoms의 pickNumberInRange()를 활용한다.
- 사용자가 입력하는 값은 nextstep.utils.Console의 readLine()을 활용한다.
- 프로그램 구현을 완료했을 때 src/test/java 폴더의 racinggame.ApplicationTest에 있는 2개의 Test Case가 성공해 야 한다.
- ApplicationTest에서 제공하는 2개의 Test Case는 자동차 경주 게임을 위한 최소한의 Test Case이다.
- 필수 요구사항은 아니지만 제공하는 소스 코드를 참고해 자동차 경주 게임을 위한 모든 Test Case를 추가해 보는 것 도 테스트에 대한 좋은 연습이 될 수 있다.
- 자바 코드 컨벤션을 지키면서 프로그래밍한다.
- indent(인덴트, 들여쓰기) depth를 2가 넘지 않도록 구현한다. 1까지만 허용한다.
- 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
- 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
- 자바 8에 추가된 stream api를 사용하지 않고 구현해야 한다. 단, 람다는 사용 가능하다.
- else 예약어를 쓰지 않는다.
- 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
- else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.
- 함수(또는 메소드)의 길이가 10라인을 넘어가지 않도록 구현한다.
- 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다.
- 일급콜렉션을 활용해 구현한다.
- 모든 원시값과 문자열을 포장한다.
- 도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(System.out, System.in, Scanner) 로직은 제외
- 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 분리해 구현한다.
- 힌트는 MVC 패턴 기반으로 구현한 후 View, Controller를 제외한 Model에 대한 단위 테스트를 추가하는 것에 집중한다.
- JUnit5와 AssertJ 사용법에 익숙하지 않은 개발자는 첨부한 "학습테스트를 통해 JUnit 학습하기.pdf" 문서를 참고해 사용법을 학습한 후 JUnit5 기반 단위 테스트를 구현한다.