우테코 프리코스 3주차
3주차 - 함수 분리
-
하나의 함수는 하나의 기능을 반드시 지키자
- 이를 위해 15라인 이내로 함수 작성을 하려고 노력하자
- 변수 이름에 자료형은 사용하지 말자
- 값을 하드코딩 하지 말자 - static final 같이 상수를 권장
- else 를 사용하지 말고 해결해 보자
- Java Enum 을 적용해보자
- 도메인 로직에 단위 테스트를 진행하자
-
컨벤션 잘 지키자
- 깃커밋 컨벤션
- 자바 컨벤션
해결 과정 - 로또
기능 목록 작성 후 규칙에 맞춰서 구현
기능 목록
1. 입력 기능
-
로또 구입 금액을 입력 - InputLotto#purchaseMoney(), readMoney()
- 사용자가 잘못된 값을 입력하면 예외 발생 - IllegalArgumentException
-
당첨 번호를 입력 - InputLotto#answerNumber(), readAnswer()
- 사용자가 잘못된 값을 입력하면 예외 발생 - IllegalArgumentException
- 숫자 범위 예외 처리용 함수 - InputLotto#exceptNumberRange()
-
보너스 번호를 입력 - InputLotto#bonusNumber(), readBonus()
- 사용자가 잘못된 값을 입력하면 예외 발생 - IllegalArgumentException
- 숫자 범위 예외 처리용 함수 - InputLotto#exceptNumberRange()
2. 로또 기능
-
1개의 로또 발행 - LottoGenerator#createLotto()
- X개의 로또 기록 - LottoGenerator#createLottos()
-
사용자 로또 번호와 당첨 번호 비교 - Referee#compareToLottos(), compareToLotto()
- 수익률 계산 - Referee#calculateIncome()
- 기존 로또 클래스에 getter 추가 - Lotto#getNumbers()
3. 출력 기능
- 로또 수량 출력 - OutputLotto#counts()
- 로또 번호 출력(오름차순) - OutputLotto#numbers()
- 당첨 내역 출력 - OutputLotto#winningHistory()
- 수익률 출력 - OutputLotto#incomeRate()
4. 추가 예외 처리
- 숫자 범위 예외 처리용 함수 - InputLotto#exceptNumberRange()
- 로또 숫자 중복 검증 함수 - Lotto#validateDuplication()
요구사항 분석
1. 입 출력 요구사항
입력
-
로또 구입 금액 입력
- 구입 금액은 1000원 단위
- 1000원으로 나누어 떨어지지 않으면 예외 처리
-
당첨 번호를 입력
- 번호는 쉼표(,)를 기준으로 구분
- 보너스 번호를 입력
출력
-
로또 수량과 번호를 출력
- 번호는 오름차순 정렬
-
당첨 내역을 출력
- 쉼표(,)로 1,000원 단위 구분 :
3개 일치 (5,000원) - 1개
- 보너스 볼 일치할 경우 :
5개 일치, 보너스 볼 일치 (30,000,000원) - 0개
- 쉼표(,)로 1,000원 단위 구분 :
-
수익률을 출력
- 소수점 둘째 자리에서 반올림 :
총 수익률은 62.5%입니다.
- 소수점 둘째 자리에서 반올림 :
-
예외 상황 에러 문구 출력
- “[ERROR]” 로 시작 :
[ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다.
- “[ERROR]” 로 시작 :
2. 로또 기능 분석
-
1개의 로또 발행
- 중복되지 않는 6개의 숫자
- 범위 : 1~45
- 가격 : 1000원
-
사용자 로또 번호와 당첨 번호를 비교
- 당첨 내역
- 수익률
- 잘못된 값 입력시
IllegalArgumentException
에러 발생 후 다시 입력 받기- “[ERROR]” 로 시작하는 에러메시지 출력 필수
3. 테스트 예제
입력
구입금액을 입력해 주세요.
- 로또 구입 금액 :
14000
- 14000 / 1000 을 통해 14개의 로또가 발행되어야 함
- 만약 14001 이라면? 예외 발생
- 담청 번호 :
1,2,3,4,5,6
- 보너스 번호 :
7
출력
-
구매수량 출력 :
8개를 구매했습니다.
-
로또 번호 출력(오름차순)
[8, 21, 23, 41, 42, 43]
[3, 5, 11, 16, 32, 38]
- 등등… 8개..
-
당첨 내역을 출력
3개 일치 (5,000원) - 1개
4개 일치 (50,000원) - 0개
5개 일치 (1,500,000원) - 0개
5개 일치, 보너스 볼 일치 (30,000,000원) - 0개
6개 일치 (2,000,000,000원) - 0개
-
수익률 출력(소수점 둘째 자리 반올림) :
총 수익률은 62.5%입니다.
-
예외 상황 :
[ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다.
마무리
확실히 기능 목록 작성이 조금 늘었다고 생각
Java Enum 을 적용할만한 부분은 생각했지만, 사용법을 몰라서 적용 못 했었다.
다른 사람들의 구현을 보고 익혀두자..
댓글남기기