본문 바로가기
교육 및 책/TDD, 클린 코드 with Java

TDD, 클린 코드 - 로또

by oneny 2023. 5. 14.

미션 2단계 - 로또 

 

GitHub - oneny/java-lotto: 로또 게임 구현을 관리하는 저장소

로또 게임 구현을 관리하는 저장소. Contribute to oneny/java-lotto development by creating an account on GitHub.

github.com

 

기능 목록

 

핵심 기능

  • 로또 번호는 1 이상 45 이하
  • 로또 티켓은 6개의 로또 번호를 가진다.
  • 당첨 로또티켓과 비교하여 맞춘 개수에 따른 로또 순위들을 반환한다.
  • 로또 순위들을 통해 수익률, 순위 당 몇 개씩 맞췄는지를 출력한다.

 

LottoNumber

  • 1 이상 45 이하의 숫자
  • 그 외의 숫자가 입력되는 경우에는 IllegalArgumentException throw
  • 정적 팩토리 메서드, 인스턴스 캐싱을 통해 같은 번호에 대해 같은 LottoNumber 객체를 반환할 수 있도록 리팩터링

 

LottiTicket

  • 로또 티켓은 6개까지만 입력 가능
  • 해당 로또번호가 있는지 확인
  • 다른 로또티켓과 비교하여 맞춘 개수 반환
  • TreeSet을 통해 로또 번호가 오름차순으로 정렬될 수 있도록 리팩터링

 

LottoTickets

  • 로또티켓 추가
  • 전체 로또티켓들에 대해 당첨번호와 비교하여 각 맞춘 개수를 담은 리스트 반환

 

RandomLottoStrategy

  • 1 이상 45 이하의 랜덤번호 6개를 가진 로또티켓 반환
  • 전략패턴을 활용

 

LottoRank

  • 로또순위 리스트 반환
  • 맞춘 개수와 보너스에 따라 맞는 로또순위 반환
  • 로또순위에 따라 해당 상금 반환

 

WinningTicket

  • 보너스 번호는 당첨 번호에 없는 번호 중 하나
  • 로또 티켓과 비교하여 일치하는 개수 반환
  • 로또 티켓이 보너스 번호를 가지고 있는지 확인

 

LottoResult

  • 각 로또티켓들에 대한 로또순위 리스트를 가지고 로또결과로 반환

 

LottoResult

  • 수익률 반환
  • 로또순위와 각 로또순위의 개수 반환

 

LottoVendingMachine

  • 사용자의 수동입력 로또티켓과 랜덤입력 로또티켓을 합친 로또티켓 리스트 반환
  • 사용자가 구매한 티켓들과 지난 주 당첨 번호를 입력받아 게임 생성
  • 게임을 플레이하여 결과 반환

 

이번 미션을 통해 배운점

레이싱카 미션일 때는 어떻게 구현해야할지 감도 안잡힌 상황이였다면 똑같은 실수를 반복하지 않기 위해 이번에는 위 사진처럼 굿노트에 먼저 어떻게 구조를 잡을지 적어도 이틀은 고민하고 적고 지우고 고민하고를 반복한 것 같다. 구현할 때는 저렇게 작성한 것과는 또 다르게 수정하면서 미션을 수행했는데 그래도 이렇게 열심히 고심한 덕분인지 리뷰어 분께서 로또 미션을 전부 완료하고 직접 DM을 보내주셨을때 처음부터 구조를 잘 잡았다고 칭찬해주셨다. 그 칭찬이 나한테는 정말 너무 큰 보상이였다! 그리고 리뷰 해주신 것에 대해 하나하나 다 반영하고, 미션을 진행하면서 궁금한 부분들을 계속 DM으로 여쭤보는데 리뷰어 분을 귀찮게 하지 않았나 조금 걱정이였는데 리뷰어 분도 즐겁게 했다고 하셔서 다행이라 생각했고 너무 감사했다!

미션 하나씩 성공해나갈 때마다 쾌감과 이번보다 성장하는게 느껴진다! 꼭 수료하자! 😊