Skip to content

Conversation

@suhyun113
Copy link

📝 프로젝트 개요

사용자가 입력한 자동차 이름과 시도 횟수를 기반으로, 라운드마다 전진 조건(무작위 값 ≥ 4)을 만족한 자동차만 이동시키고 차수별 결과와 최종 우승자를 출력하는 콘솔 게임이다.

  • 이름은 쉼표(,)로 구분하며 각 이름은 1~5자여야 한다.
  • 시도 횟수는 양의 정수여야 한다.
  • 매 라운드마다 Random.pickNumberInRange(0, 9)를 호출해 4 이상이면 1칸 전진한다.
  • 게임 종료 후 최댓값 위치의 자동차를 모두 우승자로 표시한다.

🌿 주요 구현 내용

  1. App 클래스 : 프로그램 진입점(run)으로 입력→파싱→검증→게임 실행을 오케스트레이션한다.
  2. Parser 유틸 :
  • splitNames(raw)로 자동차 이름 문자열을 쉼표 기준으로 분리하고 trim() 처리한다.
  • toInteger(raw)로 시도 횟수 문자열을 정수로 변환한다.
  1. InputValidator 유틸 :
  • validateNames(names)로 각 이름이 1~5자이며 빈 문자열/공백만 문자열이 아닌지 확인한다.
  • validateTryCount(value)로 양의 정수(≥1)인지 확인한다.
  1. 도메인(Car, Race) :
  • Car는 name, position을 가지며 move()로 1칸 전진한다.
  • Race는 자동차 배열과 RNG를 받아 tickOnce()에서 라운드 진행 후 {name, position}[] 스냅샷을 반환한다.
  1. 서비스(GameService) :
  • "실행 결과" 헤더 출력 → tryCount만큼 라운드를 반복하며 차수별 현황을 출력한다.
  • 최대 위치를 계산해 동점 포함 우승자 목록을 출력한다.
  1. 입출력 뷰(InputView/OutputView) :
  • Console.readLineAsync()로 입력을 받고, Console.print()로 라운드/우승자 포맷을 출력한다.

⚠️ 예외 처리 내용

  • 잘못된 자동차 이름(빈 값, 6자 이상, 공백만) → [ERROR] 유효하지 않은 자동차 이름이다.
  • 잘못된 시도 횟수(정수가 아님, 0 또는 음수) → [ERROR] 유효하지 않은 시도 횟수이다.
  • 에러 발생 시 [ERROR]로 시작하는 메시지와 함께 Error를 던지고 애플리케이션을 종료한다(process.exit() 미사용).

📷 테스트 결과

image

🔧 개선 및 회고

  • 3항 연산자를 사용하지 않고, depth를 줄이고자 함수를 분리하는 연습을 하면서 _parseNumberInput 등의 분리로 입력 처리 책임이 명확해졌다.
  • _는 관례상 내부용 표시이고, #은 진짜 비공개로 외부 접근이 불가능하는 것을 알게되었다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant