프리코스란?
우테코 모집과정에 있는 프리코스로 3주간 3개의 미션을 진행한다.
의미는 서로 같이할 수 있는지 탐색할 수 있는 시간인지 확인하는 기간이다.
그리고 좋은 개발자로 성장하는 것을 목표로 하면서 성장해 나가는 과정이다.
3개의 미션을 모두 구현하고 기한 내에 제출해야 최종 코딩테스트를 볼 수 있다!
숫자 야구 게임
🚀 기능 요구사항
기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다.
- 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다.
- 예) 상대방(컴퓨터)의 수가 425일 때
- 123을 제시한 경우 : 1스트라이크
- 456을 제시한 경우 : 1볼 1스트라이크
- 789를 제시한 경우 : 낫싱
- 위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다.
- 이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다.
- 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다.
- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다.
- 아래의 프로그래밍 실행 결과 예시와 동일하게 입력과 출력이 이루어져야 한다.
✍🏻 입출력 요구사항
⌨️ 입력
- 3자리의 수
- 게임이 끝난 경우 재시작/종료를 구분하는 1과 2 중 하나의 수
🖥 출력
- 입력한 수에 대한 결과를 볼, 스트라이크 개수로 표시
1볼 1스트라이크
낫싱
3스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료
💻 프로그래밍 실행 결과 예시
숫자를 입력해주세요 : 123
1볼 1스트라이크
숫자를 입력해주세요 : 145
1볼
숫자를 입력해주세요 : 671
2볼
숫자를 입력해주세요 : 216
1스트라이크
숫자를 입력해주세요 : 713
3스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료
게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.
1
숫자를 입력해주세요 : 123
1볼
…
기능 목록(내가 작성한)
아쉬운 점 & 궁금한 점
- 여러 클래스에서 자주 사용되는 상수는 어떻게 처리해야할지 고민!
- 한번 사용한 상수도 따로 빼줘야 하는가?
- 변수명에 대한 컨벤션
- 랜덤숫자와 유저숫자에 비슷한 기능들이 중복 -> 상속으로 하는 것이 좋은 것인지
- 클래스들이 단일 책임을 갖는 지, 함수들은 한가지 역할만 하였는지
- 생성자에는 어떤 것들이 들어가는 것이 좋은지 -> 초기화하는 기능만 삽입
- 반복문 분기 처리는 어떻게 하는 것이 좋은지 -> boolean 변수로 탈출하게 함
알게된 것
- JDK 8버전으로 환경설정을 세팅하고 시작!
- 중복되어 사용되는 상수에 대해 어떻게 처리하는지
- util/constant class를 만들어서 상수들을 따로 모아 분리시킴
- 에러 표현들은 enum으로 활용가능함
- 함수가 최대한 하나의 기능만 하게끔 노력
- 클린코드를 적용하려고 노력
- 변수명에 대한 컨벤션이 있는지 찾아보고 여러 pr을 뒤져보면서 참고 & 클린코드 책 참고
후기
오랜만에 이런 작은 토이 프로젝트를 진행해서 재밌었다.
한번 풀어본 문제여서 쉽게 금방할 줄 알았는데 어떻게 해야할지 막막했다.
다시 처음으로 돌아간 기분...
천천히 조금씩 하다보니 미션을 완료할 수 있었고 하면서 궁금증들이 생겨났고 아직 많이 부족하다고 느꼈다.
불안한 마음에 여러 pr을 뒤적뒤적하면서 봤는데 잘하는 사람들이 너무 많다... 열심히 성장해보자!
알게된 것들과 잘하는 사람들의 코드를 보며 흡수하면서 다음 미션을 진행해야겠다!