❐ Description
과제 기한 | 2024.10.22(화) 15:00 ~ 2024.10.28(월) 00:00 |
과제 진행 Branch | https://github.com/Gilbert9172/java-racingcar-7 |
과제 제출 PR 링크 | https://github.com/woowacourse-precourse/java-racingcar-7/pull/53 |
Git convention | https://gist.github.com/stephenparish/9941e89d80e2bc58a153#file-commit-md |
❐ Requirements
1. User
- 경주할 자동차 이름을 입력할 수 있다.
- 1개 이상
- 구분은 쉼표(,)로 한다.
- 이름은 5자 이하만 입력할 수 있다.
- 이동 횟수를 입력할 수 있다.
2. System
- 자동차에는 이름을 부여할 수 있다.
- 이름의 길이는 5자 이하
- 자동차는 두 가지 상태를 가진다.
- 멈춤 / 전진
- 무작위 값을 뽑을 수 있다.
- 0 ~ 9 사이
- 4이상인 경우 자동차는 전진할 수 있다.
- 자동차 마다 매번 할당한다.
- 실행 결과를 매번 출력해야 한다.
- 경주가 끝나면 우승자를 알려줘야 한다.
- 우승자는 1명 이상일 수 있다.
- 여러명일 경우 쉼표(,)를 이용하여 구분한다.
- 사용자가 잘못된 값을 입력할 경우 애플리케이션은 종료되어야 한다.
- 이때 IllegalArgumentException이 발생한다.
❐ Exceptions
1. 자동차 이름 입력
- CarNameNullValidator
- 자동차 이름을 하나도 입력하지 않은 경우
- 쉼표가 연속으로 되어 있는 경우
- CarCountValidator
- 자동차 이름을 1개 이하로 입력한 경우
- CarNameLengthValidator
- 자동차 이름이 5글자를 초과하는 경우
2. 시도할 횟 수 입력
- LapCountNullValidator
- 아무것도 입력하지 않은 경우
- LapRegexValidator
- 소수점있는 값을 입력하는 경우
- 숫자 이외의 문자가 들어가는 경우
- 문자열이 들어오는 경우
- NumberFormatValidator
- 0이하의 값을 입력하는 경우
❐ 혼자 정한 정책
- 우승자가 없는 경우 : "우승자가 없습니다." 출력하기
- 문자열 전처리
- 모든 공백 제거
- 가장 앞에 있는 0 제거 (Ex. 00100 ‣ 100)
❐ Domain Modeling
1. Car
Field | Type |
name | String |
myProgress | MyProgress |
2. Cars
Field | Type |
cars | List<Car> |
3. MovementCondition
Field | Type |
distance | Distance |
predicate | BiPredicate<Speed,Speed> |
4. MyProgress
Field | Type |
remainLap | Lap |
position | Position |
5. DashBoard
Field | Type |
cars | Cars |
lapCharts | LapCharts |
6. LapChart
Field | Type |
summary | String |
7. LapCharts
Field | Type |
lapCharts | List<LapChart> |
8. Distance
Field | Type |
value | long |
9. Position
Field | Type |
value | String |
10. Lap
Field | Type |
value | long |
11. Race
Field | Type |
remainingCount | Lap |
12. Speed
Field | Type |
value | long |
❐ Main logic
- 주어진 Lap 수 만큼 while문 순회
- 각 자동차 마다 랜덤 값을 부여
- 랜덤 값이 4 이상인 경우 앞으로 한칸 이동
- 랜덤 값이 4 미만인 경우 제자리
- 랜덤 값을 사용해서 이동 방향(FOWARD/STOP) 결정
- 함수형 인터페이스 BiPredicate를 사용
- 이 로직은 MovementCondition에 속함
4. cars에서 car를 이동
5. Lap을 한 바 퀴 돌 때마다 DashBoard에 LapChart 기록
while (race 진행동안) {
// 차들 이동;
// 매 lap 결과를 DashBoard에 기록
// 다름 lap으로 이동
}
// DashBorad 반환
❐ Domain & BusinessLogic
Github ReadMe에 작성. (링크)
'우테코 7기 > 2주차' 카테고리의 다른 글
일급 객체 ,일급 컬렉션, Value Object (0) | 2024.10.30 |
---|---|
[Refactoring] 제어할 수 있는 코드를 작성하자! (0) | 2024.10.27 |
[Refactoring] 패키지가 무엇을 제공하는지 전달하자! (0) | 2024.10.27 |
2주차 회고 (0) | 2024.10.27 |