[우테코] 우아한테크코스 모바일 안드로이드 6기 - 1주차 프리코스 (숫자 야구 게임)
[GitHub] AgileCatch - 레파지토리 바로가기 Click!
👩🏻💻 구현할 기능 목록
- 기본세팅, 게임 시작 문구 출력
- “숫자 야구 게임을 시작합니다.” 출력 되는지 test 하기
- 3자리 서로 다른 수 랜덤 생성
- 컴퓨터가 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 랜덤으로 선택
- 랜덤으로 중복된 숫자가 없도록 예외처리하기
- 사용자 입력 받기
- 사용자로부터 3자리의 서로 다른 수 입력 받기
- 입력 값 검증
- 사용자 입력값이 중복된 숫자를 포함하고 있는지 확인
- 사용자 입력값이 null 또는 3자리 숫자가 아닌 경우 확인
- 아닐 경우
IllegalArgumentException
발생 및 애플리케이션 종료
- 스트라이크, 볼, 낫싱 계산
- 사용자가 입력한 숫자와 컴퓨터가 선택한 숫자 비교하여 결과 계산
- 같은 수가 같은 자리에 있으면 스트라이크
- 다른 자리에 있으면 볼
- 같은 수가 전혀 없으면 낫싱
- 결과를 볼, 스트라이크 개수로 출력 (예: “1볼 1스트라이크”)
- 3스트라이크인 경우 “3개의 숫자를 모두 맞히셨습니다! 게임 종료” 출력
- 게임 재시작 또는 종료
- 게임이 종료된 후, 사용자에게 게임을 새로 시작할지 종료할지 입력 받기
- 1을 입력하면 게임 재시작, 2를 입력하면 게임 종료
- test 돌려보고 수정하기
- 3스트라이크일 경우 “3스트라이크” 문구 출력되도록 수정
- Code Refactoring
- MVC 패턴을 적용하여 코드 구조 개선
- 하나의 함수가 하나의 기능만 하도록 분리
- 클래스가 어떤기능을 하는지 설명을 추가
- 각 함수가 어떤기능을 하는 지 설명을 추가
👩🏻💻 아키첵터 “MVC” 적용
model :
GameRulesManager 는 게임의 규칙을 관리합니다.
컴퓨터가 선택한 숫자를 생성하고, 사용자가 제시한 숫자와 비교하여 결과를 반환합니다.
결과에 따라 스트라이크, 볼, 낫싱을 알려주며, 3스트라이크일 때 게임의 종료 여부를 알려줍니다.
view :
GameView 클래스는 게임의 화면 표시와 관련된 역할을 합니다.
게임 시작 메시지를 출력하고, 사용자로부터 숫자를 입력 받습니다. 그리고 게임 결과를 표시하며, 게임이 종료될 때 종료 메시지를 출력합니다.
*/
Controller :
GameController 는 게임의 진행을 관리하며, 사용자 입력과 모델 간의 상호작용을 중계합니다.
게임 시작 메시지를 출력하고, 게임 라운드를 반복하여 진행하며, 3스트라이크를 달성하면 게임 재시작 여부를 물어봅니다.
게임이 종료되면 종료 메시지를 출력합니다.
🫱🏻🫲🏼 커밋 메세지 컨벤션
Tag | Description |
---|---|
[new] : | First commit |
[feat] : | 새로운 기능을 추가 |
[fix] : | 버그 수정 |
[design] : | CSS 등 사용자 UI 디자인 변경 |
[comment] : | 문서 수정, 필요한 주석 추가 및 변경 |
[test] : | 테스트 코드, 리팩토링 테스트 코드 추가 |
[refactor] : | 코드 리팩토링 |
[rename] : | 파일 또는 폴더 명을 수정하거나 옮기는 작업만인 경우 |
[docs] : | 문서를 추가하고 READEME.md 를 작성한 경우 |
- 한 커밋에는 한 가지 문제만!
- 제목은 영문 기준 50자 이내로 할 것
- 제목과 본문을 빈행으로 분리
- 커밋 유형 이후 제목과 본문은 한글로 작성하여 내용이 잘 전달될 수 있도록 할 것
- 본문에는 변경한 내용과 이유 설명 (어떻게보다는 무엇 & 왜를 설명)
- 자신의 코드가 직관적으로 바로 파악할 수 있다고 생각하지 말자
- 여러가지 항목이 있다면 글머리 기호를 통해 가독성 높이기
⚙️ 코드 컨벤션
- 문자열을 처리할 때는 쌍따옴표를 사용하기
- 함수명, 변수명은 카멜케이스로 작성하기 (camelCase)
- 가독성을 위해 한 줄에 하나의 문장만 작성하기.
- 코드 구현 완료 후 정렬하기 (ctrl + Alt + L), (command + option + L)
- 생성자 함수명의 맨 앞글자는 대문자로 하기
💬 네이밍 컨벤션
클래스 구현 후 주석 달아주기
-> 클래스 상단 /* * 작성자 이름 * MyPage 데이터 관리를 위한 ViewModel * 비즈니스 로직 캡슐화 * UI에 사용될 상태를 처리, UI Layer에 상채를 알림 */
Class 이름은PascalCase 로 작성할 수 있도록 하기
- 단어를 축약해 사용하지 않기 (팀 내에서 축약하기로 약속한 경우는 제외)
- Class는 파스칼 case / Function, var, val 은 카멜케이스로 네이밍