-
입력
- 구입 금액 입력
- Validation - 1000원 단위로 안 떨어지면 예외 처리
- 당첨 번호 입력
- 보너스 번호 입력
- Validation - 정수가 아니면 예외 처리
- Validation - 1 이상 45 이하가 아니면 예외 처리
- 구입 금액 입력
-
출력
- n 개 (n000원) 구매에 대한 랜덤 숫자 6개 * n 줄
- 당첨 통계 출력
- 총 수익률 출력 (소수점 둘째 자리에서 반올림)
-
입력 Parser
- 당첨 번호 파싱 → List
- Validation - 쉼표 기준으로 띄쓰 등 parse 잘못된 경우 예외 처리
- Validation - 쉼표 기준 파싱했을 때 숫자가 정수가 아닌 경우 예외 처리
- 당첨 번호 파싱 → List
-
Lotto
- Validation - list size가 6이 아닌 경우 예외 처리 (이미 있음)
- Validation - list 요소 하나 하나가 1 이상 45 이하가 아닐 경우 예외 처리
- Validation - list 요소 중복 있을 경우 예외 처리
-
동작
- 1개의 로또 * n 개 발행 - 중복되지 않는 6개의 list 숫자 발행
- 로또 발행 시 오름 차순으로 정렬하여 저장 → 출력
- 1개의 로또 내부와 입력 받은 당첨 번호 + 보너스 번호를 비교하여 당첨 내역 비교
- 각각의 당첨 내역에 대해 다음과 같이 내역 저장 + 출력
3개 일치 (5,000원) - 1개 4개 일치 (50,000원) - 0개 5개 일치 (1,500,000원) - 0개 5개 일치, 보너스 볼 일치 (30,000,000원) - 0개 6개 일치 (2,000,000,000원) - 0개
- Lotto 클래스 - 변수 접근 제어자 변경 불가 / 인스턴스 변수 추가 불가
- 예외 상황 시 에러 문구 “[ERROR]”로 시작
- 사용자가 잘못된 값을 입력할 경우
IllegalArgumentException을 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 그 부분부터 입력을 다시 받는다.
-
입력
- 구입 금액 입력
- 당첨 번호 입력
- 보너스 번호 입력
-
출력
- n개 (n000원) 구매에 대한 랜덤 숫자 6개 * n 줄 출력
- 당첨 통계 출력
- 일치 갯수, 보너스볼 여부, 당첨 갯수에 대해 포맷팅 하여 출력
- 총 수익률 출력
-
출력용 DTO
- LottoResponseDto - 로또 리스트를 반환하여 사용
- TotalPrizeResponseDto - 총 당첨 내역을 반환하여 사용
-
입력 Parser
- 당첨 번호 파싱 -> WinningNumberDto 로 변환
- 쉼표 기준으로 띄어쓰기, 다른 구분자 등으로 인해 파싱 잘못된 경우 예외 처리
- 쉼표 기준 파싱했을 때 숫자가 정수가 아닌 경우 예외 처리
- 구입 금액 파싱 -> AmountDto 로 변환
- 정수가 아닐 경우 예외 처리
- 보너스 번호 파싱 -> BonusNumberDto로 변환
- 정수가 아닐 경우 예외 처리
- 정수가 아닐 경우 예외 처리
- 당첨 번호 파싱 -> WinningNumberDto 로 변환
-
Lotto
- 로또 발행(생성) 시 오름 차순으로 정렬하여 저장
- list size 가 6이 아닌 경우 예외 처리
- list 요소 하나 하나가 1 이상 45 이하가 아닐 경우 예외 처리
- list 요소 중복 있을 경우 예외 처리
- 로또 리스트 (6개) 값과 특정 값(1개) 비교, boolean 반환
- 로또 리스트 (6개) 값과 당첨 번호 리스트 (6개) 비교, 일치 갯수 반환
- WinningNumberDto -> Lotto로 변환하는 정적 팩터리 메서드 from 생성
- 로또 발행(생성) 시 오름 차순으로 정렬하여 저장
-
WinningNumberDto
- List 필드로 이루어짐
- List 필드로 이루어짐
-
LottoNumberGenerator
- 로또 랜덤 발행(로또 객체로 저장) - 1이상 45 이하 6개 숫자로 (미중복)생성
- 로또 랜덤 발행(로또 객체로 저장) - 1이상 45 이하 6개 숫자로 (미중복)생성
-
LottoNumber (Enum)
- 1, 45, 6 등 로또 관련 상수 별도 선언
-
BonusNumber
- 1 이상 45 이하가 아니면 예외 처리
- BonusNumberDto -> BonusNumber로 변환하는 정적 팩터리 메서드 from 생성
-
BonusNumberDto
- int number 필드로 이루어짐
- int number 필드로 이루어짐
-
Amount
- 입력 값이 100000원 초과 (100회 초과)일 경우 예외 처리
- 1000원 단위로 나눠지지 않을 경우 예외 처리
- AmountDto -> Amount로 변환하는 정적 팩터리 메서드 from 생성
-
AmountDto
- int amount 필드로 이루어짐
- int amount 필드로 이루어짐
-
Issue
- 1개의 로또 * n 개 발행 - 중복되지 않는 6개의 list 숫자 발행
- 1개의 로또 * n 개 발행 - 중복되지 않는 6개의 list 숫자 발행
-
Prize (Enum)
- 당첨 기준 갯수와 금액 저장 (갯수, 보너스볼 여부, 금액)
- 당첨 기준 갯수와 금액 저장 (갯수, 보너스볼 여부, 금액)
-
WinningLottery
- 전체 로또 발행 건에 대해 입력 받은 당첨 번호 + 보너스 번호를 비교하여 당첨 내역 산출
- 이때, 당첨 번호 6개 숫자 중 보너스 번호와 중복되는 것이 있으면 예외 처리
- 1개의 로또 내부와 입력 받은 당첨 번호 + 보너스 번호를 비교하여 당첨 내역 비교
- 각각의 로또 당첨 내역에 대해 저장
3개 일치 - 5000원 / 4개 일치 - 50000원 / 5개 일치 - 1500000원 / 5개 일치 + 보너스볼 일치 - 30000000원 / 6개 일치 - 2000000000원
- 전체 로또 발행 건에 대해 입력 받은 당첨 번호 + 보너스 번호를 비교하여 당첨 내역 산출
-
ReturnRate
- 구매 금액 대비 당첨금 합에 대하여 총 수익률 계산 (소수점 둘째 자리에서 반올림)
- 구매 금액 대비 당첨금 합에 대하여 총 수익률 계산 (소수점 둘째 자리에서 반올림)
-
LottoMachine (Controller)
- 구입 금액에 따라 로또 개수로 변환 후, 랜덤 로또 생성 (반환)
- 전체 입출력 플로우 작성
- 구입 금액에 따라 로또 개수로 변환 후, 랜덤 로또 생성 (반환)
-
TotalPrize
- 모든 당첨 항목에 대한 당첨 내역
- 총 당첨금을 계산