Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
23414b1
Feat : First commit
jiseop121 Mar 15, 2024
4027ed1
Feat(codeStyleConfig) : 자바 코드 컨벤션 추가
jiseop121 Mar 19, 2024
d38b158
docs(README.md) : 패키지 및 클래스 구조 설계와 역할 부여
jiseop121 Mar 19, 2024
4af8198
docs(README.md) : 역할 수정 및 validation 작성
jiseop121 Mar 19, 2024
220545c
Feat(InputView) : 구매 금액 입력 기능 생성
jiseop121 Mar 19, 2024
ad45736
test(InputViewTest) : 구매금액 입력 기능 test 작성
jiseop121 Mar 19, 2024
f1d63d8
Feat(ErrorMessage) : 에러메세지 enum 생성
jiseop121 Mar 19, 2024
a508587
Feat(InputView) : 금액 입력 기능 완성
jiseop121 Mar 19, 2024
1d43200
Feat(InputView) : 당첨번호 입력 기능
jiseop121 Mar 20, 2024
cc4931e
Feat(ErrorMessage) : 당첨번호 입력 예외 문구 생성
jiseop121 Mar 20, 2024
1a6d159
Test(InputViewTest) : 당첨번호입력기능 정상 비정상 경우 테스트
jiseop121 Mar 20, 2024
7f4160b
Feat(InputView) : 보너스 번호 입력 기능
jiseop121 Mar 20, 2024
a91b071
Test(InputViewTest) : 보너스 번호 입력 테스트
jiseop121 Mar 20, 2024
cd06328
Feat(ErrorMessage) : 보너스 번호 입력 에러 문구 추가
jiseop121 Mar 20, 2024
df03229
Feat(Model.Domain.Lotto) : 로또 검증 메서드 추가
jiseop121 Mar 21, 2024
1f0b5cc
Test(LottoTest) : Lotto 테스트 생성
jiseop121 Mar 21, 2024
5d8dc4d
Refactor(InputView) : exception 클래스 수정
jiseop121 Mar 21, 2024
7b7f22a
Feat(Lottos) : Lottos 생성 및 validation 추가
jiseop121 Mar 21, 2024
b40e679
Test(LottosTest) : Lottos 테스트 생성
jiseop121 Mar 21, 2024
637a55b
Feat(ErrorMessage) : Lottos 에러메세지 추가
jiseop121 Mar 21, 2024
732ee71
Test(LottoTest) : 메서드명 수정
jiseop121 Mar 21, 2024
069c6ed
Feat(WinningNumbers) : 당첨번호와 보너스번호를 포함한 객체 생성
jiseop121 Mar 21, 2024
bf567b0
Test(WinningNumbersTest) : WinningNumbers 테스트 생성
jiseop121 Mar 21, 2024
d7898a4
Feat(ErrorMessage) : WinningNumbers 에러 메세지 추가
jiseop121 Mar 21, 2024
bca3179
Refactor(ErrorMessage) : [ERROR] 문구 추가
jiseop121 Mar 21, 2024
ecdd30c
Feat(LottosGenerator) : 로또 구매 기능 생성
jiseop121 Mar 21, 2024
f1293a9
Test(LottosGeneratorTest) : 로또 생성 기능 테스트
jiseop121 Mar 21, 2024
335f427
Feat(LottosWinningStatus) : 유저의 당첨 결과 데이터 객체
jiseop121 Mar 24, 2024
350bc32
Feat(LottoUser) : lottos, money, 당첨결과를 가지고있는 유저 객체
jiseop121 Mar 24, 2024
e8aefb4
Feat(WinningType) : 당첨종류 및 당첨금액
jiseop121 Mar 24, 2024
34e069e
Feat(LottosWinningChecker) : 당첨결과를 계산하여 반환하는 서비스 클래스
jiseop121 Mar 24, 2024
2d84842
Test(LottosWinningCheckerTest) : LottosWinningChecker 테스트
jiseop121 Mar 24, 2024
31b5a5b
Refactor(LottosWinningStatus) : profitRatio에 대한 validation 추가
jiseop121 Mar 24, 2024
77ee38c
Test(LottosWinningStatusTest) : `LottosWinningStatus` 테스트
jiseop121 Mar 24, 2024
a555419
Feat(ErrorMessage) : WinningStatus validation에 대한 메세지 추가
jiseop121 Mar 24, 2024
28a9df4
Feat(OutputView) : 출력 역할 클래스
jiseop121 Mar 25, 2024
983aea9
Feat(ViewMessage) : 화면에 표시될 문구들
jiseop121 Mar 25, 2024
951d99d
Test(OutputViewTest) : 화면 출력 형식 테스트
jiseop121 Mar 25, 2024
73c2f98
Feat(LottoSystemController) : 컨트롤러 생성
jiseop121 Mar 25, 2024
301f7a7
Refactor(Application) : 컨트롤러 적용
jiseop121 Mar 25, 2024
0b3d0fa
Refactor(Lottos) : lottoBundle로 변수명 수정
jiseop121 Mar 25, 2024
6b8f860
Refactor(LottoWinningChecker) : 수익률 계산 오류 수정
jiseop121 Mar 25, 2024
3e8e6ad
Feat(ErrorMessage) : 에러메세지 추가
jiseop121 Mar 25, 2024
27a7511
Refactor(LottosGenerator) : 메서드 인자 수정
jiseop121 Mar 25, 2024
062556a
Feat : 필요없는 주석 및 코드 삭제
jiseop121 Mar 25, 2024
e1eebd2
Feat(Validation) : 통합 Validation 클래스 생성
jiseop121 Mar 25, 2024
d563c1e
Docs(README) : 간략하게 수정
jiseop121 Mar 25, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .idea/codeStyles/codeStyleConfig.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

