Jo-GyuHyeon / kotlin-racingcar

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2단계 미션 문자열 계산기

기능 요구 사항

사용자가 입력한 문자열 값에 따라 사칙 연산을 수행할 수 있는 계산기를 구현해야 한다.

문자열 계산기는 사칙 연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다. 즉, 수학에서는 곱셈, 나눗셈이 덧셈, 뺄셈 보다 먼저 계산해야 하지만 이를 무시한다.

예를 들어 "2 + 3 * 4 / 2"와 같은 문자열을 입력할 경우 2 + 3 * 4 / 2 실행 결과인 10을 출력해야 한다.

기능 목록

[Operator] 사칙 연산자 담당 클래스

  • Enum 클래스를 활용하여 사친연산 정의 및 연산 기호에 따른 계산
  • 펙토리 메서드 및 연산자 심볼 확인 기능을 위해 Map 구조를 사용

[Parser] 문자열 파싱 담당 클래스

  • 문자열에서 수식으로 사용 가능한지 유효성 검사
    • 빈문자열일 경우 예외
    • 수식 형식이 올바르지 않는 경유 예외 (사칙 연사 기호, (피)연산자 수 일치)
  • 문자열에서 수식으로 사용가능한 형태로 변환

[Calculator] 계산기 클래스

  • Parser 를 이용하여 문자열 수식에 대한 사칙연산 결과 제공

3단계 미션 자동차 경주

기능 요구 사항

  • 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
  • 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
  • 전진하는 조건은 0에서 9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우이다.
  • 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다.

프로그래밍 요구 사항

모든 로직에 단위 테스트를 구현한다.

  • 단, UI(System.out, System.in) 로직은 제외
  • 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 구분한다.
  • UI 로직을 InputView, ResultView 와 같은 클래스를 추가해 분리한다.

기능 목록

  • IO - UI 를 담당하는 패키지
  • Car - 자동차 도메인
  • Random - 전진 조건 제시 (랜덤)
  • Track - 자동차 경주장

4단계 미션 자동차 경주(우승자)

기능 요구 사항

  • 각 자동차에 이름을 부여할 수 있다. 자동차 이름은 5자를 초과할 수 없다.
  • 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
  • 자동차 이름은 쉼표(,)를 기준으로 구분한다.
  • 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.

기능 목록

  • Car - 자동차 이름 필드 추가 & 불변 객체 변경
  • Input - 자동차 수 -> 이름 입력
  • Output - 우승자 출력 추가 및 자동차 이름 출력 포맷 변경
  • Track - Car 불변객체 적용 및 우승자 선출

About


Languages

Language:Kotlin 100.0%