- Input
- 입력 받기
- Extractor(인터페이스)
- [디폴트 메서드] Null 예외와 빈 문자열, 공백 예외 처리
- CarNameExtractor
- 쉼표(,)를 기준으로 이름을 나눠 배열로 만들기
- RoundExtractor
- 문자열에서 라운드 숫자를 추출하기
- 문자열이 숫자가 아닐 경우 예외 처리
- Car
- 5자 이하의 이름인지 판단 → 예외
- 이름을 토대로 자동차 생성
- 전진과 멈춤을 판단(값이 4 이상일 경우 전진)하고 실행
- Garage
- 받은 이름 배열을 토대로 자동차 배열 만들기
- 이름이 중복일 경우 예외 처리
- 이름이 적어도 2개가 아닐 경우 예외 처리
- Referee
- 최종 이동 결과를 받아서 우승자 분석
- Output
- 시작 메시지 출력하기
- 자동차 별 실행 결과를 출력하기
- 우승자 출력하기
- Track
- 프로그램 흐름 제어
-
Input 객체: 입력 받는 역할
- 자동차 이름 입력 받기
- 시도 횟수 입력 받기
-
Car 객체
- 5자 이하의 이름인지 판단 → 예외
- 이름을 토대로 자동차 생성(자동차가 스스로)
- 전진과 멈춤을 판단(값이 4 이상일 경우 전진)
- 전진하기
-
CarExtractor 객체
- 쉼표(,)를 기준으로 이름을 나눠 배열로 만들기
-
Garage 객체(자동차 일급 컬렉션)
- 받은 이름 배열을 토대로 자동차 배열 만들기
-
Referee 객체:
- 시도 횟수가 올바른지 판단 → 예외
- 자동차한테 이동 횟수 알려주기
- 자동차에게 최종 이동 결과를 받아서 우승자 분석
-
Output 객체: 출력하는 역할
- 시작 메시지 출력하기
- 자동차 별 실행 결과를 출력하기
- 우승자 출력하기
-
Track 객체: 프로그램 흐름 제어
-
랜덤 값 뱉는 역할 → 라이브러리 사용
- 0에서 9 사이에서 무작위 값을 반환
유스케이스명: 경주할 자동차 이름을 입력하면 실행 결과와 함께 우승자를 반환한다.
일차 액터: 사용자
주요 성공 시나리오:
- 시스템은 경주할 자동차 이름을 입력하라는 메시지를 출력한다
- 사용자가 경주할 자동차의 이름을 입력한다.
- 시스템은 시도할 횟수를 묻는다.
- 사용자는 시도할 횟수를 입력한다.
- 시스템은 각 자동차마다 [전진과 이동]을 횟수만큼 표현하는 방식으로 실행 결과를 사용자에게 보여준다.
- 이어 시스템은 이동량을 기준으로 최종 우승자를 사용자에게 알린다.