65 changes: 65 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# JAVA - LOTTO

https://github.com/TEAM-ALOM/java-lotto

## 🗂️ Package 구조(MVC)

### **Model**

#### LottoUser

- 역할 : (int)`money`, `Lottos`과 `LottosWinningStatus`를 가지고 있는 객체

#### Lotto

- 역할 : 로또의 실질적 데이터

#### Lottos

- 역할 : 구매한 `Lotto`들의 묶음(`List`) 실질적 데이터

#### LottoGenerator

- 역할 : `LottoUser.money`에 따라 `Lotto`들을 생성

#### LottosWinningChecker

- 역할 : `Lottos`의 당첨 계산 후 `LottosWinningStatus` 생성

#### LottosWinningStatus

- 역할 : `WinningNumbers`,`WinningType`를 바탕으로 `Lottos`의 당쳠 계산 `LottoWinningChecker` 결과를 담은 실질적 데이터

#### WinningNumbers

- 역할 : 보너스 번호와 당첨 번호들(하나의 로또 객체)의 실질적 데이터

#### WinningType

- 역할 : 등수 별 당첨 조건 목록의 실질적 데이터

### Controller

#### LottoSystemController

- 역할 : 로또 시스템을 실행

### **View**

#### InputView

- 역할 : 사용자의 입력을 받는다.

#### OutputView

- 역할 : 입력 문구 및 결과 출력한다.

### **Validation**

#### Validation

#### ErrorMessage

- 역할 : 에러 메세지 모음

## Test
7 changes: 6 additions & 1 deletion src/main/java/lotto/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
package lotto;

import lotto.controller.LottoSystemController;
import lotto.model.domain.LottoUser;

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현
LottoSystemController lottoSystemController = new LottoSystemController(new LottoUser());
lottoSystemController.runLottoSystem();
}
}
}
20 changes: 0 additions & 20 deletions src/main/java/lotto/Lotto.java

This file was deleted.

58 changes: 58 additions & 0 deletions src/main/java/lotto/controller/LottoSystemController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package lotto.controller;

