- 숫자 야구 게임 요구사항을 파악한다.
- 요구사항에 대한 구현을 완료한 후 자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR)를 통해 과제를 제출한다.
-
기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다.
-
같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다.
- (예1) 상대방(컴퓨터)의 수 : 123, 사용자입력 : 456 인 경우 낫싱 - (예2) 상대방(컴퓨터)의 수 : 123, 사용자입력 : 159 인 경우 1스트라이크 - (예3) 상대방(컴퓨터)의 수 : 123, 사용자입력 : 321 인 경우 1스트라이크 2볼 - (예4) 상대방(컴퓨터)의 수 : 123, 사용자입력 : 123 인 경우 3스트라이크 -
위 숫자 야구게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다.
-
이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다.
-
게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다.
-
자바 코드 컨벤션을 지키면서 프로그래밍한다.
-
indent(인덴트, 들여쓰기) depth를 2가 넘지 않도록 구현한다. 1까지만 허용한다.
- 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
- 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
-
자바 8에 추가된 stream api를 사용하지 않고 구현해야 한다. 단, 람다는 사용 가능하다.
-
else 예약어를 쓰지 않는다.
- 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
- else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.
-
함수(또는 메소드)의 길이가 10라인을 넘어가지 않도록 구현한다.
- 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다.
- 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in, Scanner) 로직은 제외
- 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 구분한다.
- JUnit5와 AssertJ 사용법에 익숙하지 않은 개발자는 첨부한 "학습테스트를 통해 JUnit 학습하기.pdf" 문서를 참고해 사용법을 익힌 후 JUnit5 기반 단위 테스트를 구현한다.
- 미션은 https://github.com/next-step/java-baseball-precourse 저장소를 fork/clone해 시작한다.
- 기능을 구현하기 전에 java-baseball/README.md 파일에 구현할 기능 목록을 정리해 추가한다.
- git의 commit 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가한다.
- AngularJS Commit Message Conventions 참고해 commit log를 남긴다.
- 과제 진행 및 제출 방법은 프리코스 과제 제출 문서를 참고한다.
- 2021년 4월 27일(화) 23시 59분까지 GitHub을 통한 미션 제출과 메일까지 완료해야 한다.
- 2021년 4월 27일(수) 00시 이후 추가 push도 허용하지 않는다.
- 2021년 4월 27일(수) 00시 이후 제출한 경우 미션을 제출하지 않은 것으로 한다.
- 타자 (컴퓨터)
- 1~9까지 랜덤한 수 3개(3자리)를 만들어낸다. (중복금지)
- 투수 (사용자)
- 3자리의 숫자를 만들어낸다. (사용자 입력)
- 사용자에게 입력받은 숫자의 유효성 검증을 한다.
- 유효한 3자리의 숫자를 입력할때까지 반복해서 입력을 받는다.
- 유효하지 않을때 재입력을 받을것인지 선택할 수 있도록 한다. (테스트용도)
- 심판 (입력값 비교 체크)
- 타자의 수와 투수의 수를 비교해서 결과를 산출해낸다.
- 야구 서비스
- 야구게임을 시작한다.
- 사용자가 입력한 3자리의 숫자가 맞을때까지 반복해서 입력을 받는다.
- 틀리면 판정 결과를 출력해준다. (포맷팅)
- 맞으면 재시작/종료 여부를 묻고 입력값에 따라 재시작/종료 처리한다.
- 야구 유틸
- 중복문자열을 제거한다.
- int형 리스트를 string형 리스트로 변환한다.
- 메세지를 출력한다.
- 입력받은 숫자가 유효한지 검증한다.
- 숫자 유무를 판별한다.
- 숫자 자리수가 맞는지 확인한다.
- 문자열을 숫자 리스트형으로 변환한다.
- 입력된 값이 범위내의 character로 이루어진 문자열인지 확인한다.
