2주차 미션이 시작되었다.
이번 미션은 자동차 경주로
구체적인 요구사안은 다음 링크에 정리되어 있다.
https://github.com/woowacourse-precourse/java-racingcar-6
이중 주의해야 할 점은 바로 기능 요구사항이다.
1. 기능 요구사항
- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
- 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
- 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- 전진하는 조건은 0에서 9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우이다.
- 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.
- 우승자가 여러 명일 경우 쉼표(,)를 이용하여 구분한다.
- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다.
추가된 요구사항
- indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.
- 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
- 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다.
- 3항 연산자를 쓰지 않는다.
- 함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게 만들어라.
- JUnit 5와 AssertJ를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다.
- 테스트 도구 사용법이 익숙하지 않다면 test/java/study를 참고하여 학습한 후 테스트를 구현한다.
2. 내가 생각한 2주차 미션의 포인트
포인트1. 메소드 분리
: depth를 2로 제한한 것에서 각 기능별 메소드 분리가 핵심이라는 생각이 들었다.
: 이러한 포인트는 미션 메일에도 나와있는 만큼 신경써야 할 사안이라 생각된다.
파생된 생각흐름
=> 예외처리를 할 때에도 적법성 검사를 함수로 분리하자
=> depth가 3개로 초과할 때 nested loop문을 함수로 분리하자
=> 기능 단위를 최소화하고 그것들을 결합하여 기능을 구현하자(jason 님이 강조한 OOP의 핵심)
포인트2. TDD
: 지난 자바 기초 강의에서 간단한 TDD 실습을 해서 조금 자신감이 생겼다.
: 각 함수별 test 코드 작성으로 구현 => Test 과정을 실현해볼 생각이다.
참고:
https://velog.io/@jkijki12/Java-TDD
포인트3. API 활용
: 지난 1주차 공통피드백에도 들어있던 내용이다.
: JAVA collection 및 API를 적극적으로 메소드에 적용해야 겠다는 생각이 들었고 이를 위해 api pdf를 받아 한번 학습해보았다.
참고:
https://hyunndyblog.tistory.com/32
3. 작성한 구현 기능 목록
## 프로그램 시퀀스
1) 자동차 이름 입력 : 사용자로부터 자동차 이름을 입력받는다.
- 자동차 이름은 쉼표로 구분되어 있다.
- 자동차 이름이 5자 이하인지 검사한다.
2) 횟수 입력 : 사용자로부터 턴 수를 입력받는다.
- 횟수는 1회 이상의 양수 숫자여야 한다.
3) 각 차수별 시행: 자동차별 전진 or 머무름
- 자동차 별로 0에서 9사이의 난수를 발생시킨다.
- 난수가 4이상일 경우 한칸 전진한다.
- 난수가 4미만일 경우 그대로 머문다.
4) 우승자 출력
- 단독 우승자의 경우 우승자의 이름을 출력한다.
- 복수 우승자의 경우 우승자들의 이름을 쉼표로 구분하여 출력한다.
## 예외상황
1) 자동차의 이름 입력
- 한개의 자동차 이름이 5자 이상일 때[1]
- 쉼표로 구분될 것[1]
- 중복된 자동차 이름이 있을 때[1]
- 빈 값 체크[1]
- 쉼표로 끝나는 경우[1]
2) 횟수 입력
- 입력된 횟수가 숫자가 아닐 때[1]
- 입력된 횟수가 양수가 아닐 때[1]
## 기능 구현 목록
1. 자동차 이름 입력 받기[1]
- 자동차 이름이 조건에 맞는지 확인하는 기능[1]
- 쉼표를 기준으로 자동차 이름 목록을 문자열 리스트로 저장[1]
2. 시도 회수 입력받기[1]
- 숫자가 정확히 입력되었는지 확인하는 기능[1]
3. 자동차
- 자동차 이름 생성하기[1]
- 자동차 이동거리 생성하기[1]
- 자동차 전진여부 함수 생성하기[1]
4. 자동차 목록
- 자동차 목록 생성하기[1]
- 자동차 목록에 자동차 추가하기[1]
- 턴마다 매턴 자동차 전진하는 함수[1]
- 매 턴의 결과 출력함수[1]
- 우승자 목록을 알려주는 함수[1]
5. 레이싱 게임
- 자동차 목록 생성
- 자동차 생성
- 입력된 턴수 만큼 반복
- 자동차 전진
- 턴별 실행결과 출력
- 우승자 목록 생성
- 우승자 목록 출력
'우테코' 카테고리의 다른 글
우테코 2주차 - [자동차 경주] : TDD 작성 (0) | 2023.11.01 |
---|---|
우테코 2주차 - [자동차 경주] : 기능 구현 (0) | 2023.11.01 |
우테코 2주차 - 1주차 공통 피드백 검토 (0) | 2023.11.01 |
우테코 2주차 - 숫자야구 피드백 강의 후기 (0) | 2023.11.01 |
우테코 2주차 - Git & GitHub 기능 강의 수강 (0) | 2023.10.31 |