import java.util.List;
import lotto.model.domain.LottoUser;
import lotto.model.domain.WinningNumbers;
import lotto.model.service.LottosGenerator;
import lotto.model.service.LottosWinningChecker;
import lotto.view.InputView;
import lotto.view.OutputView;

public class LottoSystemController {

private final LottoUser lottoUser;

public LottoSystemController(LottoUser lottoUser) {
this.lottoUser = lottoUser;
}

public void runLottoSystem() {
try {
buyLottos();

WinningNumbers winningNumbers = inputWinningNumbers();

winningResult(winningNumbers);
} catch (IllegalArgumentException e) {
OutputView.displayErrorMessage(e.getMessage());
}
}

private void buyLottos() {
OutputView.moneyForPurchaseInputMessage();
int userMoney = InputView.moneyForPurchaseInput();

lottoUser.setMoney(userMoney);

LottosGenerator.generateLottosAndInput(lottoUser, userMoney);

OutputView.userLottos(lottoUser.getLottos().getLottoBundle());
}

private WinningNumbers inputWinningNumbers() {
OutputView.winningNumbersInputMessage();
List<Integer> winningNumbersInput = InputView.winningNumbersInput();

OutputView.bonusNumberInputMessage();
int bonusNumberInput = InputView.bonusNumberInput();

return new WinningNumbers(
winningNumbersInput, bonusNumberInput
);
}

private void winningResult(WinningNumbers winningNumbers) {
LottosWinningChecker.generateWinningStatusAndInput(lottoUser, winningNumbers);
OutputView.winningStatusMessage(lottoUser.getLottosWinningStatus());
}
}
18 changes: 18 additions & 0 deletions src/main/java/lotto/model/domain/Lotto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package lotto.model.domain;

import java.util.List;
import lotto.validation.Validation;

public class Lotto {

private final List<Integer> numbers;

public Lotto(List<Integer> numbers) {
Validation.validationLotto(numbers);
this.numbers = numbers;
}

public List<Integer> getNumbers() {
return numbers;
}
}
53 changes: 53 additions & 0 deletions src/main/java/lotto/model/domain/LottoUser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package lotto.model.domain;

import lotto.validation.Validation;

public class LottoUser {
private Lottos lottos;
private int money;
private LottosWinningStatus lottosWinningStatus;

public LottoUser() {

}

public LottoUser(int money) {
this.money = money;
}

public LottoUser(Lottos lottos, int money) {
this.lottos = lottos;
this.money = money;
}

public LottoUser(Lottos lottos, int money, LottosWinningStatus lottosWinningStatus) {
this.lottos = lottos;
Validation.validationMoney(money);
this.money = money;
this.lottosWinningStatus = lottosWinningStatus;
}

public Lottos getLottos() {
return lottos;
}

public int getMoney() {
return money;
}

public LottosWinningStatus getLottosWinningStatus() {
return lottosWinningStatus;
}

public void setLottos(Lottos lottos) {
this.lottos = lottos;
}

public void setLottosWinningStatus(LottosWinningStatus lottosWinningStatus) {
this.lottosWinningStatus = lottosWinningStatus;
}

public void setMoney(int money) {
this.money = money;
}
}
20 changes: 20 additions & 0 deletions src/main/java/lotto/model/domain/Lottos.java

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

List 컬렉션에 이미 .size 메서드가 포함되어 있으니 count 변수 대신, 이를 활용하는 방법을 고려하는 것도 좋을 것 같습니다

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package lotto.model.domain;

import java.util.List;
import lotto.validation.Validation;

public class Lottos {
private final int count;
private final List<Lotto> lottoBundle;

public Lottos(int count, List<Lotto> lottoBundle) {
Validation.validationCount(count);
this.count = count;
Validation.validationLottos(count, lottoBundle);
this.lottoBundle = lottoBundle;
}

public List<Lotto> getLottoBundle() {
return lottoBundle;
}
}
47 changes: 47 additions & 0 deletions src/main/java/lotto/model/domain/LottosWinningStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package lotto.model.domain;

import lotto.validation.Validation;

