전체 보기
🍀

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

작성일자
2023/11/07
태그
DIARY_DEVELOP
프로젝트
PreCourse
책 종류
1 more property

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

구현하면서 고민한 부분
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 작성하기
몰입
기능 목록 초안 빠르게 작성하고,
단위 테스트 작성하면서 빠르게 구현하기 (최종 코딩테스트처럼 연습해보기)
리팩토링하기
Search
1일차_둘러보기, 환경설정하기
2023/10/19
DIARY_DEVELOP
1일차_둘러보기, 환경설정하기
2023/10/19
DIARY_DEVELOP