- 자동차 경주 게임 요구사항을 파악한다.
- 요구사항에 대한 구현을 완료한 후 자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR)를 통해 코드 리뷰 요청을 한다.
- 코드 리뷰 피드백에 대한 개선 작업을 하고 다시 PUSH한다.
- 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다.
사용자가 입력한 문자열 값에 따라 사칙 연산을 수행할 수 있는 계산기. 문자열 계산기는 사칙 연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다.
- 입력 받기 (Expression.getUserInput())
- 연산 (Calculator)
- 덧셈(.add())
- 뺄셈(.sub())
- 곱셈(.mul())
- 나눗셈(.div())
- 입력 검증 (Validator)
- 입력 형식 (number op number op number ...) 검증
- 공백인지 ("", " ") -> IllegalArgumentException
- split 후 짝수번째 -> 숫자. -> NumberFormatException
- split 후 홀수 번쨰 -> 연산자(+, - , *, /) -> InputMismatchException
- 입력받은 식 파싱(ExpressionParser.parseExpression)
- 파싱된 식 계산 (Calculator.evaluate)
- 앞에서부터 하나씩 연산(Calculator.calculate)
- 지원하지 않는 연산자 예외 처리 -> IllegalArgumentException
- 0으로 나눌 때 예외 처리 -> ArithmeticException
- 앞에서부터 하나씩 연산(Calculator.calculate)
초간단 자동차 경주 게임을 구현한다.
- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- 각 자동차에 이름을 부여할 수 있다. 자동차 이름은 5자를 초과할 수 없다.
- 자동차 이름은 쉼표(,)를 기준으로 구분한다.
- 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
- 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- 전진하는 조건은 0에서 9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우이다.
- 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다.
- 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.
- 자동차 이름 입력받기(Input.getCarName)
- 자동차 이름별로 객체 생성(이름) (RacingCar)
- 자동차 한칸 전진.(RacingCar.forward)
- 자동차의 이름과 현재 위치 출력.(RacingCar.printCurrPosition)
- 참가 자동차는 2대 이상. (Validator.validatePossibleToStart)
- 자동차의 이름 글자수 5자 이하인가. (Validator.validateNameLength)
- 문자열에 들어온 공백 제거. (Input.removeBlank)
- 자동차 이름은
,
로 구분. (Input.splitNameByComma)
- 자동차 이름별로 객체 생성(이름) (RacingCar)
- 시도 횟수 입력(Input.getTrial)
- 숫자가 아닌 입력 예외처리. (Validator.isNumber)
- 게임 진행(RacingGame.start.progress)
- 전진 여부 구하는 로직. (RacingGame.canForward)
- 게임 View 출력.
- 게임 진행 현황 출력. (RacingGame.printProgress)
- RacingCar 위치 출력. (RacingCar.printCurrPosition)
- 우승자 출력. (RacingGame.printWinner)
- 게임 진행 현황 출력. (RacingGame.printProgress)