public class LottosWinningStatus {
private final int matchesThree;
private final int matchesFour;
private final int matchesFive;
private final int matchesFiveWithBonus;
private final int matchesSix;
private final double profitRatio;

public LottosWinningStatus(int matchesThree, int matchesFour, int matchesFive, int matchesFiveWithBonus,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

우테코 클린코드 방향성중 인자가 3개를 넘지 않는것을 권장하는 사항이 있습니다
생성자와는 별개로 해석될 수 있지만, 유사한 계열의 속성이 사용되는 만큼 추가적으로 묶어보면 더욱 좋을 것 같습니다

int matchesSix, double profitRatio) {
this.matchesThree = matchesThree;
this.matchesFour = matchesFour;
this.matchesFive = matchesFive;
this.matchesFiveWithBonus = matchesFiveWithBonus;
this.matchesSix = matchesSix;
Validation.validationProfitRatio(profitRatio);
this.profitRatio = profitRatio;
}

public double getProfitRatio() {
return profitRatio;
}

public int getMatchesThree() {
return matchesThree;
}

public int getMatchesFour() {
return matchesFour;
}

public int getMatchesFive() {
return matchesFive;
}

public int getMatchesFiveWithBonus() {
return matchesFiveWithBonus;
}

public int getMatchesSix() {
return matchesSix;
}
}
23 changes: 23 additions & 0 deletions src/main/java/lotto/model/domain/WinningNumbers.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package lotto.model.domain;

import java.util.List;
import lotto.validation.Validation;

public class WinningNumbers {
private final Lotto winningLotto;
private final int bonusNumber;

public WinningNumbers(List<Integer> winningLotto, int bonusNumber) {
this.winningLotto = new Lotto(winningLotto);
Validation.validationBonusNumber(winningLotto, bonusNumber);
this.bonusNumber = bonusNumber;
}

public Lotto getWinningLotto() {
return winningLotto;
}

public int getBonusNumber() {
return bonusNumber;
}
}
25 changes: 25 additions & 0 deletions src/main/java/lotto/model/domain/WinningType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package lotto.model.domain;

public enum WinningType {
MATCHES_SIX("6개 일치 (2,000,000,000원)", 2_000_000_000),
MATCHES_FIVE_WITH_BONUS("5개 일치, 보너스 볼 일치 (30,000,000원)", 30_000_000),
MATCHES_FIVE("5개 일치 (1,500,000원)", 1_500_000),
MATCHES_FOUR("4개 일치 (50,000원)", 50_000),
MATCHES_THREE("3개 일치 (5,000원)", 5_000);

private final String message;
private final long profitMoney;

WinningType(String message, long profitMoney) {
this.message = message;
this.profitMoney = profitMoney;
}

public String getMessage() {
return message;
}

public long getProfitMoney() {
return profitMoney;
}
}
34 changes: 34 additions & 0 deletions src/main/java/lotto/model/service/LottosGenerator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package lotto.model.service;

import java.util.ArrayList;
import java.util.List;
import lotto.model.domain.Lotto;
import lotto.model.domain.LottoUser;
import lotto.model.domain.Lottos;
import org.kokodak.Randoms;

public class LottosGenerator {
private static final int MIN_LOTTO_NUMBER = 1;
private static final int MAX_LOTTO_NUMBER = 45;
private static final int LOTTO_COUNT = 6;


public static void generateLottosAndInput(LottoUser lottoUser, int userMoney) {
int count = userMoney / 1000;

lottoUser.setLottos(new Lottos(count, generateLottos(count)));
}

private static List<Lotto> generateLottos(int count) {
List<Lotto> userLottos = new ArrayList<>();
for (int i = 0; i < count; i++) {
userLottos.add(generateLotto());
}
return userLottos;
}

private static Lotto generateLotto() {
return new Lotto(Randoms.pickUniqueNumbersInRange(MIN_LOTTO_NUMBER, MAX_LOTTO_NUMBER, LOTTO_COUNT));
}

}
Loading