🍀

20, 21일차_일단 돌아가는 코드를 만들기

작성일자
Nov 7, 2023
태그
DIARY_DEVELOP
프로젝트
PreCourse
책 종류

다시 생각해볼 부분 정리해두겠다

  • 구현하면서 고민한 부분
    • 1000원단위인지 검증을 판매자가 할지, 구매자가 할지 → 판매자가 하는 게 맞다 생각함
    • 컨트롤러를 아예 스태틱 메서드들로만 구성해버리는 건 어떻게 생각하는지 (난 괜찮다 생각함)
    • 클래스가 너무 비대해졌을 때 어떻게 대처할 수 있을지 (ex. 컨트롤러)
  • 설계하면서 궁금했던 점
    • UI 로직을 System.out, System.in, Scanner 라고 요구사항에 명시 되어 있는데, validate까지 여기 포함해도 괜찮다 생각하는지 (난 괜찮다 생각함)
    • UI에서 도메인을 생성해서 반환하는 게 괜찮다 생각하는지 (난 안괜찮다 생각함)
    • 도메인과 모델의 차이
    •  

기능 구현 목록 초안을 작성해두겠다

📘 용어 정의

  • 발행 : 숫자를 입력받거나 랜덤으로 숫자를 뽑아, 6개의 숫자로 이루어진 로또를 만드는 것을 말한다.
  • 당첨 : 당첨 번호와 로또 번호를 비교했을 때 일치하는 숫자가 3개 이상일 시 당첨됐다고 말한다.
  • 판매 : 판매자가 구매 요청을 받으면 로또를 발행해 구매자에게 전달해준다.
  • 구매(구입) : 구매자가 로또를 구매하면, 로또가 발행되고 이를 소유할 수 있다.
    • 발행된 로또를 구매자가 소유하고 있어야 당첨금을 수령할 수 있다. 즉, 소유자 없이 발행만 된 로또는 무효다.

🗂️ Model

LottoSeller (로또 판매자)

로또를 구매자가 원하는 금액의 개수만큼 판매한다.
구입 금액이 1000원으로 나누어 떨어지지 않는 경우, 예외를 발생시킨다.
로또 발행기로 로또를 발행한다.
발행된 로또를 구매자에게 전달한다.

LottoBuyer (로또 구매자)

로또를 원하는 금액만큼 구매해 소유한다.
발행된 로또를 로또 당첨 결과 분석기에 입력해 당첨 통계를 얻는다.

LottoGenerator (로또 발행기)

로또를 생성한다.

Lotto (로또) → First Class Collection

로또 번호들을 모아 저장한다.
로또 번호들을 모아 제공한다.

Lottos (로또 모음) → First Class Collection

로또들을 모아 저장한다.
로또들을 모아 제공한다.

LottoWinningAnalyzer (로또 당첨 결과 분석기)

당첨 번호와 보너스 번호를 입력 받는다.
당첨 통계를 생성한다.

WinningNumbers (당첨 번호) → First Class Collection

당첨 번호들과 보너스 번호를 모아 저장한다.
당첨 번호가 6개가 아닌 경우, 예외를 발생시킨다.
당첨 번호들과 보너스 번호가 1~45 사이가 아닌 경우, 예외를 발생시킨다.
당첨 번호들과 보너스 번호가 중복될 경우, 예외를 발생시킨다.
당첨 번호와 보너스 번호들을 모아 제공한다.

WinningRule (당첨 규칙) → Enum

1등~5등 별 당첨 금액과 당첨 조건을 제공한다.

👩🏻‍💻 View

InputView

구입금액을 입력 받는다. (Stringint)
정수가 아닐 경우, 예외를 발생시킨다.
당첨 번호를 쉼표로 구분해 입력 받는다. (StringList<Integer>)
빈 리스트일 경우, 예외를 발생시킨다.
각 원소가 정수가 아닐 경우, 예외를 발생시킨다.
보너스 번호를 입력 받는다. (Stringint)
정수가 아닐 경우, 예외를 발생시킨다.

