우테코 프리코스 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개
  • 수익률을 출력
    • 소수점 둘째 자리에서 반올림 : 총 수익률은 62.5%입니다.
  • 예외 상황 에러 문구 출력
    • “[ERROR]” 로 시작 : [ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다.


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 을 적용할만한 부분은 생각했지만, 사용법을 몰라서 적용 못 했었다.

다른 사람들의 구현을 보고 익혀두자..

댓글남기기