숫자 야구 게임 TDD Kata

이 Repository는 TDD를 연습하기 위한 Kata를 소개합니다.

문제 정의

4자리 숫자를 입력받는 숫자 야구 게임을 작성하세요.

  • 숫자 야구 게임의 도전 가능 횟수는 총 9회입니다.

  • 숫자 야구 게임이 시작되면 정답을 생성해야 합니다.

    • 숫자 야구 게임의 정답은 랜덤한 4자리 숫자입니다.
    • 각 자리 숫자는 1-9로 생성될 수 있으며, 0은 사용되지 않습니다.
    • 각 자리의 숫자는 중복되어서는 안되며 모두 다른 숫자여야 합니다.
  • 숫자 야구 게임은 콘솔을 통해 사용자로부터 4자리 숫자를 입력받아 정답과 비교합니다.

    • 입력받은 숫자가 존재하며 자릿수까지 일치하면 Strike입니다.
    • 입력받은 숫자가 존재하지만 자릿수는 다르다면 Ball입니다.
    • 입력받은 숫자가 존재하지 않는다면 Out입니다.
  • 1-9가 아닌 숫자가 입력되거나, 문자가 입력되거나, 중복된 문자가 입력되거나, 입력받은 문자열이 4자리가 아니면 오류를 출력해야 합니다.

    • 오류가 출력되었을 때는 남은 횟수는 줄어들지 않습니다.
  • 출력 시에 Strike, Ball, Out. 순으로 출력하며, 아래와 같은 입출력 형식을 준수합니다.

# 정답이 2534라면...
NumberBaseballGame> 4자리 숫자를 입력하세요 (남은 횟수: 9) $ 1234
2 Strike, 1 Ball, 1 Out.

NumberBaseballGame> 4자리 숫자를 입력하세요 (남은 횟수: 8) $ 5678
1 Ball, 3 Out.

NumberBaseballGame> 4자리 숫자를 입력하세요 (남은 횟수: 7) $ 8934
2 Strike, 2 Out.

NumberBaseballGame> 4자리 숫자를 입력하세요 (남은 횟수: 6) $ 5243
4 Ball.

NumberBaseballGame> 4자리 숫자를 입력하세요 (남은 횟수: 5) $ 5678
1 Ball, 3 Out.

# 잘못된 입력
NumberBaseballGame> 4자리 숫자를 입력하세요 (남은 횟수: 4) $ ABCD
Invalid input!!!

# 정답을 맞췄을 때
NumberBaseballGame> 4자리 숫자를 입력하세요 (남은 횟수: 2) $ 2534
Correct!!! You win!!!

# 만약에 남은 횟수가 0이 되면
NumberBaseballGame> 4자리 숫자를 입력하세요 (남은 횟수: 1) $ 9876
Game Over!!! You lose!!!

조건

다음 클래스들을 분리해서 만들어봅니다.

  • 랜덤한 정답을 생성하는 클래스
  • 콘솔 입력을 받는 클래스
  • 사용자 입력을 정답과 비교하여 판정하는 클래스
  • 결과를 출력하는 클래스