OutputView

발행된 로또 개수를 출력한다.
발행된 로또 번호들을 출력한다.
등수 별 당첨 개수를 출력한다.
총 수익률을 출력한다

📡 Controller

LottoGameController

로또 (시뮬레이션) 게임을 시작한다.
로또를 판매한다.
로또 당첨 번호를 결정한다.
로또 당첨 통계를 계산한다.

🔑 Exception

ErrorCode → Enum

예외 메시지를 제공한다.

LottoGameException

예외 발생 시 예외 메시지를 담아 예외를 커스텀한다.

Today in 프리코스

TIL 작성하기
몰입
기능 목록 초안 빠르게 작성하고,
단위 테스트 작성하면서 빠르게 구현하기 (최종 코딩테스트처럼 연습해보기)
리팩토링하기
 
🍀
1일차_둘러보기, 환경설정하기
Oct 19, 2023
DIARY_DEVELOP
🍀
2일차_컨벤션 정리하기
Oct 20, 2023
DIARY_DEVELOP
🍀
3일차_설계에 대해 고민하기
Oct 21, 2023
DIARY_DEVELOP
🍀
4,5일차_MVC 온전히 이해하기
Oct 22, 2023
DIARY_DEVELOP
🍀
6일차_설계를 코드로 구현하기
Oct 24, 2023
DIARY_DEVELOP
🍀
7일차_리팩토링과 마무리하기
Oct 25, 2023
DIARY_DEVELOP
🍀
8,9일차_코드 리뷰 통해 객체지향에 다가가기
Oct 27, 2023
DIARY_DEVELOP
🍀
10일차_지난 과제 돌아보며 객체지향 이해하기, 의존성과 설계의 관계 맛보기
Oct 28, 2023
DIARY_DEVELOP
🍀
11일차_객체지향을 미션 설계에 적용하기(with [책] 객체 지향의 사실과 오해)
Oct 29, 2023
DIARY_DEVELOP
🍀
12일차_기능 별로 구현하며 단위 테스트의 필요성 느끼기 (with [책]자바와 JUnit을 활용한 실용주의 단위 테스트)
Oct 30, 2023
DIARY_DEVELOP
🍀
13,14일차_일급 컬렉션과 레코드 적용해 리팩토링하기
Oct 31, 2023
DIARY_DEVELOP
🍀
15, 16일차_코드 리뷰를 통해 성장하기(1)_다른 사람의 코드 읽으면 배운 것 정리
Nov 2, 2023
DIARY_DEVELOP
🍀
17일차_코드 리뷰를 통해 성장하기(2)_내 코드 개선하며 배운 것 정리
Nov 4, 2023
DIARY_DEVELOP
🍀
18일차_내가 찾은 설계 방법 공유하기, 공유에 대해 고민하기
Nov 5, 2023
DIARY_DEVELOP
🍀
19일차_지난 과제 피드백 고려해 설계하기
Nov 6, 2023
DIARY_DEVELOP
🍀
20, 21일차_일단 돌아가는 코드를 만들기
Nov 7, 2023
DIARY_DEVELOP
🍀
22일차_현재 도움이 될 것 생각하기 (디자인패턴과 mvc2 과감히 패스)
Nov 9, 2023
DIARY_DEVELOP
🍀
23일차_코드리뷰하기 (feat. converter 파고들기)
Nov 10, 2023
DIARY_DEVELOP
🍀
24일차_기획을 문서화하기
Nov 11, 2023
DIARY_DEVELOP
🍀
25일차_설계하며 고민하기
Nov 12, 2023
DIARY_DEVELOP
🍀
26, 27일차_구현하며 고민하기
Nov 13, 2023
DIARY_DEVELOP
20, 21일차_일단 돌아가는 코드를 만들기