본 프로젝트는 우아한테크코스 8기 프리코스 과정의 3차 과제로, 주어진 요구사항에 따라 로또 프로그램을 구현하는 것을 목표로 합니다.
- 실행 환경: JDK 21
- 시작점:
Application.main()메소드 - 종료:
System.exit()호출 금지 - 주어진 라이브러리를 제외한 외부 라이브러리 사용 금지
- build.gradle 파일 수정 금지
- 제공된 파일, 패키지 이름 수정 및 이동 금지
- 코드 스타일: 우아한테크코스 Java Style Guide 준수
- 커밋 메시지: AngularJS Git Commit Message Conventions 준수
- indent depth는 2까 허용
- 3항 연산자 사용 금지
- JUnit과 AssertJ를 사용하여 테스트
- 함수 길이는 15자를 넘기지 않기
- else 사용 금지
- JAVA Enum을 사용할 것
- UI를 제외한 기능에 대한 단위 테스트를 적용할 것
- 로또 구입 금액을 입력받는다.
구입금액을 입력해 주세요.라는 문구 출력 다음줄에 입력받는다.
- 로또 구입 금액이 유효한지 검증한다.
- 입력값은 1000 이상, 2147483000 이하인 양의 정수여야 한다.
- 금액은 1000원 단위로 나누어 떨어져야 한다.
- 로또 1장의 가격(1000원)을 기준으로 구매할 로또의 개수를 계산한다.
n개를 구매했습니다.라는 문구를 출력한다.
- 계산된 개수만큼 로또를 발행한다.
- 1개의 로또는 1부터 45 사이의 중복되지 않는 6개의 숫자로 구성된다.
- 당첨 번호 6개를 입력받는다.
당첨 번호를 입력해 주세요.라는 문구 출력 이후 번호를 입력받는다.- 번호는 쉼표(
,)를 기준으로 구분되어야 한다. - 각 번호는 1부터 45 사이의 정수여야 한다.
- 6개의 번호는 중복되지 않아야 한다.
- 보너스 번호 1개를 입력받는다.
보너스 번호를 입력해 주세요.라는 문구 출력 이후 보너스 번호를 입력받는다.- 번호는 1부터 45 사이의 정수여야 한다.
- 보너스 번호는 당첨 번호 6개와 중복되지 않아야 한다.
- 구매한 로또와 당첨 번호를 비교하여 각 로또의 당첨 등수를 결정한다.
- 등수별 당첨 횟수를 집계한다.
- 총 당첨 금액을 계산한다.
- 수익률을 계산한다.
- 수익률은
(총 당첨 금액 / 총 구입 금액) * 100으로 계산한다. - 수익률은 소수점 둘째 자리에서 반올림한 값을 출력할 수 있도록 한다.
- 수익률은
- 발행한 로또 수량 및 번호를 요구사항에 맞춰 출력한다.
- 로또 번호는 오름차순으로 정렬하여 출력한다.
- 당첨 통계 내역을 요구사항 형식에 맞춰 출력한다.
- 출력 양식은 다음과 같다.
당첨 통계 --- 3개 일치 (5,000원) - 1개 4개 일치 (50,000원) - 0개 5개 일치 (1,500,000원) - 0개 5개 일치, 보너스 볼 일치 (30,000,000원) - 0개 6개 일치 (2,000,000,000원) - 0개 - 최종 수익률을 출력한다.
- 출력 양식은
총 수익률은 m%입니다.이다.
- 출력 양식은
- 사용자 입력이 잘못된 경우
IllegalArgumentException을 발생시킨다.- 예외 발생 시
"[ERROR]"로 시작하는 에러 메시지를 출력 후 해당 입력부터 다시 받는다.
- 예외 발생 시
- UI(입출력) 로직을 제외한 모든 비즈니스 로직에 대해 단위 테스트를 작성한다.