- 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 등의 이름을 바꾸거나 이동하지 않는다.
camp.nextstep.edu.missionutils.Console.readLine()camp.nextstep.edu.missionutils.Randoms.pickNumberInRange(0, 9);
- 워크플로우: 일반적으로
인터페이스 - 테스트 - 구현순서로 진행한다. - 커밋 표준:
feat(인터페이스): implement (구현한 메서드). 이후 상세 정보 추가. - 상속 기준:
1. 동일한 역할,2. 부모 클래스 종속성. 이외에는 조합을 활용.
입력부터 출력까지
자료형의 변환으로 논리적 흐름을 표현한다.
필요하다면 임의의 자료형을 새롭게 정의할 수 있다.
String(CSV) + Integer(Iteration) -> List<Car{String, Integer}>
Car -> RacingCar implements Comparable<Car>
작업을 진행할 대상을 선택하고,
책임과 역할을 체크리스트로 나열한다.
- 이름 (불변; rule 기반 DTO로 주입)
- 자동차 이름의 입력
- 자동차 이름의 입력은 쉼표를 기준으로 구분
- 자동차 이름은 5자 이하 가능
- 추가로 자동차 이름은 사용자를 식별할 수 있는 id의 역할을 해야한다고 생각한다.
- 따라서, 자동차 이름은 서로 중복을 허용하지 않는다.
- 이를 위해, 자동차 이름은 영문 소문자의 조합으로 제한한다.
- 이동 거리 (가변)
- 외부에서 이름과 이동거리를 참조할 수 있어야 한다. (DTO)
이동 거리를 기준으로 비교 가능하도록implements Car, Comparable<RacingCar>RacingCar의int position필드를 불변으로 두고 VO처럼 활용한다면Comparable인터페이스를 구현해도 된다.- 그러나 현재 디자인 컨셉은 가변 상태를 허용하므로, identity/equality 평가의 관점에서
Comparable과Object인터페이스의 계약이 충돌한다. - 따라서, 해당 사항은 상태를 표현하는 VO 또는 객체 컨테이너 수준에서 다루는 것이 좋아보인다.
- 그래서
RacingCar.Status에서 처리함
- 그래서
-
제네릭 T 받아서 이동 거리 결정하는 전략 인터페이스- 현재 default 전략을 사용하기 때문에 관리 대상에서 제외
- 인터페이스 확장 어댑터 팩토리 내장
- n대의 자동차 (일급 컬렉션)
- 자동차의 전진과 정지
- 전진 조건
- 0에서 9 사이의 무작위 값을 구하고
- 그 값이 4 이상인 경우
- 자동차 전진 시 콜백을 통한 출력
- 전진하는 자동차의 출력 시 이름과 거리 출력
- 출력 형식을 보면 자동차는 입력 순서대로 출력되는 것 같다.
- 전진 조건
- 게임 완료 (rule DTO)
- 우승자를 알려준다
- 우승자는 한 명 이상일 수 있다.
- 우승자가 2명 이상일 경우 쉼표를 이용하여 구분한다.
잘못된 입력에는
IllegalArgumentException발생시키고 종료한다.
- 이름 입력에 불필요한 쉼표가 존재할 때
- 자동차 이름에 영소문자 외에 다른 문자가 들어갔을 때
- 자동차 이름이 비어있을 때
- 자동차 이름이 중복될 때
- 반복 횟수가 양의 정수가 아닐 때