[우테코] 프리코스 1주차 미션 - 숫자야구

cj·2021년 12월 11일
0

우테코

목록 보기
1/5

프리코스란?

우테코 모집과정에 있는 프리코스로 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스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료

💻 프로그래밍 실행 결과 예시

숫자를 입력해주세요 : 123
1볼 1스트라이크
숫자를 입력해주세요 : 145
1볼 
숫자를 입력해주세요 : 671
2볼 
숫자를 입력해주세요 : 216
1스트라이크 
숫자를 입력해주세요 : 713
3스트라이크 
3개의 숫자를 모두 맞히셨습니다! 게임 종료
게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.
1
숫자를 입력해주세요 : 123
1볼
… 

기능 목록(내가 작성한)

  • 랜덤 숫자 생성하기

    • camp.nextstep.edu.missionutils.Randoms pickNumberInRange() 사용
  • 사용자에게 숫자 입력받기

    • camp.nextstep.edu.missionutils.Console readLine() 사용
  • 랜덤 숫자와 사용자 숫자 비교하기

  • 입력 문구 및 결과 출력 및 다시하기 문구 출력하기

    • 숫자를 입력해주세요 : 123
    • 1볼 1스트라이크 / 3스트라이크 3개의 숫자를 모두 맞히셨습니다! 게임종료
    • 게임을 새로 시작하려면 1, 종료하려면 2 를 입력하세요!
  • 게임 끝난 경우 재시작/종료하기

    • 재시작 : 1, 종료 : 2
  • 사용자가 잘못입력했을 경우 예외처리하기

    • 숫자 중복되었을 경우
    • 3자리가 아닌 경우
    • 숫자가 아닌 경우

아쉬운 점 & 궁금한 점

  • 여러 클래스에서 자주 사용되는 상수는 어떻게 처리해야할지 고민!
  • 한번 사용한 상수도 따로 빼줘야 하는가?
  • 변수명에 대한 컨벤션
  • 랜덤숫자와 유저숫자에 비슷한 기능들이 중복 -> 상속으로 하는 것이 좋은 것인지
  • 클래스들이 단일 책임을 갖는 지, 함수들은 한가지 역할만 하였는지
  • 생성자에는 어떤 것들이 들어가는 것이 좋은지 -> 초기화하는 기능만 삽입
  • 반복문 분기 처리는 어떻게 하는 것이 좋은지 -> boolean 변수로 탈출하게 함

알게된 것

  1. JDK 8버전으로 환경설정을 세팅하고 시작!
  2. 중복되어 사용되는 상수에 대해 어떻게 처리하는지
    • util/constant class를 만들어서 상수들을 따로 모아 분리시킴
    • 에러 표현들은 enum으로 활용가능함
  3. 함수가 최대한 하나의 기능만 하게끔 노력
  4. 클린코드를 적용하려고 노력
    • 변수명에 대한 컨벤션이 있는지 찾아보고 여러 pr을 뒤져보면서 참고 & 클린코드 책 참고

후기

오랜만에 이런 작은 토이 프로젝트를 진행해서 재밌었다.
한번 풀어본 문제여서 쉽게 금방할 줄 알았는데 어떻게 해야할지 막막했다.
다시 처음으로 돌아간 기분...
천천히 조금씩 하다보니 미션을 완료할 수 있었고 하면서 궁금증들이 생겨났고 아직 많이 부족하다고 느꼈다.
불안한 마음에 여러 pr을 뒤적뒤적하면서 봤는데 잘하는 사람들이 너무 많다... 열심히 성장해보자!
알게된 것들과 잘하는 사람들의 코드를 보며 흡수하면서 다음 미션을 진행해야겠다!

profile
기록 블로그

0개의 댓글