[우테코 프리코스] 자동차 경주 #2
Table of Contents
우테코 프리코스 2주차 #
자동차 경주 fork repository
1주차와 동일하게 내 레포지토리로 포크하고 클론해서 작업을 진행한다.
구현할 기능 목록 #
과제 요구 사항에서 기능 구현 전, docs/README.md
에 구현할 기능 목록을 정리할 것을 명시하고 있다.
# 미션 - 자동차 경주
## ✏️ 구현할 기능 목록
### `App.js`의 `play` 메서드를 통해 프로그램 시작
- [x] play 메서드 생성
### 자동차 경주 로직
- [x] 사용자 입력(자동차 이름)
- 자동차 입력 안내 문구 출력<br>
`경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)`
- 잘못된 값 입력 시 **throw문을 통해 예외 발생 및 애플리케이션 종료**<br>
- 쉼표를 기준으로 알파벳으로 구성 x
- 각 이름이 5자 초과인 경우
- [x] 사용자 입력(경주 시도 횟수)
- 시도 횟수 입력 안내 문구 출력<br>
`시도할 횟수는 몇 회인가요?`
- 잘못된 값 입력 시 **throw문을 통해 예외 발생 및 애플리케이션 종료**<br>
- 숫자 이외의 값
- [x] 경주 실행 결과 출력
- 경주 시도 횟수 만큼 반복문
- 컴퓨터 임의의 수 선택
- `Random API`를 이용하여 0-9 사이 값 선택
- 4 이상이면 자동차 전진
### 자동차 경주 게임 완료
- [x] 우승자 안내 문구 출력 `최종 우승자 : ${우승한 자동차}`
- 여러 명일 경우 쉼표(,)로 구분
### 게임 종료
- [x] 게임 종료 안내 문구 출력 `게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.`
- [x] 사용자 입력
- 잘못된 값 입력 시 **throw문을 통해 예외 발생 및 애플리케이션 종료**<br>
- 1, 2 이외의 값을 입력 받은 경우
- [x] 사용자 입력에 따라 게임 다시 시작 또는 완전히 종료
- 1을 입력받았을 경우: 게임 재시작
- [숫자 야구 게임 로직](#숫자-야구-게임-로직)부터 실행
- 2를 입력받았을 경우: 게임 완전히 종료
회고 #
예외 사항 #
이번에 어려웠던 점은 구현할 기능 목록을 할 때, 예외 사항을 고려하는 것이었다. 내가 너무 깊게 생각해서인지
자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
위와 같은 경우에 대해서, 발생할 수 있는 모든 예외 사항을 생각하려고 했다. 예를 들어, 알파벳만 가능한지 등등… 예외 사항을 어디까지 생각해야하는지 기준이 어려웠다.
💡 해결 방법
결과적으로는 스켈레톤 코드와 함께 제공되는 StringTest.js
파일을 참고함으로써 테스트 통과 기준만 최소 만족하도록 작성하였다.
Indent depth #
이번 추가 요구 사항 항목 中
indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.
예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
가 포함되어 있었기 때문에 이 부분을 신경써서 설계했다.
💡 해결 방법
나는 설계를 Car.js
, RacingGame.js
클래스들을 만들어서 각각 차와 경주 게임 객체를 생성하도록 코드를 구현하였다.
그리고 playRaceGame.js
파일에 필요한 함수들을 작성해서 경주 게임 객체를 매개 변수로 넘겨줌으로써 경주 게임 객체가 가지고 있는 constructor(차 객체들, 시도 횟수) 정보들을 알려주도록 하였다. 더 좋은 방법이 있을 것 같기도 하지만 우선 최선으로 이렇게 설계해보았다. (Do my best ㅎㅎ)
✔️ 최종 결과 💯
이번엔 테스트가 ApplicationTest.js
와 StringTest.js
로 2개였다.
결과는 모두 통과!!
👇🏻 아래는 PR 링크이다. 👇🏻
PR
pr링크를 제출하면 위와 같이 예제 테스트가 모두 통과하는 것을 확인할 수 있다.