- 자동차 경주 게임 요구사항을 파악한다.
- 요구사항에 대한 구현을 완료한 후 자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR)를 통해 코드 리뷰 요청을 한다.
- 코드 리뷰 피드백에 대한 개선 작업을 하고 다시 PUSH한다.
- 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다.
- String, Set Collection 테스트
- 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환 (예: “” => 0, "1,2" => 3, "1,2,3" => 6, “1,2:3” => 6)
- 앞의 기본 구분자(쉼표, 콜론)외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 “//”와 “\n” 사이에 위치하는 문자를 커스텀 구분자로 사용한다. 예를 들어 “//;\n1;2;3”과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다.
- 문자열 계산기에 숫자 이외의 값 또는 음수를 전달하는 경우 RuntimeException 예외를 throw한다.
- 메소드가 너무 많은 일을 하지 않도록 분리하기 위해 노력해 본다.
- 초간단 자동차 경주 게임을 구현한다.
- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다.
- 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다.
실행 결과
위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다.
자동차 대수는 몇 대 인가요?
3
시도할 회수는 몇 회 인가요?
5
실행 결과
-
-
-
--
-
--
---
--
---
----
---
----
----
----
------ 주어진 횟수는 0 이상이어야 한다.
- 사용자가 입력한 자동차는 1대 이상이어야 한다.
- 랜덤으로 생성한 값의 범위는 0~9이어야 한다.
- 자동차의 초기 상태은 0이어야 한다.
- 자동차의 현재 상태는 주어진 횟수값을 넘을 수 없다.
- 자동차는 조건에 맞는다면 전진해야한다. ( 현재 조건: 랜덤값이 4 이상)
- 자동차는 조건에 맞지 않는다면 전진하지 않는다.
- 핵심 로직 구현 코드와 UI 담당 로직 구분
- InputView, ResultView와 같은 클래스로 추가해 분리
- 자동차의 최종 상태는 주어진 횟수 값을 넘지 않는다.
- 각 자동차에 이름을 부여할 수 있다.
- 자동차 이름은 5자를 초과할 수 없다.
- 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
- 자동차 이름은 쉼표(,)를 기준으로 구분한다.
- 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한명 이상일 수 있다.
실행 결과 위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다.
경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분).
pobi,crong,honux
시도할 회수는 몇회인가요?
5
실행 결과
pobi : -
crong : -
honux : -
pobi : --
crong : -
honux : --
pobi : ---
crong : --
honux : ---
pobi : ----
crong : ---
honux : ----
pobi : -----
crong : ----
honux : -----
pobi : -----
crong : ----
honux : -----
pobi, honux가 최종 우승했습니다.
- 각 자동차에 이름을 부여할 수 있다.
- 자동차 이름은 쉼표를 기준으로 구분한다.
- 쉼표로 구분되어 사용자가 입력한 이름의 숫자 만큼 자동차가 생성된다.
- 생성된 자동차의 수는 1개 이상이다.
- 자동차 이름은 null이거나 빈 값일 수 없다.
- 자동차 이름은 5자를 초과할 수 없다.
- 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
- 자동차 경주 게임을 완료한 뒤 누가 우승했는지 알려준다. 우승자는 한명 이상일 수 있다.
- 핵심 비지니스 로직을 가지는 객체를 domain 패키지, UI 관련한 객체를 view 패키지에 구현한다.
- MVC 패턴 기반으로 리팩토링해 view 패키지의 객체가 domain 패키지 객체에 의존할 수 있지만, domain 패키지의 객체는 view 패키지 객체에 의존하지 않도록 구현한다.
- 생성자 오버로딩 및 this 활용해본다.
- getter 대신 메시지를 보내본다.