이 문서는 숫자 야구 게임의 핵심 로직과 상태 패턴(State Pattern)을 이용한 흐름 제어 설계를 포함합니다.
이번 과제에서 최종적으로 구현할 항목은 아래와 같습니다.
- 1~9 사이의 서로 다른 3자리 컴퓨터 숫자 생성
- 사용자 숫자 입력 처리 및 입력값 검증(길이, 숫자 여부, 범위, 중복)
- 잘못된 입력 시
[ERROR]메시지 출력 후 재입력 - 스트라이크/볼/낫싱 계산과 결과 출력
- 3스트라이크 달성 시 게임 종료 메시지 출력
- 게임 종료 후 재시작(1) / 종료(2) 분기 처리
- 상태 패턴(
ProgressState,GameOverState,EndState) 기반 흐름 제어 - 도메인 로직 단위 테스트(
BaseballNumber,NumberGenerator,GameResult)
사용자 또는 컴퓨터의 숫자를 관리하는 객체입니다.
- 검증: 1~9 사이의 서로 다른 3자리 숫자인지 검증합니다.
- 비교: 상대방의
BaseballNumbers와 비교하여 스트라이크와 볼의 개수를 계산합니다.
계산된 스트라이크/볼 결과를 처리하는 객체입니다.
- 결과 저장: 계산된 스트라이크와 볼의 개수를 보관합니다.
- 메시지 생성: 결과에 따른 출력 메시지(예:
1볼 2스트라이크,낫싱)를 생성합니다. - 판단: 3 스트라이크인지 여부를 확인하여 게임 종료 조건을 체크합니다.
전체적인 게임 인스턴스와 흐름을 관리합니다.
- 상태 관리: 현재의
GameState를 유지합니다. - 게임 루프: 현재 상태가 종료 상태(
EndState)가 될 때까지 실행을 반복합니다. - 유연성: 상태 패턴을 통해 게임 종료 후 새로운 게임을 시작하거나 완전히 종료하는 로직을 매끄럽게 연결합니다.
상태 패턴을 활용하여 각 상황에 맞는 로직을 캡슐화하고 흐름을 제어합니다.
| 클래스명 | 역할 및 주요 기능 | 다음 상태 전이 (Next State) |
|---|---|---|
| ProgressState | - "숫자를 입력해주세요" 프롬프트 출력 - 사용자 입력을 받아 BaseballNumbers와 비교 후 결과 출력 |
- 정답이 아니면: this (유지)- 정답이면: GameOverState 반환 |
| GameOverState | - "3개의 숫자를 모두 맞히셨습니다! 게임 끝" 및 재시작 안내 출력 - 사용자 입력(1: 재시작, 2: 종료) 대기 |
- 1 입력 시: 새로운 정답을 가진 ProgressState- 2 입력 시: EndState |
| EndState | - 게임 루프를 종료해야 함을 Game에게 알림 |
- 없음 (시스템 종료) |
- 초기화:
Game객체가 생성될 때 컴퓨터의 숫자를 생성하고ProgressState로 시작합니다. - 진행: 사용자가 정답을 맞힐 때까지
ProgressState내에서 입력을 반복합니다. - 완료: 3 스트라이크 달성 시
GameOverState로 전환되어 축하 메시지를 출력합니다. - 분기:
- 사용자가
1을 입력하면 새로운 숫자를 생성하여 다시ProgressState로 돌아갑니다. - 사용자가
2를 입력하면EndState로 전환되어 루프가 종료됩니다.
- 사용자가