[우테코] 우아한테크코스 모바일 안드로이드 6기 - 2주차 프리코스 (자동차 경주)
[GitHub] AgileCatch - 레파지토리 바로가기 Click!
💡과제 진행 소감
1주차 피드백 주신 내용들을 완벽히 따를 수 있도록 피드백 내용에 초점을 맞춰 과제를 진행 하였습니다. 항상 코드를 작성할때 구조에 신경을 쓰고 가독성 있는 코드를 작성하는 것에만 초점이 맞춰져 있었는데 이번주 과제를 진행하면서 알게된 점은, 코틀린에서 제공하는 API가 따로 있었고 많은 주석은 오히려 가독성을 떨어트린다, 였습니다.
그래서 함수이름, 메서드 이름을 고려하여 어떤 동작을 하는지 알아보기 쉽도록 네이밍을 하고,한 함수가 한가지 동작만 할 수 있도록 세세히 분리 해야한다는 점을 깨닳았습니다!
또한 테스트 코드를 사용하여 인풋 받는 기능들을 테스트 코드를 통해 점검하니 , 부족한 예외처리 들을 보충할 수 있게 되었습니다.
미션 뿐만 아니라 이번 2주차 기간에는 다른 사람들과의 코드 리뷰로 인해 내 코드에서 부족한 부분이 무엇인지, 배우고 적용해 보는 시간을 가져 한층 성장한 것 같은 느낌이 들었습니다 . 남은 프리코스기간동안에도 이러한 배울점들을 정리하고 기록하며 제 것 으로 만들 수있도록 노력하겠습니다 감사합니다!
🚗 구현할 기능 목록
- 자동차 이름 입력 받기
- 사용자로부터 자동차 이름을 입력받는 기능-> “경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)”
- 쉼표(,)를 기준으로 구분된 이름들을 받기
- 각 자동차 이름은 5자 이하로 제한
- 예를 들어, “pobi,woni,jun”과 같은 형식의 입력을 처리
- 시도할 횟수 입력 받기
- 사용자로부터 시도할 횟수를 입력받는 기능 -> “시도할 횟수는 몇 회인가요?”
- 정수값을 입력받기
- 예를 들어, “5”와 같은 형식의 입력
- 각 차량의 이동 거리 계산하기
- 0에서 9까지의 무작위 값을 생성하여, 4 이상일 경우 전진으로 간주하기
- 이동 거리를 계산하여 반환
- 각 차량의 이동 결과 출력하기
- 각 자동차의 이름과 이동 결과를 출력하기
- 이동 결과는 “-“와 같은 기호로 나타내기
실행 결과
pobi : -
woni :
jun : -
- 각 차량의 이동 결과를 저장하고 우승자 결정하기
- 각 차량의 이동 결과를 저장하여 우승자를 결정
- 가장 멀리 간 자동차(들)이 우승
- 최종 우승자 출력하기
- 우승한 자동차(들)의 이름을 출력
최종 우승자 : pobi, jun
- 예외 처리하기
- 잘못된 자동차 이름 입력 시 예외 처리
- 잘못된 시도 횟수 입력 시 예외 처리
- test 돌려보고 수정하기
- TestCode 작성하기
- 추가된 요구사항 다시한번 확인하기 (기능,프로그래밍,과제)
- Code Refactoring
- 아키텍쳐 패턴을 적용하여 코드 구조 개선
- String파일 따로 관리하기
- 하나의 함수가 하나의 기능만 하도록 분리
- 클래스가 어떤기능을 하는지 설명을 추가
- 각 함수가 어떤기능을 하는 지 설명을 추가
👩🏻💻 아키첵터 “MVC” 적용
model :
RacingGameController는 게임 시작부터 종료까지의 흐름을 관리하며 결과를 출력합니다.
startGame 함수는 게임을 시작하고 진행하며, getWinners 함수는 최종 우승자를 결정합니다.
view :
ConsoleView는 사용자로부터 자동차 이름과 시도 횟수를 입력 받고,
게임 진행 상황 및 최종 결과를 콘솔에 출력하는 역할을 합니다.
Controller :
RacingGameController는 게임 진행과 결과 처리를 중계하며 모델과 뷰 간의 상호작용을 관리합니다.
startGame 함수는 게임을 시작하고 진행하며, 라운드마다 게임 결과를 출력하고, 마지막에 최종 우승자를 표시합니다.
getWinners 함수는 각 자동차의 결과를 받아 가장 멀리 이동한 자동차들을 찾아내며, 여러 대의 자동차가 동일한 거리를 이동한 경우 모두를 반환합니다.
🫱🏻🫲🏼 커밋 메세지 컨벤션
Tag | Description |
---|---|
[New] : | First commit |
[Feat] : | 새로운 기능을 추가 |
[Fix] : | 버그 수정 |
[Design] : | CSS 등 사용자 UI 디자인 변경 |
[Comment] : | 문서 수정, 필요한 주석 추가 및 변경 |
[Test] : | 테스트 코드, 리팩토링 테스트 코드 추가 |
[Refactor] : | 코드 리팩토링 |
[Rename] : | 파일 또는 폴더 명을 수정하거나 옮기는 작업만인 경우 |
[Docs] : | 문서를 추가하고 READEME.md 를 작성한 경우 |
📢 1주차 공동 피드백 적용사항
💡 새롭게 알게된 사항은 밑줄 처리 하였습니다!
- 요구사항을 정확히 준수한다.
- 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항의 항목 확인
- 커밋 메시지를 의미 있게 작성한다
- 작업 내용이 잘 드러나도록 작성
- git을 통해 관리할 자원에 대해서도 고려
- Pull Request를 보내기 전 브랜치를 확인
- PR을 한 번 작성했다면 닫지 말고 추가 커밋
- **이름을 통해 의도를 드러낸다**
- 작업 내용이 잘 드러나도록 작성
- **축약하지 않는다**
- **공백도 코딩 컨벤션이다**
- **공백 라인을 의미 있게 사용한다**
- space와 tab을 혼용하지 않는다
- 의미 없는 주석을 달지 않는다
- IDE의 코드 자동 정렬 기능을 활용한다
- **Kotlin에서 제공하는 API를 적극 활용한다**
- Kotlin Collection 자료구조(List, Set, Map 등)를 사용하면 데이터를 조작할 때 다양한 API를 사용할 수 있다.
- 배열 대신 Kotlin Collection을 사용한다
🗣️ 추가 요구사항 적용사항
- indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.
- 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
- 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다.
- 함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게 만들어라.
- MVC와 Exception을 따로 분리
- JUnit 5와 AssertJ를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다.
- 테스트 도구 사용하여 코드 추가후 테스트 완료.