/woowacourse-lotto-mission

우아한테크코스 Level1 로또 미션 최종 코드입니다.

Primary LanguageJava

🚀 로또 1단계 - 자동

페어 프로그래밍 규칙

  • Java Style Guide: 우아한테크코스의 자바 스타일 가이드
  • TDD를 적극 도입한다.
  • 비즈니스 로직에서 null을 허용하지 않는다.
  • 교대는 10분마다 진행한다.
  • 12시 1분은 12시가 아니다.
  • 싸우지 않는다.

🛠 기능 구현 목록

Domain

  • LottoPurchaseMoney: 로또 구입 금액과 관련된 책임을 가진 객체이다. 로또 구입 금액을 활용하여 로또 티켓의 갯수를 계산할 수 있다.

    • 구입 금액을 기반으로 티켓 갯수를 반환한다.
    • 구입 금액이 1000원 미만인 경우 예외를 던진다.
    • 거스름돈이 생긴 경우 가능한 티켓 갯수만 반환한다.
    • 구입금액이 음수인 경우 예외를 던진다.
    • 수동 입력 개수가 총 금액에 의한 총 개수보다 클 수 없다.
  • LottoTicket: 6자리의 로또 번호 관리의 책임을 가진 객체이다.

    • 로또 티켓 생성 시점에 로또 번호 생성을 위한 전략을 활용한다.
    • Getter로 꺼내오는 리스트를 변경할 경우 예외를 던진다.
    • LottoTicket을 기반으로 당첨 번호가 존재하는지 유무를 반환한다.
    • 로또 번호가 6개인지 검증한다.
    • 로또 번호 중복을 검증한다.
  • LottoNumberGenerator: 로또 번호를 생성 전략을 가진 인터페이스이다.

  • AutoLottoNumberGenerator: 6자리 로또 번호를 자동으로 생성해주는 책임을 가진 객체이다.

    • 1 ~ 45 자리의 랜덤한 수를 6개 생성한다.
    • 생성된 숫자는 6자리임을 보장한다.
    • 생성된 숫자는 1 ~ 45의 범위를 가진다.
    • Collection.shuffle() 메소드를 활용한다.
    • Collection.sort() 메소드를 활용해 정렬하여 생성해준다.
  • LottoTickets: 로또 생성 갯수와 생성 전략을 받아 로또 티켓 리스트를 관리하는 일급 컬렉션이다.

    • 로또 생성 갯수와 생성 전략을 받아 로또 티켓 리스트를 생성한다.
    • 로또 티켓의 갯수를 반환한다.
  • LottoMachine: 로또 티켓을 자동 발급하기 위한 책임을 가지고 있다. 위 도메인 객체들과 협력을 이뤄 자동 발급을 진행한다.

    • 구입 금액을 기반으로 로또 티켓을 자동 발급한다.
  • WinningNumber: 당첨 번호 한자리의 책임을 가지고 있다. 해당 당첨 번호는 보너스볼의 여부를 포함하고 있다.

    • 해당 당첨 번호가 보너스볼인지 여부를 확인한다.
  • WinningNumbers: 당첨 번호 리스트를 가진 일급 컬렉션이다.

    • 당첨 번호 개수 만큼 당첨 번호를 생성한다.
    • LottoTicket 을 기반으로 당첨 정보를 반환한다.
    • 중복되는 숫자가 있는지 검증한다.
  • Rank: 당첨 정보를 명시하는 열거형이다.

    • 보너스 볼을 포함하여 5개를 맞춘 경우 2등이어야한다.
    • 보너스 볼을 포함하지 않고 5개를 맞춘 경우 3등이어야한다.
    • 보너스볼 포함하여 6개 맞춘 경우 1등이어야 한다.
    • 보너스볼 미포함하여 6개 맞춘 경우 1등이어야 한다.
    • 2개 맞춘 경우 NOTTING 이다.
  • LottoResult: 로또 수익률 계산의 책임을 가지는 객체이다.

    • 구입 금액이 주어지면 수익률을 계산하여 반환한다.

스크린샷 2022-03-02 오전 11 09 39

스크린샷 2022-02-24 오후 3 31 54

스크린샷 2022-02-24 오후 3 31 57


우아한테크코스 코드리뷰