다시 생각해볼 부분 정리해두겠다
•
구현하면서 고민한 부분
◦
1000원단위인지 검증을 판매자가 할지, 구매자가 할지 → 판매자가 하는 게 맞다 생각함
◦
컨트롤러를 아예 스태틱 메서드들로만 구성해버리는 건 어떻게 생각하는지 (난 괜찮다 생각함)
◦
클래스가 너무 비대해졌을 때 어떻게 대처할 수 있을지 (ex. 컨트롤러)
•
설계하면서 궁금했던 점
◦
◦
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
구입금액을 입력 받는다. (String → int)
정수가 아닐 경우, 예외를 발생시킨다.
당첨 번호를 쉼표로 구분해 입력 받는다. (String → List<Integer>)
빈 리스트일 경우, 예외를 발생시킨다.
각 원소가 정수가 아닐 경우, 예외를 발생시킨다.
보너스 번호를 입력 받는다. (String → int)
정수가 아닐 경우, 예외를 발생시킨다.
OutputView
발행된 로또 개수를 출력한다.
발행된 로또 번호들을 출력한다.
등수 별 당첨 개수를 출력한다.
총 수익률을 출력한다
Controller
LottoGameController
로또 (시뮬레이션) 게임을 시작한다.
로또를 판매한다.
로또 당첨 번호를 결정한다.
로또 당첨 통계를 계산한다.
Exception
ErrorCode → Enum
예외 메시지를 제공한다.
LottoGameException
예외 발생 시 예외 메시지를 담아 예외를 커스텀한다.
Today in 프리코스
TIL 작성하기
몰입
기능 목록 초안 빠르게 작성하고,
단위 테스트 작성하면서 빠르게 구현하기 (최종 코딩테스트처럼 연습해보기)
리팩토링하기
Search