Skip to content

Latest commit

 

History

History
60 lines (41 loc) · 2.61 KB

File metadata and controls

60 lines (41 loc) · 2.61 KB

미션 - 숫자 야구

✅ 기능 구현 목록

게임 준비

  • 컴퓨터의 숫자를 랜덤하게 정한다.

게임 진행

  • 플레이어의 숫자를 입력받는다.

    • 숫자를 입력받는다.
    • 문자열 타입의 숫자를 리스트로 변환한다.
    • 입력값을 검증한다.
      • 입력된 문자열이 비어있지 않은지 검증한다.
      • 입력된 문자열의 길이가 3인지 검증한다.
      • 입력된 문자열이 정수인지 검증한다.
      • 입력된 문자열이 양의 정수인지 검증한다.
      • 입력된 정수들의 범위가 1부터 9인지 검증한다.
      • 입력된 정수들이 서로 다른 수인지 검증한다.
    • 입력값이 부적절한 경우, 예외를 반환한다.
  • 플레이어가 입력한 숫자와 컴퓨터의 숫자를 비교한다.

    • 플레이어가 입력한 각 숫자가 컴퓨터의 숫자에 있는지 확인한다.
      • 플레이어가 입력한 숫자와 위치를 비교한다.
      • 숫자 비교에 따라 힌트를 결정한다.
  • 결정된 힌트를 출력한다.

  • 플레이어가 숫자를 맞추지 못한 경우, 다시 게임 준비로 돌아가 숫자를 입력받는다.

  • 플레이어가 3개의 숫자를 모두 맞췄다면 게임을 다시 시작할 지, 종료할 지 결정한다.

    • "1"을 누르면 게임을 다시 시작, "2"를 누르면 게임을 종료한다.

🛠️ 리팩토링 목록

실행 로직 간소화 및 성능 향상

  • 숫자 비교에 따른 힌트 설정 로직을 간소화하고 성능을 향상시킨다.
  • for문을 stream 메소드를 사용하여 간소화한다.

일부 변수들의 상수 변환

  • Hint 클래스 관련 힌트 목록을 Enum으로 분리한다.
  • 입력값 검증 시의 검증 조건들을 Enum으로 분리한다.
  • 입력값 검증 시 발생하는 예외의 목록을 Enum으로 분리한다.
  • View 계층에서 출력하는 메시지의 목록을 Enum으로 분리한다.

getter 및 setter 제거

  • Player 클래스의 getter 및 setter를 제거하고 비즈니스 로직을 도메인 내에 구현한다.
    • Player 클래스의 setter를 제거하고 생성 시에만 필드 변수값을 정할 수 있도록 한다.
    • Player 클래스의 getter를 제거하고 비즈니스 로직을 도메인 내에 구현한다.

기타

  • ViewService의 기능을 InputView와 OutputView로 각각 분리한다.
  • NumberService와 InputView, OutputView에 싱글톤 패턴을 적용한다.