From 202edc7a6b0352f7b2ab7c394b52e8c5bd3fd242 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Mon, 30 Sep 2024 13:18:55 +0900 Subject: [PATCH 01/21] =?UTF-8?q?refactor:=20=EB=A1=9C=EB=98=90=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Application.java | 19 +++++++++++++++++++ src/main/java/lotto/Lotto.java | 7 ++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index d190922b..f7fa16f3 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,7 +1,26 @@ package lotto; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + public class Application { public static void main(String[] args) { + //LottoMaker lottoMaker = new LottoMaker(); + //System.out.println(lottoMaker.getLottoNum()); + + + LottoRepository repository = new LottoRepository(); + System.out.println(repository.getLottoSaved()); + run(); + //System.out.println(repository.getLottoSaved()); // TODO: 프로그램 구현 } + + private static void run() { + Scanner sc = new Scanner(System.in); + System.out.println("구입 금액을 입력해 주세요."); + int amount = sc.nextInt(); + System.out.println((amount / 1000) + "개를 구매했습니다."); + } } diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 519793d1..dfec4e68 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -1,5 +1,8 @@ package lotto; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; import java.util.List; public class Lotto { @@ -12,9 +15,7 @@ public Lotto(List numbers) { private void validate(List numbers) { if (numbers.size() != 6) { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("[ERROR]"); } } - - // TODO: 추가 기능 구현 } From f25afa13abcfe444f7da21059a77194426e27f6d Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Tue, 1 Oct 2024 01:21:06 +0900 Subject: [PATCH 02/21] =?UTF-8?q?refactor:=20=EB=A1=9C=EB=98=90=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C,=20=EB=B0=B0=EC=97=B4=20=EC=82=AC=EC=9A=A9=ED=95=B4?= =?UTF-8?q?=20=EB=A1=9C=EB=98=90=20=EB=B2=88=ED=98=B8=20=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Application.java | 46 ++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index f7fa16f3..8e63d207 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,26 +1,54 @@ package lotto; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Scanner; +import static org.assertj.core.internal.bytebuddy.utility.RandomString.make; + public class Application { public static void main(String[] args) { - //LottoMaker lottoMaker = new LottoMaker(); - //System.out.println(lottoMaker.getLottoNum()); - - - LottoRepository repository = new LottoRepository(); - System.out.println(repository.getLottoSaved()); run(); - //System.out.println(repository.getLottoSaved()); + // TODO: 프로그램 구현 } private static void run() { + LottoMaker lottoMaker = new LottoMaker(); + Scanner sc = new Scanner(System.in); System.out.println("구입 금액을 입력해 주세요."); - int amount = sc.nextInt(); - System.out.println((amount / 1000) + "개를 구매했습니다."); + int amount = sc.nextInt() / 1000; + System.out.println(amount + "개를 구매했습니다."); + lottoMaker.generate(amount); + + System.out.println("당첨 번호를 입력해 주세요."); + List numbers = new ArrayList<>(); + String input = sc.next(); + String[] targetNum = input.split(","); + for (String num : targetNum) { + numbers.add(Integer.parseInt(num.trim())); + } + Lotto userLotto = new Lotto(numbers);//사용자 로또 저장 + + + System.out.println("보너스 번호를 입력해 주세요."); + int bonusNum = sc.nextInt(); + + System.out.println("당첨 통계"); + System.out.println("---"); + //각각에 맞느 숫자 구현하면 됨. + + System.out.println("3개 일치 (5,000원)" + "개" ); + System.out.println("4개 일치 (50,000원)" ); + System.out.println("5개 일치, 보너스 볼 일치 (1,500,000원)" ); + System.out.println("6개 일치 (1,000,000,000원)" ); + + System.out.println("총 수익률은 " + "입니다."); + + } + + } From aec94ea28a81f442e9843b82738f4f7b927555ca Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Tue, 1 Oct 2024 21:47:52 +0900 Subject: [PATCH 03/21] =?UTF-8?q?refactor:=20=EA=B5=AC=ED=98=84=EB=A7=8C?= =?UTF-8?q?=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO: 기능별로 역할 분리 필요 --- src/main/java/lotto/Application.java | 72 ++++++++++++++++++++++------ src/main/java/lotto/Lotto.java | 13 +++-- src/main/java/lotto/LottoMaker.java | 36 ++++++++++++++ 3 files changed, 102 insertions(+), 19 deletions(-) create mode 100644 src/main/java/lotto/LottoMaker.java diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index 8e63d207..09eea9c1 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,9 +1,6 @@ package lotto; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; +import java.util.*; import static org.assertj.core.internal.bytebuddy.utility.RandomString.make; @@ -19,17 +16,19 @@ private static void run() { Scanner sc = new Scanner(System.in); System.out.println("구입 금액을 입력해 주세요."); - int amount = sc.nextInt() / 1000; + int inputMoney = sc.nextInt(); + int amount = inputMoney / 1000; System.out.println(amount + "개를 구매했습니다."); lottoMaker.generate(amount); System.out.println("당첨 번호를 입력해 주세요."); List numbers = new ArrayList<>(); - String input = sc.next(); - String[] targetNum = input.split(","); + String inputNum = sc.next(); + String[] targetNum = inputNum.split(","); for (String num : targetNum) { - numbers.add(Integer.parseInt(num.trim())); + numbers.add(Integer.parseInt(num.trim())); } + Lotto userLotto = new Lotto(numbers);//사용자 로또 저장 @@ -38,14 +37,59 @@ private static void run() { System.out.println("당첨 통계"); System.out.println("---"); - //각각에 맞느 숫자 구현하면 됨. - System.out.println("3개 일치 (5,000원)" + "개" ); - System.out.println("4개 일치 (50,000원)" ); - System.out.println("5개 일치, 보너스 볼 일치 (1,500,000원)" ); - System.out.println("6개 일치 (1,000,000,000원)" ); - System.out.println("총 수익률은 " + "입니다."); + //루프 돌리면서 하나씩 꺼내고 비교 반복 + + int first = 0; + int third = 0; + int fourth = 0; + int fifth = 0; + int second = 0; + + Iterator> lottoList = lottoMaker.lottoSaved.iterator(); + while (lottoList.hasNext()) { + List current = lottoList.next(); + int count = 0; // 매번 current에 대해 초기화 + + // userLotto의 숫자와 current 비교 + for (Integer element : userLotto) { // userLotto에서 번호 가져오기 + if (current.contains(element)) { + count++; + } + } + + // count에 따른 조건 처리 + if (count == 6) { + first++; // 6개 일치 + } else if (count == 5) { + if (current.contains(bonusNum)) { + second++; // 5개 일치 + 보너스 번호 + } else { + third++; // 5개 일치 + } + } else if (count == 4) { + fourth++; // 4개 일치 + } else if (count == 3) { + fifth++; // 3개 일치 + } + } + + int firstPrice = 1000000000; + int secondPrice = 30000000; + int thirdPrice = 1500000; + int fourthPrice = 50000; + int fifthPrice = 5000; + + System.out.println("3개 일치 (5,000원)" + fifth + "개"); + System.out.println("4개 일치 (50,000원)" + fourth + "개"); + System.out.println("5개 일치 (1,500,000원)" + third + "개"); + System.out.println("5개 일치, 보너스 볼 일치 (30,000,000원)" + second + "개"); + System.out.println("6개 일치 (1,000,000,000원)" + first + "개"); + + double totalPrice = (double) (fifthPrice * fifth + fourthPrice * fourth + thirdPrice * third + secondPrice * second + firstPrice * first) / inputMoney * 100; + + System.out.println("총 수익률은 " + totalPrice + "% 입니다."); } diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index dfec4e68..8f2097f3 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -1,11 +1,8 @@ package lotto; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; +import java.util.*; -public class Lotto { +public class Lotto implements Iterable { private final List numbers; public Lotto(List numbers) { @@ -18,4 +15,10 @@ private void validate(List numbers) { throw new IllegalArgumentException("[ERROR]"); } } + + + @Override + public Iterator iterator() { + return numbers.iterator(); + } } diff --git a/src/main/java/lotto/LottoMaker.java b/src/main/java/lotto/LottoMaker.java new file mode 100644 index 00000000..2ae43ec1 --- /dev/null +++ b/src/main/java/lotto/LottoMaker.java @@ -0,0 +1,36 @@ +package lotto; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class LottoMaker { + + List> lottoSaved = new ArrayList<>(); + //생성된 로또 숫자는 배열에 저장 + private List makeNum() { + List lottoNum = new ArrayList<>(); + while (lottoNum.size() < 6) { + int lotto = (int) ((Math.random() * 45) + 1); + if (!lottoNum.contains(lotto)) { + lottoNum.add(lotto); + } + } + Collections.sort(lottoNum); //정렬 추가 + return lottoNum; + } + + + public void generate(int amount) { + + //숫자 받아서 그만큼 로또 생성하기 + for (int i = 0; i < amount; i++) { + List lotto = makeNum(); + System.out.println(lotto); + lottoSaved.add(lotto); + } + + } + + +} From 620166ddc2bb32a9f01da4579fa6d3d3b81ea3b9 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Wed, 2 Oct 2024 03:53:06 +0900 Subject: [PATCH 04/21] =?UTF-8?q?refactor:=20LottoRank=20Enum=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EA=B5=AC=ED=98=84.=20LottoService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO: 기능별로 더 자세한 역할 분리 필요 --- docs/README.md | 7 ++ src/main/java/lotto/Application.java | 89 +-------------------- src/main/java/lotto/Lotto.java | 2 +- src/main/java/lotto/LottoRank.java | 35 ++++++++ src/main/java/lotto/LottoService.java | 111 ++++++++++++++++++++++++++ 5 files changed, 158 insertions(+), 86 deletions(-) create mode 100644 src/main/java/lotto/LottoRank.java create mode 100644 src/main/java/lotto/LottoService.java diff --git a/docs/README.md b/docs/README.md index e69de29b..93da78f6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,7 @@ +Application : 메인 실행 클래스 + +LottoService : 로또 생성 및 계산 + +LottoResult(ENUM 사용) : 당첨 결과 관리 + +Lotto: 사용자 번호 저장 \ No newline at end of file diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index 09eea9c1..e2dbc498 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -2,97 +2,16 @@ import java.util.*; +import static lotto.LottoRank.*; import static org.assertj.core.internal.bytebuddy.utility.RandomString.make; public class Application { public static void main(String[] args) { - run(); - - // TODO: 프로그램 구현 - } - - private static void run() { - LottoMaker lottoMaker = new LottoMaker(); - - Scanner sc = new Scanner(System.in); - System.out.println("구입 금액을 입력해 주세요."); - int inputMoney = sc.nextInt(); - int amount = inputMoney / 1000; - System.out.println(amount + "개를 구매했습니다."); - lottoMaker.generate(amount); - - System.out.println("당첨 번호를 입력해 주세요."); - List numbers = new ArrayList<>(); - String inputNum = sc.next(); - String[] targetNum = inputNum.split(","); - for (String num : targetNum) { - numbers.add(Integer.parseInt(num.trim())); - } - - Lotto userLotto = new Lotto(numbers);//사용자 로또 저장 - - - System.out.println("보너스 번호를 입력해 주세요."); - int bonusNum = sc.nextInt(); - - System.out.println("당첨 통계"); - System.out.println("---"); - - - //루프 돌리면서 하나씩 꺼내고 비교 반복 - - int first = 0; - int third = 0; - int fourth = 0; - int fifth = 0; - int second = 0; - - Iterator> lottoList = lottoMaker.lottoSaved.iterator(); - while (lottoList.hasNext()) { - List current = lottoList.next(); - int count = 0; // 매번 current에 대해 초기화 - - // userLotto의 숫자와 current 비교 - for (Integer element : userLotto) { // userLotto에서 번호 가져오기 - if (current.contains(element)) { - count++; - } - } - - // count에 따른 조건 처리 - if (count == 6) { - first++; // 6개 일치 - } else if (count == 5) { - if (current.contains(bonusNum)) { - second++; // 5개 일치 + 보너스 번호 - } else { - third++; // 5개 일치 - } - } else if (count == 4) { - fourth++; // 4개 일치 - } else if (count == 3) { - fifth++; // 3개 일치 - } - } - - int firstPrice = 1000000000; - int secondPrice = 30000000; - int thirdPrice = 1500000; - int fourthPrice = 50000; - int fifthPrice = 5000; - - System.out.println("3개 일치 (5,000원)" + fifth + "개"); - System.out.println("4개 일치 (50,000원)" + fourth + "개"); - System.out.println("5개 일치 (1,500,000원)" + third + "개"); - System.out.println("5개 일치, 보너스 볼 일치 (30,000,000원)" + second + "개"); - System.out.println("6개 일치 (1,000,000,000원)" + first + "개"); - - double totalPrice = (double) (fifthPrice * fifth + fourthPrice * fourth + thirdPrice * third + secondPrice * second + firstPrice * first) / inputMoney * 100; - - System.out.println("총 수익률은 " + totalPrice + "% 입니다."); + LottoService service = new LottoService(); + service.run(); + // TODO: 프로그램 구현 } - } diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 8f2097f3..ae578a31 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -1,7 +1,7 @@ package lotto; import java.util.*; - +//외부에서 들어온 숫자가 맞나만 관리하면 된다. public class Lotto implements Iterable { private final List numbers; diff --git a/src/main/java/lotto/LottoRank.java b/src/main/java/lotto/LottoRank.java new file mode 100644 index 00000000..6242579e --- /dev/null +++ b/src/main/java/lotto/LottoRank.java @@ -0,0 +1,35 @@ +package lotto; + +public enum LottoRank { + FIRST(1000000000, 0), + SECOND(30000000, 0), + THIRD(1500000, 0), + FOURTH(50000, 0), + FIFTH(5000, 0); + + private final int lottoPrize; + + private int quantity; + + LottoRank(int lottoPrize, int quantity) { + this.lottoPrize = lottoPrize; + this.quantity = quantity; + } + + public int getLottoPrize() { + return lottoPrize; + } + + + public int getQuantity() { + return quantity; + } + + public void setQuantity(int quantity) { + this.quantity = quantity; + } + + public double getLottoTotalPrize() { + return getLottoPrize() * getQuantity(); + } +} diff --git a/src/main/java/lotto/LottoService.java b/src/main/java/lotto/LottoService.java new file mode 100644 index 00000000..d985988e --- /dev/null +++ b/src/main/java/lotto/LottoService.java @@ -0,0 +1,111 @@ +package lotto; + +import java.util.*; + +import static lotto.LottoRank.*; +import static lotto.LottoRank.FIFTH; + +//로또 생성 및 계산 +public class LottoService { + static LottoMaker lottoMaker = new LottoMaker(); + + Scanner sc = new Scanner(System.in); + + + public void run() { + int inputMoney = getInputMoney(); + generateLottoNum(inputMoney); + Lotto userLotto = inputNumber(); + int bonusNum = getBonusNum(); + lottoComparison(userLotto, bonusNum); + print(inputMoney); + } + + private int getBonusNum() { + System.out.println("보너스 번호를 입력해 주세요."); + int bonusNum = sc.nextInt(); + return bonusNum; + } + + private int getInputMoney() { + System.out.println("구입 금액을 입력해 주세요."); + int inputMoney = sc.nextInt(); + return inputMoney; + } + + private static void lottoComparison(Lotto userLotto, int bonusNum) { + Iterator> lottoList = lottoSavedLooping(); + while (lottoList.hasNext()) { + List current = lottoList.next(); + int sameNumbers = 0; // 매번 current에 대해 초기화 + + // userLotto의 숫자와 current 비교 + for (Integer element : userLotto) { // userLotto에서 번호 가져오기 + if (current.contains(element)) { + sameNumbers++; + } + } + if (sameNumbers == 6) { + FIRST.setQuantity(FIRST.getQuantity() + 1);// 6개 일치 + continue; + } + if (sameNumbers == 5 && current.contains(bonusNum)) { + SECOND.setQuantity(SECOND.getQuantity() + 1); // 5개 일치 + 보너스 번호 + continue; + } + + if (sameNumbers == 5) { + THIRD.setQuantity(THIRD.getQuantity() + 1); // 5개 일치 + continue; + } + + if (sameNumbers == 4) { + FOURTH.setQuantity(FOURTH.getQuantity() + 1); // 4개 일치 + continue; + } + + if (sameNumbers == 3) { + FIFTH.setQuantity(FIFTH.getQuantity() + 1);// 3개 일치 + } + } + } + + private static Iterator> lottoSavedLooping() { + return lottoMaker.lottoSaved.iterator(); + } + + private Lotto inputNumber() { + System.out.println("당첨 번호를 입력해 주세요."); + List numbers = new ArrayList<>(); + String inputNum = sc.next(); + String[] targetNum = inputNum.split(","); + for (String num : targetNum) { + numbers.add(Integer.parseInt(num.trim())); + } + Collections.sort(numbers); //어떻게 입력 받든 정렬하기. + return new Lotto(numbers);//사용자 로또 저장 후 반환 + } + + private void generateLottoNum(int inputMoney) { + + int amount = inputMoney / 1000; + System.out.println(amount + "개를 구매했습니다."); + lottoMaker.generate(amount); + } + + private void print(int inputMoney) { + System.out.println("당첨 통계"); + System.out.println("---"); + System.out.println("3개 일치 (5,000원)" + FIFTH.getQuantity() + "개"); + System.out.println("4개 일치 (50,000원)" + FOURTH.getQuantity() + "개"); + System.out.println("5개 일치 (1,500,000원)" + THIRD.getQuantity() + "개"); + System.out.println("5개 일치, 보너스 볼 일치 (30,000,000원)" + SECOND.getQuantity() + "개"); + System.out.println("6개 일치 (1,000,000,000원)" + FIRST.getQuantity() + "개"); + + + double totalPrice = (FIFTH.getLottoTotalPrize() + FOURTH.getLottoTotalPrize() + THIRD.getLottoTotalPrize() + SECOND.getLottoTotalPrize() + FIRST.getLottoTotalPrize()) / inputMoney * 100; + + + System.out.println("총 수익률은 " + totalPrice + "% 입니다."); + } +} From 9779e891541c530b6ecf3cbf6deda46ba1fa9430 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Wed, 2 Oct 2024 13:16:39 +0900 Subject: [PATCH 05/21] =?UTF-8?q?refactor:=20MVC=20=ED=8C=A8=ED=84=B4=20?= =?UTF-8?q?=EA=B5=AC=EC=82=AC=20=EC=9C=84=ED=95=B4=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=ED=99=94.=20feat:=EB=A1=9C=EB=98=90=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EB=B9=84=EA=B5=90=20=EA=B8=B0=EB=8A=A5,=20enum?= =?UTF-8?q?=ED=99=9C=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO: 요구사항 라이브러리 사용해야 함.예외 구사애햐 함. --- README.md | 6 +- docs/README.md | 2 +- src/main/java/{lotto => }/Application.java | 5 +- src/main/java/lotto/LottoService.java | 111 ------------------ .../java/lottoController/LottoService.java | 33 ++++++ .../java/{lotto => lottoModel}/Lotto.java | 2 +- .../{lotto => lottoModel}/LottoMaker.java | 4 +- .../java/{lotto => lottoModel}/LottoRank.java | 2 +- .../{lotto => lottoView}/ApplicationTest.java | 2 +- .../java/{lotto => lottoView}/LottoTest.java | 3 +- 10 files changed, 45 insertions(+), 125 deletions(-) rename src/main/java/{lotto => }/Application.java (79%) delete mode 100644 src/main/java/lotto/LottoService.java create mode 100644 src/main/java/lottoController/LottoService.java rename src/main/java/{lotto => lottoModel}/Lotto.java (96%) rename src/main/java/{lotto => lottoModel}/LottoMaker.java (90%) rename src/main/java/{lotto => lottoModel}/LottoRank.java (96%) rename src/test/java/{lotto => lottoView}/ApplicationTest.java (99%) rename src/test/java/{lotto => lottoView}/LottoTest.java (95%) diff --git a/README.md b/README.md index f482eab2..46be0fc9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 객체지향 코드 연습 - 로또([우아한테크코스 프리코스 - lotto](https://github.com/woowacourse-precourse/java-lotto)) +# 객체지향 코드 연습 - 로또([우아한테크코스 프리코스 - lottoView](https://github.com/woowacourse-precourse/java-lotto)) ## 🔍 진행 방식 @@ -179,7 +179,7 @@ BUILD SUCCESSFUL in 0s - Java Enum을 적용한다. - 도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(System.out, System.in, Scanner) 로직은 제외한다. - 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 분리해 구현한다. - - 단위 테스트 작성이 익숙하지 않다면 `test/java/lotto/LottoTest`를 참고하여 학습한 후 테스트를 구현한다. + - 단위 테스트 작성이 익숙하지 않다면 `test/java/lottoView/LottoTest`를 참고하여 학습한 후 테스트를 구현한다. ### 라이브러리 @@ -224,7 +224,7 @@ public class Lotto { ## ✏️ 과제 진행 요구 사항 -- 미션은 [practice-oop-lotto](https://github.com/COW-edu/practice-oop-lotto) 저장소를 Fork & Clone해 시작한다. +- 미션은 [practice-oop-lottoView](https://github.com/COW-edu/practice-oop-lotto) 저장소를 Fork & Clone해 시작한다. - **기능을 구현하기 전 `docs/README.md`에 구현할 기능 목록을 정리**해 추가한다. - **Git의 커밋 단위는 앞 단계에서 `docs/README.md`에 정리한 기능 목록 단위**로 추가한다. - [커밋 메시지 컨벤션](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) 가이드를 참고해 커밋 메시지를 작성한다. diff --git a/docs/README.md b/docs/README.md index 93da78f6..f701a0b0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,6 +2,6 @@ Application : 메인 실행 클래스 LottoService : 로또 생성 및 계산 -LottoResult(ENUM 사용) : 당첨 결과 관리 +LottoRankENUM 사용) : 당첨 결과 관리 Lotto: 사용자 번호 저장 \ No newline at end of file diff --git a/src/main/java/lotto/Application.java b/src/main/java/Application.java similarity index 79% rename from src/main/java/lotto/Application.java rename to src/main/java/Application.java index e2dbc498..46cd7079 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/Application.java @@ -1,8 +1,5 @@ -package lotto; +import lottoController.LottoService; -import java.util.*; - -import static lotto.LottoRank.*; import static org.assertj.core.internal.bytebuddy.utility.RandomString.make; public class Application { diff --git a/src/main/java/lotto/LottoService.java b/src/main/java/lotto/LottoService.java deleted file mode 100644 index d985988e..00000000 --- a/src/main/java/lotto/LottoService.java +++ /dev/null @@ -1,111 +0,0 @@ -package lotto; - -import java.util.*; - -import static lotto.LottoRank.*; -import static lotto.LottoRank.FIFTH; - -//로또 생성 및 계산 -public class LottoService { - static LottoMaker lottoMaker = new LottoMaker(); - - Scanner sc = new Scanner(System.in); - - - public void run() { - int inputMoney = getInputMoney(); - generateLottoNum(inputMoney); - Lotto userLotto = inputNumber(); - int bonusNum = getBonusNum(); - lottoComparison(userLotto, bonusNum); - print(inputMoney); - } - - private int getBonusNum() { - System.out.println("보너스 번호를 입력해 주세요."); - int bonusNum = sc.nextInt(); - return bonusNum; - } - - private int getInputMoney() { - System.out.println("구입 금액을 입력해 주세요."); - int inputMoney = sc.nextInt(); - return inputMoney; - } - - private static void lottoComparison(Lotto userLotto, int bonusNum) { - Iterator> lottoList = lottoSavedLooping(); - while (lottoList.hasNext()) { - List current = lottoList.next(); - int sameNumbers = 0; // 매번 current에 대해 초기화 - - // userLotto의 숫자와 current 비교 - for (Integer element : userLotto) { // userLotto에서 번호 가져오기 - if (current.contains(element)) { - sameNumbers++; - } - } - if (sameNumbers == 6) { - FIRST.setQuantity(FIRST.getQuantity() + 1);// 6개 일치 - continue; - } - if (sameNumbers == 5 && current.contains(bonusNum)) { - SECOND.setQuantity(SECOND.getQuantity() + 1); // 5개 일치 + 보너스 번호 - continue; - } - - if (sameNumbers == 5) { - THIRD.setQuantity(THIRD.getQuantity() + 1); // 5개 일치 - continue; - } - - if (sameNumbers == 4) { - FOURTH.setQuantity(FOURTH.getQuantity() + 1); // 4개 일치 - continue; - } - - if (sameNumbers == 3) { - FIFTH.setQuantity(FIFTH.getQuantity() + 1);// 3개 일치 - } - } - } - - private static Iterator> lottoSavedLooping() { - return lottoMaker.lottoSaved.iterator(); - } - - private Lotto inputNumber() { - System.out.println("당첨 번호를 입력해 주세요."); - List numbers = new ArrayList<>(); - String inputNum = sc.next(); - String[] targetNum = inputNum.split(","); - for (String num : targetNum) { - numbers.add(Integer.parseInt(num.trim())); - } - Collections.sort(numbers); //어떻게 입력 받든 정렬하기. - return new Lotto(numbers);//사용자 로또 저장 후 반환 - } - - private void generateLottoNum(int inputMoney) { - - int amount = inputMoney / 1000; - System.out.println(amount + "개를 구매했습니다."); - lottoMaker.generate(amount); - } - - private void print(int inputMoney) { - System.out.println("당첨 통계"); - System.out.println("---"); - System.out.println("3개 일치 (5,000원)" + FIFTH.getQuantity() + "개"); - System.out.println("4개 일치 (50,000원)" + FOURTH.getQuantity() + "개"); - System.out.println("5개 일치 (1,500,000원)" + THIRD.getQuantity() + "개"); - System.out.println("5개 일치, 보너스 볼 일치 (30,000,000원)" + SECOND.getQuantity() + "개"); - System.out.println("6개 일치 (1,000,000,000원)" + FIRST.getQuantity() + "개"); - - - double totalPrice = (FIFTH.getLottoTotalPrize() + FOURTH.getLottoTotalPrize() + THIRD.getLottoTotalPrize() + SECOND.getLottoTotalPrize() + FIRST.getLottoTotalPrize()) / inputMoney * 100; - - - System.out.println("총 수익률은 " + totalPrice + "% 입니다."); - } -} diff --git a/src/main/java/lottoController/LottoService.java b/src/main/java/lottoController/LottoService.java new file mode 100644 index 00000000..96c9eede --- /dev/null +++ b/src/main/java/lottoController/LottoService.java @@ -0,0 +1,33 @@ +package lottoController; + +import lottoModel.Lotto; +import lottoModel.LottoComparison; +import lottoModel.LottoMaker; +import lottoView.LottoViewer; + +//로또 생성 및 계산 +public class LottoService { + static LottoMaker lottoMaker = new LottoMaker(); + private final LottoViewer lottoViewer = new LottoViewer(); + private final LottoComparison lottoComparison = new LottoComparison(); + + public void run() { + int inputMoney = lottoViewer.getInputMoney(); + generateLottoNum(inputMoney); + + Lotto userLotto = lottoViewer.inputNumber(); + int bonusNum = lottoViewer.getBonusNum(); + + lottoComparison.lottoComparison(userLotto, bonusNum); + + lottoViewer.print(inputMoney); + } + + private void generateLottoNum(int inputMoney) { + + int amount = inputMoney / 1000; + System.out.println(amount + "개를 구매했습니다."); + lottoMaker.generate(amount); + } + +} diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lottoModel/Lotto.java similarity index 96% rename from src/main/java/lotto/Lotto.java rename to src/main/java/lottoModel/Lotto.java index ae578a31..eede38d7 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lottoModel/Lotto.java @@ -1,4 +1,4 @@ -package lotto; +package lottoModel; import java.util.*; //외부에서 들어온 숫자가 맞나만 관리하면 된다. diff --git a/src/main/java/lotto/LottoMaker.java b/src/main/java/lottoModel/LottoMaker.java similarity index 90% rename from src/main/java/lotto/LottoMaker.java rename to src/main/java/lottoModel/LottoMaker.java index 2ae43ec1..c95b0802 100644 --- a/src/main/java/lotto/LottoMaker.java +++ b/src/main/java/lottoModel/LottoMaker.java @@ -1,4 +1,4 @@ -package lotto; +package lottoModel; import java.util.ArrayList; import java.util.Collections; @@ -6,7 +6,7 @@ public class LottoMaker { - List> lottoSaved = new ArrayList<>(); + static List> lottoSaved = new ArrayList<>(); //생성된 로또 숫자는 배열에 저장 private List makeNum() { List lottoNum = new ArrayList<>(); diff --git a/src/main/java/lotto/LottoRank.java b/src/main/java/lottoModel/LottoRank.java similarity index 96% rename from src/main/java/lotto/LottoRank.java rename to src/main/java/lottoModel/LottoRank.java index 6242579e..9fc4a325 100644 --- a/src/main/java/lotto/LottoRank.java +++ b/src/main/java/lottoModel/LottoRank.java @@ -1,4 +1,4 @@ -package lotto; +package lottoModel; public enum LottoRank { FIRST(1000000000, 0), diff --git a/src/test/java/lotto/ApplicationTest.java b/src/test/java/lottoView/ApplicationTest.java similarity index 99% rename from src/test/java/lotto/ApplicationTest.java rename to src/test/java/lottoView/ApplicationTest.java index a15c7d1f..84a75a0c 100644 --- a/src/test/java/lotto/ApplicationTest.java +++ b/src/test/java/lottoView/ApplicationTest.java @@ -1,4 +1,4 @@ -package lotto; +package lottoView; import camp.nextstep.edu.missionutils.test.NsTest; import org.junit.jupiter.api.Test; diff --git a/src/test/java/lotto/LottoTest.java b/src/test/java/lottoView/LottoTest.java similarity index 95% rename from src/test/java/lotto/LottoTest.java rename to src/test/java/lottoView/LottoTest.java index 0f3af0f6..17d47767 100644 --- a/src/test/java/lotto/LottoTest.java +++ b/src/test/java/lottoView/LottoTest.java @@ -1,5 +1,6 @@ -package lotto; +package lottoView; +import lottoModel.Lotto; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; From 5194cd6adf9e74ce33fce1869dd95746b20050d8 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Wed, 2 Oct 2024 13:17:06 +0900 Subject: [PATCH 06/21] =?UTF-8?q?refactor:=20MVC=20=ED=8C=A8=ED=84=B4=20?= =?UTF-8?q?=EA=B5=AC=EC=82=AC=20=EC=9C=84=ED=95=B4=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=ED=99=94.=20feat:=EB=A1=9C=EB=98=90=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EB=B9=84=EA=B5=90=20=EA=B8=B0=EB=8A=A5,=20enum?= =?UTF-8?q?=ED=99=9C=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO: 요구사항 라이브러리 사용해야 함.예외 구사애햐 함. --- src/main/java/lottoModel/LottoComparison.java | 52 +++++++++++++++++ src/main/java/lottoView/LottoViewer.java | 56 +++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 src/main/java/lottoModel/LottoComparison.java create mode 100644 src/main/java/lottoView/LottoViewer.java diff --git a/src/main/java/lottoModel/LottoComparison.java b/src/main/java/lottoModel/LottoComparison.java new file mode 100644 index 00000000..8f4df4e4 --- /dev/null +++ b/src/main/java/lottoModel/LottoComparison.java @@ -0,0 +1,52 @@ +package lottoModel; + +import java.util.Iterator; +import java.util.List; + +import static lottoModel.LottoRank.*; +import static lottoModel.LottoRank.FIFTH; + +public class LottoComparison { + + public void lottoComparison(Lotto userLotto, int bonusNum) { + Iterator> lottoList = lottoSavedLooping(); + while (lottoList.hasNext()) { + List current = lottoList.next(); + int sameNumbers = 0; // 매번 current에 대해 초기화 + + // userLotto의 숫자와 current 비교 + for (Integer element : userLotto) { // userLotto에서 번호 가져오기 + if (current.contains(element)) { + sameNumbers++; + } + } + if (sameNumbers == 6) { + FIRST.setQuantity(FIRST.getQuantity() + 1);// 6개 일치 + continue; + } + if (sameNumbers == 5 && current.contains(bonusNum)) { + SECOND.setQuantity(SECOND.getQuantity() + 1); // 5개 일치 + 보너스 번호 + continue; + } + + if (sameNumbers == 5) { + THIRD.setQuantity(THIRD.getQuantity() + 1); // 5개 일치 + continue; + } + + if (sameNumbers == 4) { + FOURTH.setQuantity(FOURTH.getQuantity() + 1); // 4개 일치 + continue; + } + + if (sameNumbers == 3) { + FIFTH.setQuantity(FIFTH.getQuantity() + 1);// 3개 일치 + } + } + } + + private static Iterator> lottoSavedLooping() { + return LottoMaker.lottoSaved.iterator(); + } + +} diff --git a/src/main/java/lottoView/LottoViewer.java b/src/main/java/lottoView/LottoViewer.java new file mode 100644 index 00000000..d7624b17 --- /dev/null +++ b/src/main/java/lottoView/LottoViewer.java @@ -0,0 +1,56 @@ +package lottoView; + +import lottoModel.Lotto; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Scanner; + +import static lottoModel.LottoRank.*; +import static lottoModel.LottoRank.FIRST; + +public class LottoViewer { + Scanner sc = new Scanner(System.in); + + public int getBonusNum() { + System.out.println("보너스 번호를 입력해 주세요."); + int bonusNum = sc.nextInt(); + return bonusNum; + } + + public int getInputMoney() { + System.out.println("구입 금액을 입력해 주세요."); + int inputMoney = sc.nextInt(); + return inputMoney; + } + + public Lotto inputNumber() { + System.out.println("당첨 번호를 입력해 주세요."); + List numbers = new ArrayList<>(); + String inputNum = sc.next(); + String[] targetNum = inputNum.split(","); + for (String num : targetNum) { + numbers.add(Integer.parseInt(num.trim())); + } + Collections.sort(numbers); //어떻게 입력 받든 정렬하기. + return new Lotto(numbers);//사용자 로또 저장 후 반환 + } + + public void print(int inputMoney) { + System.out.println("당첨 통계"); + System.out.println("---"); + System.out.println("3개 일치 (5,000원)" + FIFTH.getQuantity() + "개"); + System.out.println("4개 일치 (50,000원)" + FOURTH.getQuantity() + "개"); + System.out.println("5개 일치 (1,500,000원)" + THIRD.getQuantity() + "개"); + System.out.println("5개 일치, 보너스 볼 일치 (30,000,000원)" + SECOND.getQuantity() + "개"); + System.out.println("6개 일치 (1,000,000,000원)" + FIRST.getQuantity() + "개"); + + + double totalPrice = (FIFTH.getLottoTotalPrize() + FOURTH.getLottoTotalPrize() + THIRD.getLottoTotalPrize() + SECOND.getLottoTotalPrize() + FIRST.getLottoTotalPrize()) / inputMoney * 100; + + + System.out.println("총 수익률은 " + totalPrice + "% 입니다."); + } + +} From e6981f8c116de60fd2bc8a7f021beeef15f65bb0 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Wed, 2 Oct 2024 13:18:57 +0900 Subject: [PATCH 07/21] =?UTF-8?q?refactor:=20Application=20test=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO: 요구사항 라이브러리 사용해야 함.예외 구사애햐 함. --- src/test/java/{lottoView => }/ApplicationTest.java | 2 -- 1 file changed, 2 deletions(-) rename src/test/java/{lottoView => }/ApplicationTest.java (99%) diff --git a/src/test/java/lottoView/ApplicationTest.java b/src/test/java/ApplicationTest.java similarity index 99% rename from src/test/java/lottoView/ApplicationTest.java rename to src/test/java/ApplicationTest.java index 84a75a0c..72255f8d 100644 --- a/src/test/java/lottoView/ApplicationTest.java +++ b/src/test/java/ApplicationTest.java @@ -1,5 +1,3 @@ -package lottoView; - import camp.nextstep.edu.missionutils.test.NsTest; import org.junit.jupiter.api.Test; From 906539e8b1ec6affda28925673b6bff8bef457ea Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Wed, 2 Oct 2024 16:39:04 +0900 Subject: [PATCH 08/21] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=BB=A8=EB=B2=A4=EC=85=98=20=EC=88=98=EC=A0=95,=20=EB=A7=A4?= =?UTF-8?q?=EC=A7=81=EB=84=98=EB=B2=84=20=EC=88=98=EC=A0=95=20feat:=20Outp?= =?UTF-8?q?utMessage=20Enum=EC=9C=BC=EB=A1=9C=20=EA=B5=AC=ED=98=84,=20Lott?= =?UTF-8?q?oOutput=20=EA=B0=81=EA=B0=81=EC=9D=98=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO: 요구사항 라이브러리 사용해야 함.예외 구사애햐 함. --- .../java/lottoController/LottoService.java | 32 +++++------ .../{LottoComparison.java => Comparator.java} | 18 +++--- src/main/java/lottoModel/Lotto.java | 4 +- src/main/java/lottoModel/LottoMaker.java | 8 +-- src/main/java/lottoModel/OutputMessage.java | 20 +++++++ src/main/java/lottoView/LottoInput.java | 38 +++++++++++++ src/main/java/lottoView/LottoOutput.java | 43 ++++++++++++++ src/main/java/lottoView/LottoViewer.java | 56 ------------------- 8 files changed, 128 insertions(+), 91 deletions(-) rename src/main/java/lottoModel/{LottoComparison.java => Comparator.java} (61%) create mode 100644 src/main/java/lottoModel/OutputMessage.java create mode 100644 src/main/java/lottoView/LottoInput.java create mode 100644 src/main/java/lottoView/LottoOutput.java delete mode 100644 src/main/java/lottoView/LottoViewer.java diff --git a/src/main/java/lottoController/LottoService.java b/src/main/java/lottoController/LottoService.java index 96c9eede..c6ea6482 100644 --- a/src/main/java/lottoController/LottoService.java +++ b/src/main/java/lottoController/LottoService.java @@ -1,33 +1,27 @@ package lottoController; import lottoModel.Lotto; -import lottoModel.LottoComparison; -import lottoModel.LottoMaker; -import lottoView.LottoViewer; +import lottoModel.Comparator; +import lottoView.LottoInput; +import lottoView.LottoOutput; + -//로또 생성 및 계산 public class LottoService { - static LottoMaker lottoMaker = new LottoMaker(); - private final LottoViewer lottoViewer = new LottoViewer(); - private final LottoComparison lottoComparison = new LottoComparison(); + private final LottoInput lottoInput = new LottoInput(); + private final LottoOutput lottoOutput = new LottoOutput(); + private final Comparator comparator = new Comparator(); public void run() { - int inputMoney = lottoViewer.getInputMoney(); - generateLottoNum(inputMoney); + int inputMoney = lottoInput.getInputMoney(); + lottoOutput.generateLottoNum(inputMoney); - Lotto userLotto = lottoViewer.inputNumber(); - int bonusNum = lottoViewer.getBonusNum(); + Lotto userLotto = lottoInput.inputNumber(); + int bonusNum = lottoInput.getBonusNum(); + comparator.lottoComparison(userLotto, bonusNum); + lottoOutput.print(inputMoney); - lottoComparison.lottoComparison(userLotto, bonusNum); - lottoViewer.print(inputMoney); } - private void generateLottoNum(int inputMoney) { - - int amount = inputMoney / 1000; - System.out.println(amount + "개를 구매했습니다."); - lottoMaker.generate(amount); - } } diff --git a/src/main/java/lottoModel/LottoComparison.java b/src/main/java/lottoModel/Comparator.java similarity index 61% rename from src/main/java/lottoModel/LottoComparison.java rename to src/main/java/lottoModel/Comparator.java index 8f4df4e4..81465910 100644 --- a/src/main/java/lottoModel/LottoComparison.java +++ b/src/main/java/lottoModel/Comparator.java @@ -6,41 +6,41 @@ import static lottoModel.LottoRank.*; import static lottoModel.LottoRank.FIFTH; -public class LottoComparison { +public class Comparator { public void lottoComparison(Lotto userLotto, int bonusNum) { Iterator> lottoList = lottoSavedLooping(); while (lottoList.hasNext()) { List current = lottoList.next(); - int sameNumbers = 0; // 매번 current에 대해 초기화 + int sameNumbers = 0; - // userLotto의 숫자와 current 비교 - for (Integer element : userLotto) { // userLotto에서 번호 가져오기 + + for (Integer element : userLotto) { if (current.contains(element)) { sameNumbers++; } } if (sameNumbers == 6) { - FIRST.setQuantity(FIRST.getQuantity() + 1);// 6개 일치 + FIRST.setQuantity(FIRST.getQuantity() + 1); continue; } if (sameNumbers == 5 && current.contains(bonusNum)) { - SECOND.setQuantity(SECOND.getQuantity() + 1); // 5개 일치 + 보너스 번호 + SECOND.setQuantity(SECOND.getQuantity() + 1); continue; } if (sameNumbers == 5) { - THIRD.setQuantity(THIRD.getQuantity() + 1); // 5개 일치 + THIRD.setQuantity(THIRD.getQuantity() + 1); continue; } if (sameNumbers == 4) { - FOURTH.setQuantity(FOURTH.getQuantity() + 1); // 4개 일치 + FOURTH.setQuantity(FOURTH.getQuantity() + 1); continue; } if (sameNumbers == 3) { - FIFTH.setQuantity(FIFTH.getQuantity() + 1);// 3개 일치 + FIFTH.setQuantity(FIFTH.getQuantity() + 1); } } } diff --git a/src/main/java/lottoModel/Lotto.java b/src/main/java/lottoModel/Lotto.java index eede38d7..0192f036 100644 --- a/src/main/java/lottoModel/Lotto.java +++ b/src/main/java/lottoModel/Lotto.java @@ -1,7 +1,7 @@ package lottoModel; import java.util.*; -//외부에서 들어온 숫자가 맞나만 관리하면 된다. + public class Lotto implements Iterable { private final List numbers; @@ -12,7 +12,7 @@ public Lotto(List numbers) { private void validate(List numbers) { if (numbers.size() != 6) { - throw new IllegalArgumentException("[ERROR]"); + throw new IllegalArgumentException("[ERROR] 6개의 숫자만 입력해주세요."); } } diff --git a/src/main/java/lottoModel/LottoMaker.java b/src/main/java/lottoModel/LottoMaker.java index c95b0802..26f88027 100644 --- a/src/main/java/lottoModel/LottoMaker.java +++ b/src/main/java/lottoModel/LottoMaker.java @@ -7,8 +7,7 @@ public class LottoMaker { static List> lottoSaved = new ArrayList<>(); - //생성된 로또 숫자는 배열에 저장 - private List makeNum() { + private static List createNum() { List lottoNum = new ArrayList<>(); while (lottoNum.size() < 6) { int lotto = (int) ((Math.random() * 45) + 1); @@ -21,11 +20,10 @@ private List makeNum() { } - public void generate(int amount) { + public static void generate(int amount) { - //숫자 받아서 그만큼 로또 생성하기 for (int i = 0; i < amount; i++) { - List lotto = makeNum(); + List lotto = createNum(); System.out.println(lotto); lottoSaved.add(lotto); } diff --git a/src/main/java/lottoModel/OutputMessage.java b/src/main/java/lottoModel/OutputMessage.java new file mode 100644 index 00000000..c963f545 --- /dev/null +++ b/src/main/java/lottoModel/OutputMessage.java @@ -0,0 +1,20 @@ +package lottoModel; + +public enum OutputMessage { + AMOUNT_OUTPUT("%s개를 구매했습니다."), + FIFTH_OUTPUT("3개 일치 (5,000원)-%S개"), + FOURTH_OUTPUT("4개 일치 (50,000원)-%S개"), + THIRD_OUTPUT("5개 일치 (1,500,000원)-%S개"), + SECOND_OUTPUT("5개 일치, 보너스 볼 일치 (30,000,000원)-%S개"), + FIRST_OUTPUT("6개 일치 (1,000,000,000원)-%S개"); + + private final String message; + + OutputMessage(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } +} diff --git a/src/main/java/lottoView/LottoInput.java b/src/main/java/lottoView/LottoInput.java new file mode 100644 index 00000000..fc11c14f --- /dev/null +++ b/src/main/java/lottoView/LottoInput.java @@ -0,0 +1,38 @@ +package lottoView; + +import lottoModel.Lotto; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Scanner; + + +public class LottoInput { + Scanner sc = new Scanner(System.in); + + public int getBonusNum() { + System.out.println("보너스 번호를 입력해 주세요."); + int bonusNum = sc.nextInt(); + return bonusNum; + } + + public int getInputMoney() { + System.out.println("구입 금액을 입력해 주세요."); + int inputMoney = sc.nextInt(); + return inputMoney; + } + + public Lotto inputNumber() { + System.out.println("당첨 번호를 입력해 주세요."); + List numbers = new ArrayList<>(); + String inputNum = sc.next(); + String[] targetNum = inputNum.split(","); + for (String num : targetNum) { + numbers.add(Integer.parseInt(num.trim())); + } + Collections.sort(numbers); + return new Lotto(numbers); + } + +} diff --git a/src/main/java/lottoView/LottoOutput.java b/src/main/java/lottoView/LottoOutput.java new file mode 100644 index 00000000..4e69b7b0 --- /dev/null +++ b/src/main/java/lottoView/LottoOutput.java @@ -0,0 +1,43 @@ +package lottoView; + +import lottoModel.LottoMaker; +import lottoModel.LottoRank; +import lottoModel.OutputMessage; + +import static lottoModel.LottoRank.*; +import static lottoModel.OutputMessage.*; + +public class LottoOutput { + + + public void generateLottoNum(int inputMoney) { + int unitMoney = 1000; + int amount = inputMoney / unitMoney; + System.out.println(String.format(AMOUNT_OUTPUT.getMessage(), amount)); + LottoMaker.generate(amount); + } + + + + public void print(int inputMoney) { + System.out.println("당첨 통계"); + System.out.println("---"); + printEachMessage(FIFTH,FIFTH_OUTPUT); + printEachMessage(FOURTH,FOURTH_OUTPUT); + printEachMessage(THIRD,THIRD_OUTPUT); + printEachMessage(SECOND,SECOND_OUTPUT); + printEachMessage(FIRST,FIRST_OUTPUT); + + + int percentUnit = 100; + double totalPrice = (FIFTH.getLottoTotalPrize() + FOURTH.getLottoTotalPrize() + THIRD.getLottoTotalPrize() + SECOND.getLottoTotalPrize() + FIRST.getLottoTotalPrize()) / inputMoney * percentUnit; + + System.out.println("총 수익률은 " + totalPrice + "% 입니다."); + + + } + + private static void printEachMessage(LottoRank rank, OutputMessage output) { + System.out.println(String.format(output.getMessage(),rank.getQuantity())); + } +} diff --git a/src/main/java/lottoView/LottoViewer.java b/src/main/java/lottoView/LottoViewer.java deleted file mode 100644 index d7624b17..00000000 --- a/src/main/java/lottoView/LottoViewer.java +++ /dev/null @@ -1,56 +0,0 @@ -package lottoView; - -import lottoModel.Lotto; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Scanner; - -import static lottoModel.LottoRank.*; -import static lottoModel.LottoRank.FIRST; - -public class LottoViewer { - Scanner sc = new Scanner(System.in); - - public int getBonusNum() { - System.out.println("보너스 번호를 입력해 주세요."); - int bonusNum = sc.nextInt(); - return bonusNum; - } - - public int getInputMoney() { - System.out.println("구입 금액을 입력해 주세요."); - int inputMoney = sc.nextInt(); - return inputMoney; - } - - public Lotto inputNumber() { - System.out.println("당첨 번호를 입력해 주세요."); - List numbers = new ArrayList<>(); - String inputNum = sc.next(); - String[] targetNum = inputNum.split(","); - for (String num : targetNum) { - numbers.add(Integer.parseInt(num.trim())); - } - Collections.sort(numbers); //어떻게 입력 받든 정렬하기. - return new Lotto(numbers);//사용자 로또 저장 후 반환 - } - - public void print(int inputMoney) { - System.out.println("당첨 통계"); - System.out.println("---"); - System.out.println("3개 일치 (5,000원)" + FIFTH.getQuantity() + "개"); - System.out.println("4개 일치 (50,000원)" + FOURTH.getQuantity() + "개"); - System.out.println("5개 일치 (1,500,000원)" + THIRD.getQuantity() + "개"); - System.out.println("5개 일치, 보너스 볼 일치 (30,000,000원)" + SECOND.getQuantity() + "개"); - System.out.println("6개 일치 (1,000,000,000원)" + FIRST.getQuantity() + "개"); - - - double totalPrice = (FIFTH.getLottoTotalPrize() + FOURTH.getLottoTotalPrize() + THIRD.getLottoTotalPrize() + SECOND.getLottoTotalPrize() + FIRST.getLottoTotalPrize()) / inputMoney * 100; - - - System.out.println("총 수익률은 " + totalPrice + "% 입니다."); - } - -} From 4627efd22abd485efd6195aeb55f4c18afd7144a Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Thu, 3 Oct 2024 22:20:08 +0900 Subject: [PATCH 09/21] =?UTF-8?q?refactor:=20=EC=A0=9C=EA=B3=B5=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO:예외 구사애햐 함. --- src/main/java/lottoModel/LottoMaker.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/lottoModel/LottoMaker.java b/src/main/java/lottoModel/LottoMaker.java index 26f88027..67f5a254 100644 --- a/src/main/java/lottoModel/LottoMaker.java +++ b/src/main/java/lottoModel/LottoMaker.java @@ -1,5 +1,7 @@ package lottoModel; +import camp.nextstep.edu.missionutils.Randoms; + import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -8,14 +10,8 @@ public class LottoMaker { static List> lottoSaved = new ArrayList<>(); private static List createNum() { - List lottoNum = new ArrayList<>(); - while (lottoNum.size() < 6) { - int lotto = (int) ((Math.random() * 45) + 1); - if (!lottoNum.contains(lotto)) { - lottoNum.add(lotto); - } - } - Collections.sort(lottoNum); //정렬 추가 + List lottoNum = Randoms.pickUniqueNumbersInRange(1, 45, 6); + Collections.sort(lottoNum); return lottoNum; } From ba59f4f67da1599931e84b2cfe5aeda5d5299eda Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Fri, 4 Oct 2024 00:36:49 +0900 Subject: [PATCH 10/21] =?UTF-8?q?refactor:=20=EC=B6=94=EC=83=81=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=83=81=EC=88=98=20=EA=B4=80=EB=A6=AC.=20?= =?UTF-8?q?=EC=88=98=EC=9D=B5=EB=A5=A0=20=EB=B0=98=EC=98=AC=EB=A6=BC=20?= =?UTF-8?q?=EA=B0=80=EB=8A=A5=ED=95=98=EC=84=B8=20=EB=B3=80=EA=B2=BD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: 각 예외 구사, TODO: 예외를 한 클래스에서 관리 --- src/main/java/lottoModel/UNIT.java | 8 ++++++++ src/main/java/lottoView/LottoInput.java | 21 ++++++++++++++++++--- src/main/java/lottoView/LottoOutput.java | 10 ++++++---- 3 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 src/main/java/lottoModel/UNIT.java diff --git a/src/main/java/lottoModel/UNIT.java b/src/main/java/lottoModel/UNIT.java new file mode 100644 index 00000000..29598a16 --- /dev/null +++ b/src/main/java/lottoModel/UNIT.java @@ -0,0 +1,8 @@ +package lottoModel; + +public abstract class UNIT { + public static final int UNIT_MONEY = 1000; + public static final int PERCENT_UNIT = 100; + public static final int MAX_NUMBER = 45; + public static final int MIN_NUMBER = 1; +} diff --git a/src/main/java/lottoView/LottoInput.java b/src/main/java/lottoView/LottoInput.java index fc11c14f..30449b69 100644 --- a/src/main/java/lottoView/LottoInput.java +++ b/src/main/java/lottoView/LottoInput.java @@ -1,6 +1,7 @@ package lottoView; import lottoModel.Lotto; +import lottoModel.UNIT; import java.util.ArrayList; import java.util.Collections; @@ -13,13 +14,20 @@ public class LottoInput { public int getBonusNum() { System.out.println("보너스 번호를 입력해 주세요."); - int bonusNum = sc.nextInt(); - return bonusNum; + int bonusNumber = sc.nextInt(); + if (bonusNumber < UNIT.MIN_NUMBER || bonusNumber > UNIT.MAX_NUMBER) { + throw new IllegalArgumentException("[ERROR] 1부터 45사이의 숫자를 입력해 주세요."); + } + return bonusNumber; + } public int getInputMoney() { System.out.println("구입 금액을 입력해 주세요."); int inputMoney = sc.nextInt(); + if (inputMoney % UNIT.UNIT_MONEY != 0) { + throw new IllegalArgumentException("[ERROR] 1000원 단위로 입력해 주세요."); + } return inputMoney; } @@ -29,7 +37,14 @@ public Lotto inputNumber() { String inputNum = sc.next(); String[] targetNum = inputNum.split(","); for (String num : targetNum) { - numbers.add(Integer.parseInt(num.trim())); + int addNumber = Integer.parseInt(num.trim()); + if (addNumber > UNIT.MAX_NUMBER) { + throw new NumberFormatException("[ERROR] 1번에서 45번 이내의 숫자를 입력해 주세요."); + } + if (numbers.contains(addNumber)){ + throw new NumberFormatException("[ERROR] 중복된 숫자가 입력되었습니다."); + } + numbers.add(addNumber); } Collections.sort(numbers); return new Lotto(numbers); diff --git a/src/main/java/lottoView/LottoOutput.java b/src/main/java/lottoView/LottoOutput.java index 4e69b7b0..6f4328b4 100644 --- a/src/main/java/lottoView/LottoOutput.java +++ b/src/main/java/lottoView/LottoOutput.java @@ -3,6 +3,7 @@ import lottoModel.LottoMaker; import lottoModel.LottoRank; import lottoModel.OutputMessage; +import lottoModel.UNIT; import static lottoModel.LottoRank.*; import static lottoModel.OutputMessage.*; @@ -28,10 +29,11 @@ public void print(int inputMoney) { printEachMessage(SECOND,SECOND_OUTPUT); printEachMessage(FIRST,FIRST_OUTPUT); - - int percentUnit = 100; - double totalPrice = (FIFTH.getLottoTotalPrize() + FOURTH.getLottoTotalPrize() + THIRD.getLottoTotalPrize() + SECOND.getLottoTotalPrize() + FIRST.getLottoTotalPrize()) / inputMoney * percentUnit; - + double totalPrice = Math.round(((FIFTH.getLottoTotalPrize() + + FOURTH.getLottoTotalPrize() + + THIRD.getLottoTotalPrize() + + SECOND.getLottoTotalPrize() + + FIRST.getLottoTotalPrize()) / inputMoney * UNIT.PERCENT_UNIT) * 10) / 10.0; System.out.println("총 수익률은 " + totalPrice + "% 입니다."); From 338173cb0fd0c4e763e9373588c578edda58ff78 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Fri, 4 Oct 2024 08:03:37 +0900 Subject: [PATCH 11/21] =?UTF-8?q?refactor:=20Enum=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=20=EB=B3=80=EA=B2=BD,=20OutputMessage=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20view=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO: --- src/main/java/exception/ErrorCode.java | 18 ++++++++++++++++++ src/main/java/lottoModel/Lotto.java | 6 +++++- src/main/java/lottoView/LottoInput.java | 11 +++++++---- src/main/java/lottoView/LottoOutput.java | 17 +++++++++-------- .../OutputMessage.java | 2 +- 5 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 src/main/java/exception/ErrorCode.java rename src/main/java/{lottoModel => lottoView}/OutputMessage.java (96%) diff --git a/src/main/java/exception/ErrorCode.java b/src/main/java/exception/ErrorCode.java new file mode 100644 index 00000000..040ad29e --- /dev/null +++ b/src/main/java/exception/ErrorCode.java @@ -0,0 +1,18 @@ +package exception; + +public enum ErrorCode { + OUT_OF_RANGE("[ERROR] 1부터 45사이의 숫자를 입력해 주세요."), + DUPLICATE_NUMBER("ERROR] 중복된 숫자가 입력되었습니다."), + OUT_OF_UNIT("[ERROR] 1000원 단위로 입력해 주세요."), + INVALID_NUMBER_COUNT("[ERROR] 6개의 숫자만 입력해주세요."); + + private final String errorCode; + + ErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + public String getErrorCode() { + return errorCode; + } +} diff --git a/src/main/java/lottoModel/Lotto.java b/src/main/java/lottoModel/Lotto.java index 0192f036..66534263 100644 --- a/src/main/java/lottoModel/Lotto.java +++ b/src/main/java/lottoModel/Lotto.java @@ -1,7 +1,11 @@ package lottoModel; +import exception.ErrorCode; + import java.util.*; +import static exception.ErrorCode.*; + public class Lotto implements Iterable { private final List numbers; @@ -12,7 +16,7 @@ public Lotto(List numbers) { private void validate(List numbers) { if (numbers.size() != 6) { - throw new IllegalArgumentException("[ERROR] 6개의 숫자만 입력해주세요."); + throw new IllegalArgumentException(INVALID_NUMBER_COUNT.getErrorCode()); } } diff --git a/src/main/java/lottoView/LottoInput.java b/src/main/java/lottoView/LottoInput.java index 30449b69..f3052ef2 100644 --- a/src/main/java/lottoView/LottoInput.java +++ b/src/main/java/lottoView/LottoInput.java @@ -1,5 +1,6 @@ package lottoView; +import exception.ErrorCode; import lottoModel.Lotto; import lottoModel.UNIT; @@ -8,6 +9,8 @@ import java.util.List; import java.util.Scanner; +import static exception.ErrorCode.*; + public class LottoInput { Scanner sc = new Scanner(System.in); @@ -16,7 +19,7 @@ public int getBonusNum() { System.out.println("보너스 번호를 입력해 주세요."); int bonusNumber = sc.nextInt(); if (bonusNumber < UNIT.MIN_NUMBER || bonusNumber > UNIT.MAX_NUMBER) { - throw new IllegalArgumentException("[ERROR] 1부터 45사이의 숫자를 입력해 주세요."); + throw new IllegalArgumentException(OUT_OF_RANGE.getErrorCode()); } return bonusNumber; @@ -26,7 +29,7 @@ public int getInputMoney() { System.out.println("구입 금액을 입력해 주세요."); int inputMoney = sc.nextInt(); if (inputMoney % UNIT.UNIT_MONEY != 0) { - throw new IllegalArgumentException("[ERROR] 1000원 단위로 입력해 주세요."); + throw new IllegalArgumentException(OUT_OF_UNIT.getErrorCode()); } return inputMoney; } @@ -39,10 +42,10 @@ public Lotto inputNumber() { for (String num : targetNum) { int addNumber = Integer.parseInt(num.trim()); if (addNumber > UNIT.MAX_NUMBER) { - throw new NumberFormatException("[ERROR] 1번에서 45번 이내의 숫자를 입력해 주세요."); + throw new NumberFormatException(OUT_OF_RANGE.getErrorCode()); } if (numbers.contains(addNumber)){ - throw new NumberFormatException("[ERROR] 중복된 숫자가 입력되었습니다."); + throw new NumberFormatException(DUPLICATE_NUMBER.getErrorCode()); } numbers.add(addNumber); } diff --git a/src/main/java/lottoView/LottoOutput.java b/src/main/java/lottoView/LottoOutput.java index 6f4328b4..2bd57ea8 100644 --- a/src/main/java/lottoView/LottoOutput.java +++ b/src/main/java/lottoView/LottoOutput.java @@ -2,11 +2,10 @@ import lottoModel.LottoMaker; import lottoModel.LottoRank; -import lottoModel.OutputMessage; import lottoModel.UNIT; import static lottoModel.LottoRank.*; -import static lottoModel.OutputMessage.*; +import static lottoView.OutputMessage.*; public class LottoOutput { @@ -29,14 +28,16 @@ public void print(int inputMoney) { printEachMessage(SECOND,SECOND_OUTPUT); printEachMessage(FIRST,FIRST_OUTPUT); - double totalPrice = Math.round(((FIFTH.getLottoTotalPrize() - + FOURTH.getLottoTotalPrize() - + THIRD.getLottoTotalPrize() - + SECOND.getLottoTotalPrize() - + FIRST.getLottoTotalPrize()) / inputMoney * UNIT.PERCENT_UNIT) * 10) / 10.0; + double totalPrice = getTotalPrice(inputMoney); System.out.println("총 수익률은 " + totalPrice + "% 입니다."); + } - + private static double getTotalPrice(int inputMoney) { + return Math.round(((FIFTH.getLottoTotalPrize() + + FOURTH.getLottoTotalPrize() + + THIRD.getLottoTotalPrize() + + SECOND.getLottoTotalPrize() + + FIRST.getLottoTotalPrize()) / inputMoney * UNIT.PERCENT_UNIT) * 10) / 10.0; } private static void printEachMessage(LottoRank rank, OutputMessage output) { diff --git a/src/main/java/lottoModel/OutputMessage.java b/src/main/java/lottoView/OutputMessage.java similarity index 96% rename from src/main/java/lottoModel/OutputMessage.java rename to src/main/java/lottoView/OutputMessage.java index c963f545..bf16e5d4 100644 --- a/src/main/java/lottoModel/OutputMessage.java +++ b/src/main/java/lottoView/OutputMessage.java @@ -1,4 +1,4 @@ -package lottoModel; +package lottoView; public enum OutputMessage { AMOUNT_OUTPUT("%s개를 구매했습니다."), From 8250e7d56e08ef65ba00cff7bcb645d34aa213c7 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Tue, 8 Oct 2024 02:16:40 +0900 Subject: [PATCH 12/21] =?UTF-8?q?refactor:=20LottoRepository=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1,=20LottoService=20=EC=83=9D=EC=84=B1,=20=ED=94=BC?= =?UTF-8?q?=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: LottoRepository 싱글톤으로 관리. TODO: Stream으로 LottoComparator 관리하기, SetQuantity 사용하지 않기. --- README.md | 6 +-- src/main/java/AppConfig.java | 38 +++++++++++++++ src/main/java/Application.java | 12 ++--- .../{ErrorCode.java => ErrorMessage.java} | 12 ++--- .../java/lottoController/LottoService.java | 27 ----------- src/main/java/lottoModel/LottoMaker.java | 30 ------------ src/main/java/lottoModel/UNIT.java | 8 ---- .../java/lottocontroller/LottoController.java | 27 +++++++++++ .../{lottoModel => lottomodel}/Lotto.java | 17 ++++--- .../LottoComparator.java} | 31 ++++++------ src/main/java/lottomodel/LottoGenerator.java | 47 +++++++++++++++++++ .../{lottoModel => lottomodel}/LottoRank.java | 3 +- src/main/java/lottomodel/LottoRepository.java | 26 ++++++++++ src/main/java/lottomodel/LottoService.java | 19 ++++++++ src/main/java/lottomodel/Unit.java | 19 ++++++++ .../{lottoView => lottoview}/LottoInput.java | 24 +++++----- .../{lottoView => lottoview}/LottoOutput.java | 35 ++++++-------- .../OutputMessage.java | 2 +- .../{lottoView => lottoview}/LottoTest.java | 4 +- 19 files changed, 245 insertions(+), 142 deletions(-) create mode 100644 src/main/java/AppConfig.java rename src/main/java/exception/{ErrorCode.java => ErrorMessage.java} (60%) delete mode 100644 src/main/java/lottoController/LottoService.java delete mode 100644 src/main/java/lottoModel/LottoMaker.java delete mode 100644 src/main/java/lottoModel/UNIT.java create mode 100644 src/main/java/lottocontroller/LottoController.java rename src/main/java/{lottoModel => lottomodel}/Lotto.java (66%) rename src/main/java/{lottoModel/Comparator.java => lottomodel/LottoComparator.java} (59%) create mode 100644 src/main/java/lottomodel/LottoGenerator.java rename src/main/java/{lottoModel => lottomodel}/LottoRank.java (96%) create mode 100644 src/main/java/lottomodel/LottoRepository.java create mode 100644 src/main/java/lottomodel/LottoService.java create mode 100644 src/main/java/lottomodel/Unit.java rename src/main/java/{lottoView => lottoview}/LottoInput.java (77%) rename src/main/java/{lottoView => lottoview}/LottoOutput.java (56%) rename src/main/java/{lottoView => lottoview}/OutputMessage.java (96%) rename src/test/java/{lottoView => lottoview}/LottoTest.java (95%) diff --git a/README.md b/README.md index 46be0fc9..83edf7bd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 객체지향 코드 연습 - 로또([우아한테크코스 프리코스 - lottoView](https://github.com/woowacourse-precourse/java-lotto)) +# 객체지향 코드 연습 - 로또([우아한테크코스 프리코스 - lottoview](https://github.com/woowacourse-precourse/java-lotto)) ## 🔍 진행 방식 @@ -179,7 +179,7 @@ BUILD SUCCESSFUL in 0s - Java Enum을 적용한다. - 도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(System.out, System.in, Scanner) 로직은 제외한다. - 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 분리해 구현한다. - - 단위 테스트 작성이 익숙하지 않다면 `test/java/lottoView/LottoTest`를 참고하여 학습한 후 테스트를 구현한다. + - 단위 테스트 작성이 익숙하지 않다면 `test/java/lottoview/LottoTest`를 참고하여 학습한 후 테스트를 구현한다. ### 라이브러리 @@ -224,7 +224,7 @@ public class Lotto { ## ✏️ 과제 진행 요구 사항 -- 미션은 [practice-oop-lottoView](https://github.com/COW-edu/practice-oop-lotto) 저장소를 Fork & Clone해 시작한다. +- 미션은 [practice-oop-lottoview](https://github.com/COW-edu/practice-oop-lotto) 저장소를 Fork & Clone해 시작한다. - **기능을 구현하기 전 `docs/README.md`에 구현할 기능 목록을 정리**해 추가한다. - **Git의 커밋 단위는 앞 단계에서 `docs/README.md`에 정리한 기능 목록 단위**로 추가한다. - [커밋 메시지 컨벤션](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) 가이드를 참고해 커밋 메시지를 작성한다. diff --git a/src/main/java/AppConfig.java b/src/main/java/AppConfig.java new file mode 100644 index 00000000..6e12f410 --- /dev/null +++ b/src/main/java/AppConfig.java @@ -0,0 +1,38 @@ +import lottocontroller.LottoController; +import lottomodel.LottoComparator; +import lottomodel.LottoGenerator; +import lottomodel.LottoRepository; +import lottomodel.LottoService; +import lottoview.LottoInput; +import lottoview.LottoOutput; + +public class AppConfig { + public LottoInput lottoInput() { + return new LottoInput(); + } + + public LottoOutput lottoOutput() { + return new LottoOutput(); + } + + public LottoComparator lottoComparator() { + return new LottoComparator(lottoRepository()); + } + + public LottoGenerator lottoGenerator() { + return new LottoGenerator(lottoRepository()); + } + + public LottoRepository lottoRepository() { + return LottoRepository.getInstance(); + } + + public LottoService lottoService() { + return new LottoService(lottoComparator(), lottoGenerator()); + } + + public LottoController lottoController() { + return new LottoController(lottoInput(), lottoOutput(), lottoService()); + } + +} diff --git a/src/main/java/Application.java b/src/main/java/Application.java index 46cd7079..0949c1d4 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -1,14 +1,10 @@ -import lottoController.LottoService; - -import static org.assertj.core.internal.bytebuddy.utility.RandomString.make; +import lottocontroller.LottoController; public class Application { public static void main(String[] args) { - LottoService service = new LottoService(); - service.run(); - + AppConfig appConfig = new AppConfig(); + LottoController lottoController = appConfig.lottoController(); - // TODO: 프로그램 구현 + lottoController.run(); } - } diff --git a/src/main/java/exception/ErrorCode.java b/src/main/java/exception/ErrorMessage.java similarity index 60% rename from src/main/java/exception/ErrorCode.java rename to src/main/java/exception/ErrorMessage.java index 040ad29e..2468416e 100644 --- a/src/main/java/exception/ErrorCode.java +++ b/src/main/java/exception/ErrorMessage.java @@ -1,18 +1,18 @@ package exception; -public enum ErrorCode { +public enum ErrorMessage { OUT_OF_RANGE("[ERROR] 1부터 45사이의 숫자를 입력해 주세요."), DUPLICATE_NUMBER("ERROR] 중복된 숫자가 입력되었습니다."), OUT_OF_UNIT("[ERROR] 1000원 단위로 입력해 주세요."), INVALID_NUMBER_COUNT("[ERROR] 6개의 숫자만 입력해주세요."); - private final String errorCode; + private final String errorMessage; - ErrorCode(String errorCode) { - this.errorCode = errorCode; + ErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; } - public String getErrorCode() { - return errorCode; + public String getErrorMessage() { + return errorMessage; } } diff --git a/src/main/java/lottoController/LottoService.java b/src/main/java/lottoController/LottoService.java deleted file mode 100644 index c6ea6482..00000000 --- a/src/main/java/lottoController/LottoService.java +++ /dev/null @@ -1,27 +0,0 @@ -package lottoController; - -import lottoModel.Lotto; -import lottoModel.Comparator; -import lottoView.LottoInput; -import lottoView.LottoOutput; - - -public class LottoService { - private final LottoInput lottoInput = new LottoInput(); - private final LottoOutput lottoOutput = new LottoOutput(); - private final Comparator comparator = new Comparator(); - - public void run() { - int inputMoney = lottoInput.getInputMoney(); - lottoOutput.generateLottoNum(inputMoney); - - Lotto userLotto = lottoInput.inputNumber(); - int bonusNum = lottoInput.getBonusNum(); - comparator.lottoComparison(userLotto, bonusNum); - lottoOutput.print(inputMoney); - - - } - - -} diff --git a/src/main/java/lottoModel/LottoMaker.java b/src/main/java/lottoModel/LottoMaker.java deleted file mode 100644 index 67f5a254..00000000 --- a/src/main/java/lottoModel/LottoMaker.java +++ /dev/null @@ -1,30 +0,0 @@ -package lottoModel; - -import camp.nextstep.edu.missionutils.Randoms; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class LottoMaker { - - static List> lottoSaved = new ArrayList<>(); - private static List createNum() { - List lottoNum = Randoms.pickUniqueNumbersInRange(1, 45, 6); - Collections.sort(lottoNum); - return lottoNum; - } - - - public static void generate(int amount) { - - for (int i = 0; i < amount; i++) { - List lotto = createNum(); - System.out.println(lotto); - lottoSaved.add(lotto); - } - - } - - -} diff --git a/src/main/java/lottoModel/UNIT.java b/src/main/java/lottoModel/UNIT.java deleted file mode 100644 index 29598a16..00000000 --- a/src/main/java/lottoModel/UNIT.java +++ /dev/null @@ -1,8 +0,0 @@ -package lottoModel; - -public abstract class UNIT { - public static final int UNIT_MONEY = 1000; - public static final int PERCENT_UNIT = 100; - public static final int MAX_NUMBER = 45; - public static final int MIN_NUMBER = 1; -} diff --git a/src/main/java/lottocontroller/LottoController.java b/src/main/java/lottocontroller/LottoController.java new file mode 100644 index 00000000..833b55ae --- /dev/null +++ b/src/main/java/lottocontroller/LottoController.java @@ -0,0 +1,27 @@ +package lottocontroller; + +import lottomodel.Lotto; +import lottomodel.LottoService; +import lottoview.LottoInput; +import lottoview.LottoOutput; + +public class LottoController { + private final LottoInput lottoInput; + private final LottoOutput lottoOutput; + private final LottoService lottoService; + + public LottoController(LottoInput lottoInput, LottoOutput lottoOutput, LottoService lottoService) { + this.lottoInput = lottoInput; + this.lottoOutput = lottoOutput; + this.lottoService = lottoService; + } + + public void run() { + int inputMoney = lottoInput.getInputMoney(); + lottoService.printLotto(inputMoney); + Lotto targetLotto = lottoInput.inputNumber(); + int bonusNumber = lottoInput.getBonusNum(); + lottoService.lottoCompare(targetLotto, bonusNumber); + lottoOutput.resultPrint(inputMoney); + } +} diff --git a/src/main/java/lottoModel/Lotto.java b/src/main/java/lottomodel/Lotto.java similarity index 66% rename from src/main/java/lottoModel/Lotto.java rename to src/main/java/lottomodel/Lotto.java index 66534263..90744333 100644 --- a/src/main/java/lottoModel/Lotto.java +++ b/src/main/java/lottomodel/Lotto.java @@ -1,10 +1,8 @@ -package lottoModel; - -import exception.ErrorCode; +package lottomodel; import java.util.*; -import static exception.ErrorCode.*; +import static exception.ErrorMessage.*; public class Lotto implements Iterable { private final List numbers; @@ -16,13 +14,20 @@ public Lotto(List numbers) { private void validate(List numbers) { if (numbers.size() != 6) { - throw new IllegalArgumentException(INVALID_NUMBER_COUNT.getErrorCode()); + throw new IllegalArgumentException(INVALID_NUMBER_COUNT.getErrorMessage()); } } - @Override public Iterator iterator() { return numbers.iterator(); } + + public boolean contains(Integer element) { + return numbers.contains(element); + } + + public List getNumbers() { + return numbers; + } } diff --git a/src/main/java/lottoModel/Comparator.java b/src/main/java/lottomodel/LottoComparator.java similarity index 59% rename from src/main/java/lottoModel/Comparator.java rename to src/main/java/lottomodel/LottoComparator.java index 81465910..e804f760 100644 --- a/src/main/java/lottoModel/Comparator.java +++ b/src/main/java/lottomodel/LottoComparator.java @@ -1,19 +1,23 @@ -package lottoModel; +package lottomodel; import java.util.Iterator; -import java.util.List; -import static lottoModel.LottoRank.*; -import static lottoModel.LottoRank.FIFTH; +import static lottomodel.LottoRank.*; +import static lottomodel.LottoRank.FIFTH; -public class Comparator { +public class LottoComparator { - public void lottoComparison(Lotto userLotto, int bonusNum) { - Iterator> lottoList = lottoSavedLooping(); - while (lottoList.hasNext()) { - List current = lottoList.next(); - int sameNumbers = 0; + private final LottoRepository lottoRepository; + + public LottoComparator(LottoRepository lottoRepository) { + this.lottoRepository = lottoRepository; + } + public void compare(Lotto userLotto, int bonusNumber) { + Iterator lottoNumbers = lottoRepository.getLottoSaved().iterator(); + while (lottoNumbers.hasNext()) { + Lotto current = lottoNumbers.next(); + int sameNumbers = 0; for (Integer element : userLotto) { if (current.contains(element)) { @@ -24,7 +28,7 @@ public void lottoComparison(Lotto userLotto, int bonusNum) { FIRST.setQuantity(FIRST.getQuantity() + 1); continue; } - if (sameNumbers == 5 && current.contains(bonusNum)) { + if (sameNumbers == 5 && current.contains(bonusNumber)) { SECOND.setQuantity(SECOND.getQuantity() + 1); continue; } @@ -44,9 +48,4 @@ public void lottoComparison(Lotto userLotto, int bonusNum) { } } } - - private static Iterator> lottoSavedLooping() { - return LottoMaker.lottoSaved.iterator(); - } - } diff --git a/src/main/java/lottomodel/LottoGenerator.java b/src/main/java/lottomodel/LottoGenerator.java new file mode 100644 index 00000000..0403f241 --- /dev/null +++ b/src/main/java/lottomodel/LottoGenerator.java @@ -0,0 +1,47 @@ +package lottomodel; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.Collections; +import java.util.List; + +import static lottoview.OutputMessage.AMOUNT_OUTPUT; + +public class LottoGenerator { + private final LottoRepository lottoRepository; + + public LottoGenerator(LottoRepository lottoRepository) { + this.lottoRepository = lottoRepository; + } + + int lottoAmount = 0; + + public void printLottoSaved(int inputMoney) { + lottoAmount = getLottoAmount(inputMoney); + lottoAlign(inputMoney); + System.out.printf((AMOUNT_OUTPUT.getMessage()) + "%n", lottoAmount); + lottoRepository.getLottoSaved().stream().forEach(item -> System.out.println(item.getNumbers())); + } + + private void lottoAlign(int inputMoney) { + lottoAmount = getLottoAmount(inputMoney); + for (int i = 0; i < lottoAmount; i++) { + Lotto generatedNumber = numberGenerate(); + lottoSave(generatedNumber); + } + } + + private Lotto numberGenerate() { + Lotto lotto = new Lotto(Randoms.pickUniqueNumbersInRange(Unit.MIN_NUMBER.getValue(), Unit.MAX_NUMBER.getValue(), Unit.UNIT_LOTTO_NUMBER.getValue())); + Collections.sort(lotto.getNumbers()); + return lotto; + } + + private static int getLottoAmount(int inputMoney) { + return inputMoney / Unit.UNIT_MONEY.getValue(); + } + + private void lottoSave(Lotto generatedNumber) { + lottoRepository.save(generatedNumber); + } +} diff --git a/src/main/java/lottoModel/LottoRank.java b/src/main/java/lottomodel/LottoRank.java similarity index 96% rename from src/main/java/lottoModel/LottoRank.java rename to src/main/java/lottomodel/LottoRank.java index 9fc4a325..e70ee256 100644 --- a/src/main/java/lottoModel/LottoRank.java +++ b/src/main/java/lottomodel/LottoRank.java @@ -1,4 +1,4 @@ -package lottoModel; +package lottomodel; public enum LottoRank { FIRST(1000000000, 0), @@ -20,7 +20,6 @@ public int getLottoPrize() { return lottoPrize; } - public int getQuantity() { return quantity; } diff --git a/src/main/java/lottomodel/LottoRepository.java b/src/main/java/lottomodel/LottoRepository.java new file mode 100644 index 00000000..8bc77cd7 --- /dev/null +++ b/src/main/java/lottomodel/LottoRepository.java @@ -0,0 +1,26 @@ +package lottomodel; + +import java.util.ArrayList; +import java.util.List; + +public class LottoRepository { + + private static final LottoRepository instance = new LottoRepository(); // 싱글턴 인스턴스 + private final List lottoSaved; // Lotto 저장 리스트 + + private LottoRepository() { + lottoSaved = new ArrayList<>(); + } + + public static LottoRepository getInstance() { + return instance; + } + + public List getLottoSaved() { + return lottoSaved; + } + + public void save(Lotto lotto) { + lottoSaved.add(lotto); + } +} diff --git a/src/main/java/lottomodel/LottoService.java b/src/main/java/lottomodel/LottoService.java new file mode 100644 index 00000000..da1163cb --- /dev/null +++ b/src/main/java/lottomodel/LottoService.java @@ -0,0 +1,19 @@ +package lottomodel; + +public class LottoService { + private final LottoComparator lottoComparator; + private final LottoGenerator lottoGenerator; + + public LottoService(LottoComparator lottoComparator, LottoGenerator lottoGenerator) { + this.lottoComparator = lottoComparator; + this.lottoGenerator = lottoGenerator; + } + + public void lottoCompare(Lotto targetLotto, int bonusNumber) { + lottoComparator.compare(targetLotto, bonusNumber); + } + + public void printLotto(int inputMoney) { + lottoGenerator.printLottoSaved(inputMoney); + } +} diff --git a/src/main/java/lottomodel/Unit.java b/src/main/java/lottomodel/Unit.java new file mode 100644 index 00000000..8b1fc0f5 --- /dev/null +++ b/src/main/java/lottomodel/Unit.java @@ -0,0 +1,19 @@ +package lottomodel; + +public enum Unit { + UNIT_MONEY(1000), + PERCENT_UNIT(100), + MAX_NUMBER(45), + MIN_NUMBER(1), + UNIT_LOTTO_NUMBER(6); + + private final int value; + + Unit(int value) { + this.value = value; + } + + public int getValue() { + return value; + } +} diff --git a/src/main/java/lottoView/LottoInput.java b/src/main/java/lottoview/LottoInput.java similarity index 77% rename from src/main/java/lottoView/LottoInput.java rename to src/main/java/lottoview/LottoInput.java index f3052ef2..b9f78ad4 100644 --- a/src/main/java/lottoView/LottoInput.java +++ b/src/main/java/lottoview/LottoInput.java @@ -1,15 +1,14 @@ -package lottoView; +package lottoview; -import exception.ErrorCode; -import lottoModel.Lotto; -import lottoModel.UNIT; +import lottomodel.Lotto; +import lottomodel.Unit; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; -import static exception.ErrorCode.*; +import static exception.ErrorMessage.*; public class LottoInput { @@ -18,8 +17,8 @@ public class LottoInput { public int getBonusNum() { System.out.println("보너스 번호를 입력해 주세요."); int bonusNumber = sc.nextInt(); - if (bonusNumber < UNIT.MIN_NUMBER || bonusNumber > UNIT.MAX_NUMBER) { - throw new IllegalArgumentException(OUT_OF_RANGE.getErrorCode()); + if (bonusNumber < Unit.MIN_NUMBER.getValue() || bonusNumber > Unit.MAX_NUMBER.getValue()) { + throw new IllegalArgumentException(OUT_OF_RANGE.getErrorMessage()); } return bonusNumber; @@ -28,8 +27,8 @@ public int getBonusNum() { public int getInputMoney() { System.out.println("구입 금액을 입력해 주세요."); int inputMoney = sc.nextInt(); - if (inputMoney % UNIT.UNIT_MONEY != 0) { - throw new IllegalArgumentException(OUT_OF_UNIT.getErrorCode()); + if (inputMoney % Unit.UNIT_MONEY.getValue() != 0) { + throw new IllegalArgumentException(OUT_OF_UNIT.getErrorMessage()); } return inputMoney; } @@ -41,16 +40,15 @@ public Lotto inputNumber() { String[] targetNum = inputNum.split(","); for (String num : targetNum) { int addNumber = Integer.parseInt(num.trim()); - if (addNumber > UNIT.MAX_NUMBER) { - throw new NumberFormatException(OUT_OF_RANGE.getErrorCode()); + if (addNumber > Unit.MAX_NUMBER.getValue()) { + throw new NumberFormatException(OUT_OF_RANGE.getErrorMessage()); } if (numbers.contains(addNumber)){ - throw new NumberFormatException(DUPLICATE_NUMBER.getErrorCode()); + throw new NumberFormatException(DUPLICATE_NUMBER.getErrorMessage()); } numbers.add(addNumber); } Collections.sort(numbers); return new Lotto(numbers); } - } diff --git a/src/main/java/lottoView/LottoOutput.java b/src/main/java/lottoview/LottoOutput.java similarity index 56% rename from src/main/java/lottoView/LottoOutput.java rename to src/main/java/lottoview/LottoOutput.java index 2bd57ea8..b4087661 100644 --- a/src/main/java/lottoView/LottoOutput.java +++ b/src/main/java/lottoview/LottoOutput.java @@ -1,25 +1,16 @@ -package lottoView; +package lottoview; -import lottoModel.LottoMaker; -import lottoModel.LottoRank; -import lottoModel.UNIT; +import lottomodel.Lotto; +import lottomodel.LottoRank; +import lottomodel.Unit; -import static lottoModel.LottoRank.*; -import static lottoView.OutputMessage.*; - -public class LottoOutput { - - - public void generateLottoNum(int inputMoney) { - int unitMoney = 1000; - int amount = inputMoney / unitMoney; - System.out.println(String.format(AMOUNT_OUTPUT.getMessage(), amount)); - LottoMaker.generate(amount); - } +import java.util.List; +import static lottomodel.LottoRank.*; +import static lottoview.OutputMessage.*; - - public void print(int inputMoney) { +public class LottoOutput { + public void resultPrint(int inputMoney) { System.out.println("당첨 통계"); System.out.println("---"); printEachMessage(FIFTH,FIFTH_OUTPUT); @@ -37,10 +28,14 @@ private static double getTotalPrice(int inputMoney) { FOURTH.getLottoTotalPrize() + THIRD.getLottoTotalPrize() + SECOND.getLottoTotalPrize() + - FIRST.getLottoTotalPrize()) / inputMoney * UNIT.PERCENT_UNIT) * 10) / 10.0; + FIRST.getLottoTotalPrize()) / inputMoney * Unit.PERCENT_UNIT.getValue()) * 10) / 10.0; } - private static void printEachMessage(LottoRank rank, OutputMessage output) { + private void printEachMessage(LottoRank rank, OutputMessage output) { System.out.println(String.format(output.getMessage(),rank.getQuantity())); } + + public void printLottoNumbers(Lotto lotto) { + System.out.println(lotto.getNumbers()); + } } diff --git a/src/main/java/lottoView/OutputMessage.java b/src/main/java/lottoview/OutputMessage.java similarity index 96% rename from src/main/java/lottoView/OutputMessage.java rename to src/main/java/lottoview/OutputMessage.java index bf16e5d4..ef0dac77 100644 --- a/src/main/java/lottoView/OutputMessage.java +++ b/src/main/java/lottoview/OutputMessage.java @@ -1,4 +1,4 @@ -package lottoView; +package lottoview; public enum OutputMessage { AMOUNT_OUTPUT("%s개를 구매했습니다."), diff --git a/src/test/java/lottoView/LottoTest.java b/src/test/java/lottoview/LottoTest.java similarity index 95% rename from src/test/java/lottoView/LottoTest.java rename to src/test/java/lottoview/LottoTest.java index 17d47767..741feb54 100644 --- a/src/test/java/lottoView/LottoTest.java +++ b/src/test/java/lottoview/LottoTest.java @@ -1,6 +1,6 @@ -package lottoView; +package lottoview; -import lottoModel.Lotto; +import lottomodel.Lotto; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; From 6ca57175616f25fe01529583081da1ec9852e3b3 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Tue, 8 Oct 2024 02:22:02 +0900 Subject: [PATCH 13/21] =?UTF-8?q?refactor:=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO: Stream으로 LottoComparator 관리하기, SetQuantity 사용하지 않기. --- README.md | 6 +++--- src/main/java/AppConfig.java | 14 +++++++------- src/main/java/Application.java | 2 +- .../LottoController.java | 10 +++++----- .../ErrorMessage.java | 2 +- .../java/{lottomodel => lotto_model}/Lotto.java | 4 ++-- .../LottoComparator.java | 6 +++--- .../LottoGenerator.java | 5 ++--- .../{lottomodel => lotto_model}/LottoRank.java | 2 +- .../LottoRepository.java | 2 +- .../{lottomodel => lotto_model}/LottoService.java | 2 +- .../java/{lottomodel => lotto_model}/Unit.java | 2 +- .../java/{lottoview => lotto_view}/LottoInput.java | 8 ++++---- .../{lottoview => lotto_view}/LottoOutput.java | 14 ++++++-------- .../{lottoview => lotto_view}/OutputMessage.java | 2 +- .../java/{lottoview => lotto_view}/LottoTest.java | 4 ++-- 16 files changed, 41 insertions(+), 44 deletions(-) rename src/main/java/{lottocontroller => lotto_controller}/LottoController.java (83%) rename src/main/java/{exception => lotto_exception}/ErrorMessage.java (95%) rename src/main/java/{lottomodel => lotto_model}/Lotto.java (91%) rename src/main/java/{lottomodel => lotto_model}/LottoComparator.java (93%) rename src/main/java/{lottomodel => lotto_model}/LottoGenerator.java (93%) rename src/main/java/{lottomodel => lotto_model}/LottoRank.java (96%) rename src/main/java/{lottomodel => lotto_model}/LottoRepository.java (96%) rename src/main/java/{lottomodel => lotto_model}/LottoService.java (96%) rename src/main/java/{lottomodel => lotto_model}/Unit.java (92%) rename src/main/java/{lottoview => lotto_view}/LottoInput.java (93%) rename src/main/java/{lottoview => lotto_view}/LottoOutput.java (85%) rename src/main/java/{lottoview => lotto_view}/OutputMessage.java (96%) rename src/test/java/{lottoview => lotto_view}/LottoTest.java (95%) diff --git a/README.md b/README.md index 83edf7bd..cae9502c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 객체지향 코드 연습 - 로또([우아한테크코스 프리코스 - lottoview](https://github.com/woowacourse-precourse/java-lotto)) +# 객체지향 코드 연습 - 로또([우아한테크코스 프리코스 - lotto_view](https://github.com/woowacourse-precourse/java-lotto)) ## 🔍 진행 방식 @@ -179,7 +179,7 @@ BUILD SUCCESSFUL in 0s - Java Enum을 적용한다. - 도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(System.out, System.in, Scanner) 로직은 제외한다. - 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 분리해 구현한다. - - 단위 테스트 작성이 익숙하지 않다면 `test/java/lottoview/LottoTest`를 참고하여 학습한 후 테스트를 구현한다. + - 단위 테스트 작성이 익숙하지 않다면 `test/java/lotto_view/LottoTest`를 참고하여 학습한 후 테스트를 구현한다. ### 라이브러리 @@ -224,7 +224,7 @@ public class Lotto { ## ✏️ 과제 진행 요구 사항 -- 미션은 [practice-oop-lottoview](https://github.com/COW-edu/practice-oop-lotto) 저장소를 Fork & Clone해 시작한다. +- 미션은 [practice-oop-lotto_view](https://github.com/COW-edu/practice-oop-lotto) 저장소를 Fork & Clone해 시작한다. - **기능을 구현하기 전 `docs/README.md`에 구현할 기능 목록을 정리**해 추가한다. - **Git의 커밋 단위는 앞 단계에서 `docs/README.md`에 정리한 기능 목록 단위**로 추가한다. - [커밋 메시지 컨벤션](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) 가이드를 참고해 커밋 메시지를 작성한다. diff --git a/src/main/java/AppConfig.java b/src/main/java/AppConfig.java index 6e12f410..7f082d2e 100644 --- a/src/main/java/AppConfig.java +++ b/src/main/java/AppConfig.java @@ -1,10 +1,10 @@ -import lottocontroller.LottoController; -import lottomodel.LottoComparator; -import lottomodel.LottoGenerator; -import lottomodel.LottoRepository; -import lottomodel.LottoService; -import lottoview.LottoInput; -import lottoview.LottoOutput; +import lotto_controller.LottoController; +import lotto_model.LottoComparator; +import lotto_model.LottoGenerator; +import lotto_model.LottoRepository; +import lotto_model.LottoService; +import lotto_view.LottoInput; +import lotto_view.LottoOutput; public class AppConfig { public LottoInput lottoInput() { diff --git a/src/main/java/Application.java b/src/main/java/Application.java index 0949c1d4..4b66655d 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -1,4 +1,4 @@ -import lottocontroller.LottoController; +import lotto_controller.LottoController; public class Application { public static void main(String[] args) { diff --git a/src/main/java/lottocontroller/LottoController.java b/src/main/java/lotto_controller/LottoController.java similarity index 83% rename from src/main/java/lottocontroller/LottoController.java rename to src/main/java/lotto_controller/LottoController.java index 833b55ae..a79679bb 100644 --- a/src/main/java/lottocontroller/LottoController.java +++ b/src/main/java/lotto_controller/LottoController.java @@ -1,9 +1,9 @@ -package lottocontroller; +package lotto_controller; -import lottomodel.Lotto; -import lottomodel.LottoService; -import lottoview.LottoInput; -import lottoview.LottoOutput; +import lotto_model.Lotto; +import lotto_model.LottoService; +import lotto_view.LottoInput; +import lotto_view.LottoOutput; public class LottoController { private final LottoInput lottoInput; diff --git a/src/main/java/exception/ErrorMessage.java b/src/main/java/lotto_exception/ErrorMessage.java similarity index 95% rename from src/main/java/exception/ErrorMessage.java rename to src/main/java/lotto_exception/ErrorMessage.java index 2468416e..3ef1633d 100644 --- a/src/main/java/exception/ErrorMessage.java +++ b/src/main/java/lotto_exception/ErrorMessage.java @@ -1,4 +1,4 @@ -package exception; +package lotto_exception; public enum ErrorMessage { OUT_OF_RANGE("[ERROR] 1부터 45사이의 숫자를 입력해 주세요."), diff --git a/src/main/java/lottomodel/Lotto.java b/src/main/java/lotto_model/Lotto.java similarity index 91% rename from src/main/java/lottomodel/Lotto.java rename to src/main/java/lotto_model/Lotto.java index 90744333..53524f9b 100644 --- a/src/main/java/lottomodel/Lotto.java +++ b/src/main/java/lotto_model/Lotto.java @@ -1,8 +1,8 @@ -package lottomodel; +package lotto_model; import java.util.*; -import static exception.ErrorMessage.*; +import static lotto_exception.ErrorMessage.*; public class Lotto implements Iterable { private final List numbers; diff --git a/src/main/java/lottomodel/LottoComparator.java b/src/main/java/lotto_model/LottoComparator.java similarity index 93% rename from src/main/java/lottomodel/LottoComparator.java rename to src/main/java/lotto_model/LottoComparator.java index e804f760..3f0c55a2 100644 --- a/src/main/java/lottomodel/LottoComparator.java +++ b/src/main/java/lotto_model/LottoComparator.java @@ -1,9 +1,9 @@ -package lottomodel; +package lotto_model; import java.util.Iterator; -import static lottomodel.LottoRank.*; -import static lottomodel.LottoRank.FIFTH; +import static lotto_model.LottoRank.*; +import static lotto_model.LottoRank.FIFTH; public class LottoComparator { diff --git a/src/main/java/lottomodel/LottoGenerator.java b/src/main/java/lotto_model/LottoGenerator.java similarity index 93% rename from src/main/java/lottomodel/LottoGenerator.java rename to src/main/java/lotto_model/LottoGenerator.java index 0403f241..1a4b56b3 100644 --- a/src/main/java/lottomodel/LottoGenerator.java +++ b/src/main/java/lotto_model/LottoGenerator.java @@ -1,11 +1,10 @@ -package lottomodel; +package lotto_model; import camp.nextstep.edu.missionutils.Randoms; import java.util.Collections; -import java.util.List; -import static lottoview.OutputMessage.AMOUNT_OUTPUT; +import static lotto_view.OutputMessage.AMOUNT_OUTPUT; public class LottoGenerator { private final LottoRepository lottoRepository; diff --git a/src/main/java/lottomodel/LottoRank.java b/src/main/java/lotto_model/LottoRank.java similarity index 96% rename from src/main/java/lottomodel/LottoRank.java rename to src/main/java/lotto_model/LottoRank.java index e70ee256..24c95ffb 100644 --- a/src/main/java/lottomodel/LottoRank.java +++ b/src/main/java/lotto_model/LottoRank.java @@ -1,4 +1,4 @@ -package lottomodel; +package lotto_model; public enum LottoRank { FIRST(1000000000, 0), diff --git a/src/main/java/lottomodel/LottoRepository.java b/src/main/java/lotto_model/LottoRepository.java similarity index 96% rename from src/main/java/lottomodel/LottoRepository.java rename to src/main/java/lotto_model/LottoRepository.java index 8bc77cd7..1e04da9c 100644 --- a/src/main/java/lottomodel/LottoRepository.java +++ b/src/main/java/lotto_model/LottoRepository.java @@ -1,4 +1,4 @@ -package lottomodel; +package lotto_model; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/lottomodel/LottoService.java b/src/main/java/lotto_model/LottoService.java similarity index 96% rename from src/main/java/lottomodel/LottoService.java rename to src/main/java/lotto_model/LottoService.java index da1163cb..bfec21b6 100644 --- a/src/main/java/lottomodel/LottoService.java +++ b/src/main/java/lotto_model/LottoService.java @@ -1,4 +1,4 @@ -package lottomodel; +package lotto_model; public class LottoService { private final LottoComparator lottoComparator; diff --git a/src/main/java/lottomodel/Unit.java b/src/main/java/lotto_model/Unit.java similarity index 92% rename from src/main/java/lottomodel/Unit.java rename to src/main/java/lotto_model/Unit.java index 8b1fc0f5..419851e8 100644 --- a/src/main/java/lottomodel/Unit.java +++ b/src/main/java/lotto_model/Unit.java @@ -1,4 +1,4 @@ -package lottomodel; +package lotto_model; public enum Unit { UNIT_MONEY(1000), diff --git a/src/main/java/lottoview/LottoInput.java b/src/main/java/lotto_view/LottoInput.java similarity index 93% rename from src/main/java/lottoview/LottoInput.java rename to src/main/java/lotto_view/LottoInput.java index b9f78ad4..5087a645 100644 --- a/src/main/java/lottoview/LottoInput.java +++ b/src/main/java/lotto_view/LottoInput.java @@ -1,14 +1,14 @@ -package lottoview; +package lotto_view; -import lottomodel.Lotto; -import lottomodel.Unit; +import lotto_model.Lotto; +import lotto_model.Unit; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; -import static exception.ErrorMessage.*; +import static lotto_exception.ErrorMessage.*; public class LottoInput { diff --git a/src/main/java/lottoview/LottoOutput.java b/src/main/java/lotto_view/LottoOutput.java similarity index 85% rename from src/main/java/lottoview/LottoOutput.java rename to src/main/java/lotto_view/LottoOutput.java index b4087661..05834b43 100644 --- a/src/main/java/lottoview/LottoOutput.java +++ b/src/main/java/lotto_view/LottoOutput.java @@ -1,13 +1,11 @@ -package lottoview; +package lotto_view; -import lottomodel.Lotto; -import lottomodel.LottoRank; -import lottomodel.Unit; +import lotto_model.Lotto; +import lotto_model.LottoRank; +import lotto_model.Unit; -import java.util.List; - -import static lottomodel.LottoRank.*; -import static lottoview.OutputMessage.*; +import static lotto_model.LottoRank.*; +import static lotto_view.OutputMessage.*; public class LottoOutput { public void resultPrint(int inputMoney) { diff --git a/src/main/java/lottoview/OutputMessage.java b/src/main/java/lotto_view/OutputMessage.java similarity index 96% rename from src/main/java/lottoview/OutputMessage.java rename to src/main/java/lotto_view/OutputMessage.java index ef0dac77..af2a3cae 100644 --- a/src/main/java/lottoview/OutputMessage.java +++ b/src/main/java/lotto_view/OutputMessage.java @@ -1,4 +1,4 @@ -package lottoview; +package lotto_view; public enum OutputMessage { AMOUNT_OUTPUT("%s개를 구매했습니다."), diff --git a/src/test/java/lottoview/LottoTest.java b/src/test/java/lotto_view/LottoTest.java similarity index 95% rename from src/test/java/lottoview/LottoTest.java rename to src/test/java/lotto_view/LottoTest.java index 741feb54..4e03e43d 100644 --- a/src/test/java/lottoview/LottoTest.java +++ b/src/test/java/lotto_view/LottoTest.java @@ -1,6 +1,6 @@ -package lottoview; +package lotto_view; -import lottomodel.Lotto; +import lotto_model.Lotto; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; From dbe2e6e85c39def02379cf9a35fa7deb8aeab659 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Wed, 9 Oct 2024 23:59:50 +0900 Subject: [PATCH 14/21] =?UTF-8?q?refactor:=20setQuantity=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: 로또 등수 클래스 생성 --- src/main/java/AppConfig.java | 26 +++++---- .../lotto_controller/LottoController.java | 26 +-------- .../lotto_controller/LottoControllerImpl.java | 28 +++++++++ .../java/lotto_exception/ErrorMessage.java | 3 +- src/main/java/lotto_model/Lotto.java | 7 +-- .../java/lotto_model/LottoComparator.java | 50 +--------------- .../java/lotto_model/LottoComparatorImpl.java | 54 ++++++++++++++++++ src/main/java/lotto_model/LottoGenerator.java | 45 +-------------- .../java/lotto_model/LottoGeneratorImpl.java | 46 +++++++++++++++ src/main/java/lotto_model/LottoRank.java | 27 ++------- .../java/lotto_model/LottoRepository.java | 24 +------- .../java/lotto_model/LottoRepositoryImpl.java | 28 +++++++++ src/main/java/lotto_model/LottoService.java | 19 +------ .../java/lotto_model/LottoServiceImpl.java | 21 +++++++ src/main/java/lotto_model/LottoWinning.java | 11 ++++ .../java/lotto_model/LottoWinningImpl.java | 56 ++++++++++++++++++ src/main/java/lotto_view/LottoInput.java | 53 ++--------------- src/main/java/lotto_view/LottoInputImpl.java | 57 +++++++++++++++++++ src/main/java/lotto_view/LottoOutput.java | 38 +------------ src/main/java/lotto_view/LottoOutputImpl.java | 43 ++++++++++++++ src/main/java/lotto_view/OutputMessage.java | 12 ++-- 21 files changed, 392 insertions(+), 282 deletions(-) create mode 100644 src/main/java/lotto_controller/LottoControllerImpl.java create mode 100644 src/main/java/lotto_model/LottoComparatorImpl.java create mode 100644 src/main/java/lotto_model/LottoGeneratorImpl.java create mode 100644 src/main/java/lotto_model/LottoRepositoryImpl.java create mode 100644 src/main/java/lotto_model/LottoServiceImpl.java create mode 100644 src/main/java/lotto_model/LottoWinning.java create mode 100644 src/main/java/lotto_model/LottoWinningImpl.java create mode 100644 src/main/java/lotto_view/LottoInputImpl.java create mode 100644 src/main/java/lotto_view/LottoOutputImpl.java diff --git a/src/main/java/AppConfig.java b/src/main/java/AppConfig.java index 7f082d2e..e878bbf7 100644 --- a/src/main/java/AppConfig.java +++ b/src/main/java/AppConfig.java @@ -1,38 +1,42 @@ import lotto_controller.LottoController; -import lotto_model.LottoComparator; -import lotto_model.LottoGenerator; -import lotto_model.LottoRepository; -import lotto_model.LottoService; +import lotto_controller.LottoControllerImpl; +import lotto_model.*; import lotto_view.LottoInput; +import lotto_view.LottoInputImpl; import lotto_view.LottoOutput; +import lotto_view.LottoOutputImpl; public class AppConfig { public LottoInput lottoInput() { - return new LottoInput(); + return new LottoInputImpl(); } public LottoOutput lottoOutput() { - return new LottoOutput(); + return new LottoOutputImpl(lottoWinning()); } public LottoComparator lottoComparator() { - return new LottoComparator(lottoRepository()); + return new LottoComparatorImpl(lottoRepository(), lottoWinning()); } public LottoGenerator lottoGenerator() { - return new LottoGenerator(lottoRepository()); + return new LottoGeneratorImpl(lottoRepository()); } public LottoRepository lottoRepository() { - return LottoRepository.getInstance(); + return LottoRepositoryImpl.getInstance(); + } + + public LottoWinning lottoWinning() { + return new LottoWinningImpl(); } public LottoService lottoService() { - return new LottoService(lottoComparator(), lottoGenerator()); + return new LottoServiceImpl(lottoComparator(), lottoGenerator()); } public LottoController lottoController() { - return new LottoController(lottoInput(), lottoOutput(), lottoService()); + return new LottoControllerImpl(lottoInput(), lottoOutput(), lottoService()); } } diff --git a/src/main/java/lotto_controller/LottoController.java b/src/main/java/lotto_controller/LottoController.java index a79679bb..1968f5f1 100644 --- a/src/main/java/lotto_controller/LottoController.java +++ b/src/main/java/lotto_controller/LottoController.java @@ -1,27 +1,5 @@ package lotto_controller; -import lotto_model.Lotto; -import lotto_model.LottoService; -import lotto_view.LottoInput; -import lotto_view.LottoOutput; - -public class LottoController { - private final LottoInput lottoInput; - private final LottoOutput lottoOutput; - private final LottoService lottoService; - - public LottoController(LottoInput lottoInput, LottoOutput lottoOutput, LottoService lottoService) { - this.lottoInput = lottoInput; - this.lottoOutput = lottoOutput; - this.lottoService = lottoService; - } - - public void run() { - int inputMoney = lottoInput.getInputMoney(); - lottoService.printLotto(inputMoney); - Lotto targetLotto = lottoInput.inputNumber(); - int bonusNumber = lottoInput.getBonusNum(); - lottoService.lottoCompare(targetLotto, bonusNumber); - lottoOutput.resultPrint(inputMoney); - } +public interface LottoController { + void run(); } diff --git a/src/main/java/lotto_controller/LottoControllerImpl.java b/src/main/java/lotto_controller/LottoControllerImpl.java new file mode 100644 index 00000000..622fd96a --- /dev/null +++ b/src/main/java/lotto_controller/LottoControllerImpl.java @@ -0,0 +1,28 @@ +package lotto_controller; + +import lotto_model.Lotto; +import lotto_model.LottoService; +import lotto_view.LottoInput; +import lotto_view.LottoOutput; + +public class LottoControllerImpl implements LottoController { + private final LottoInput lottoInput; + private final LottoOutput lottoOutput; + private final LottoService lottoService; + + public LottoControllerImpl(LottoInput lottoInput, LottoOutput lottoOutput, LottoService lottoService) { + this.lottoInput = lottoInput; + this.lottoOutput = lottoOutput; + this.lottoService = lottoService; + } + + @Override + public void run() { + int inputMoney = lottoInput.getInputMoney(); + lottoService.printLotto(inputMoney); + Lotto targetLotto = lottoInput.inputNumber(); + int bonusNumber = lottoInput.getBonusNumber(); + lottoService.lottoCompare(targetLotto, bonusNumber); + lottoOutput.resultPrint(inputMoney); + } +} diff --git a/src/main/java/lotto_exception/ErrorMessage.java b/src/main/java/lotto_exception/ErrorMessage.java index 3ef1633d..dc9408b4 100644 --- a/src/main/java/lotto_exception/ErrorMessage.java +++ b/src/main/java/lotto_exception/ErrorMessage.java @@ -4,7 +4,8 @@ public enum ErrorMessage { OUT_OF_RANGE("[ERROR] 1부터 45사이의 숫자를 입력해 주세요."), DUPLICATE_NUMBER("ERROR] 중복된 숫자가 입력되었습니다."), OUT_OF_UNIT("[ERROR] 1000원 단위로 입력해 주세요."), - INVALID_NUMBER_COUNT("[ERROR] 6개의 숫자만 입력해주세요."); + INVALID_NUMBER_COUNT("[ERROR] 6개의 숫자만 입력해주세요."), + NOT_CORRECT_LEVEL("[ERROR] 잘못된 등수가 선정되었습니다"); private final String errorMessage; diff --git a/src/main/java/lotto_model/Lotto.java b/src/main/java/lotto_model/Lotto.java index 53524f9b..eaf5ebbe 100644 --- a/src/main/java/lotto_model/Lotto.java +++ b/src/main/java/lotto_model/Lotto.java @@ -4,7 +4,7 @@ import static lotto_exception.ErrorMessage.*; -public class Lotto implements Iterable { +public class Lotto { private final List numbers; public Lotto(List numbers) { @@ -18,11 +18,6 @@ private void validate(List numbers) { } } - @Override - public Iterator iterator() { - return numbers.iterator(); - } - public boolean contains(Integer element) { return numbers.contains(element); } diff --git a/src/main/java/lotto_model/LottoComparator.java b/src/main/java/lotto_model/LottoComparator.java index 3f0c55a2..b445020a 100644 --- a/src/main/java/lotto_model/LottoComparator.java +++ b/src/main/java/lotto_model/LottoComparator.java @@ -1,51 +1,5 @@ package lotto_model; -import java.util.Iterator; - -import static lotto_model.LottoRank.*; -import static lotto_model.LottoRank.FIFTH; - -public class LottoComparator { - - private final LottoRepository lottoRepository; - - public LottoComparator(LottoRepository lottoRepository) { - this.lottoRepository = lottoRepository; - } - - public void compare(Lotto userLotto, int bonusNumber) { - Iterator lottoNumbers = lottoRepository.getLottoSaved().iterator(); - while (lottoNumbers.hasNext()) { - Lotto current = lottoNumbers.next(); - int sameNumbers = 0; - - for (Integer element : userLotto) { - if (current.contains(element)) { - sameNumbers++; - } - } - if (sameNumbers == 6) { - FIRST.setQuantity(FIRST.getQuantity() + 1); - continue; - } - if (sameNumbers == 5 && current.contains(bonusNumber)) { - SECOND.setQuantity(SECOND.getQuantity() + 1); - continue; - } - - if (sameNumbers == 5) { - THIRD.setQuantity(THIRD.getQuantity() + 1); - continue; - } - - if (sameNumbers == 4) { - FOURTH.setQuantity(FOURTH.getQuantity() + 1); - continue; - } - - if (sameNumbers == 3) { - FIFTH.setQuantity(FIFTH.getQuantity() + 1); - } - } - } +public interface LottoComparator { + void compare(Lotto tragetLotto, int bonusNumber); } diff --git a/src/main/java/lotto_model/LottoComparatorImpl.java b/src/main/java/lotto_model/LottoComparatorImpl.java new file mode 100644 index 00000000..2f2974ff --- /dev/null +++ b/src/main/java/lotto_model/LottoComparatorImpl.java @@ -0,0 +1,54 @@ +package lotto_model; + +import java.util.Iterator; + +public class LottoComparatorImpl implements LottoComparator { + + private final LottoRepository lottoRepository; + private final LottoWinning lottoWinning; + + public LottoComparatorImpl(LottoRepository lottoRepository, LottoWinning lottoWinning) { + this.lottoRepository = lottoRepository; + this.lottoWinning = lottoWinning; + } + + @Override + public void compare(Lotto tragetLotto, int bonusNumber) { + + Iterator lottoNumbers = lottoRepository.getLottoSaved().iterator(); + + while (lottoNumbers.hasNext()) { + Lotto currentNumber = lottoNumbers.next(); + int sameNumbers = 0; + + for (Integer element : tragetLotto.getNumbers()) { + if (currentNumber.contains(element)) { + sameNumbers++; + } + } + + if (sameNumbers == 6) { + lottoWinning.addFirst(); + continue; + } + if (sameNumbers == 5 && currentNumber.contains(bonusNumber)) { + lottoWinning.addSecond(); + continue; + } + + if (sameNumbers == 5) { + lottoWinning.addThird(); + continue; + } + + if (sameNumbers == 4) { + lottoWinning.addFourth(); + continue; + } + + if (sameNumbers == 3) { + lottoWinning.addFifth(); + } + } + } +} diff --git a/src/main/java/lotto_model/LottoGenerator.java b/src/main/java/lotto_model/LottoGenerator.java index 1a4b56b3..3287167c 100644 --- a/src/main/java/lotto_model/LottoGenerator.java +++ b/src/main/java/lotto_model/LottoGenerator.java @@ -1,46 +1,5 @@ package lotto_model; -import camp.nextstep.edu.missionutils.Randoms; - -import java.util.Collections; - -import static lotto_view.OutputMessage.AMOUNT_OUTPUT; - -public class LottoGenerator { - private final LottoRepository lottoRepository; - - public LottoGenerator(LottoRepository lottoRepository) { - this.lottoRepository = lottoRepository; - } - - int lottoAmount = 0; - - public void printLottoSaved(int inputMoney) { - lottoAmount = getLottoAmount(inputMoney); - lottoAlign(inputMoney); - System.out.printf((AMOUNT_OUTPUT.getMessage()) + "%n", lottoAmount); - lottoRepository.getLottoSaved().stream().forEach(item -> System.out.println(item.getNumbers())); - } - - private void lottoAlign(int inputMoney) { - lottoAmount = getLottoAmount(inputMoney); - for (int i = 0; i < lottoAmount; i++) { - Lotto generatedNumber = numberGenerate(); - lottoSave(generatedNumber); - } - } - - private Lotto numberGenerate() { - Lotto lotto = new Lotto(Randoms.pickUniqueNumbersInRange(Unit.MIN_NUMBER.getValue(), Unit.MAX_NUMBER.getValue(), Unit.UNIT_LOTTO_NUMBER.getValue())); - Collections.sort(lotto.getNumbers()); - return lotto; - } - - private static int getLottoAmount(int inputMoney) { - return inputMoney / Unit.UNIT_MONEY.getValue(); - } - - private void lottoSave(Lotto generatedNumber) { - lottoRepository.save(generatedNumber); - } +public interface LottoGenerator { + void printLottoSaved(int inputMoney); } diff --git a/src/main/java/lotto_model/LottoGeneratorImpl.java b/src/main/java/lotto_model/LottoGeneratorImpl.java new file mode 100644 index 00000000..4e27aff9 --- /dev/null +++ b/src/main/java/lotto_model/LottoGeneratorImpl.java @@ -0,0 +1,46 @@ +package lotto_model; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.Collections; + +import static lotto_view.OutputMessage.AMOUNT_OUTPUT; + +public class LottoGeneratorImpl implements LottoGenerator { + private final LottoRepository lottoRepository; + + public LottoGeneratorImpl(LottoRepository lottoRepository) { + this.lottoRepository = lottoRepository; + } + + int lottoAmount = 0; + + @Override + public void printLottoSaved(int inputMoney) { + lottoAlign(inputMoney); + System.out.printf((AMOUNT_OUTPUT.getMessage()) + "%n", lottoAmount); + lottoRepository.getLottoSaved().stream().forEach(item -> System.out.println(item.getNumbers())); + } + + private void lottoAlign(int inputMoney) { + lottoAmount = getLottoAmount(inputMoney); + for (int i = 0; i < lottoAmount; i++) { + Lotto generatedNumber = numberGenerate(); + lottoSave(generatedNumber); + } + } + + private Lotto numberGenerate() { + Lotto lotto = new Lotto(Randoms.pickUniqueNumbersInRange(Unit.MIN_NUMBER.getValue(), Unit.MAX_NUMBER.getValue(), Unit.UNIT_LOTTO_NUMBER.getValue())); + Collections.sort(lotto.getNumbers()); + return lotto; + } + + private static int getLottoAmount(int inputMoney) { + return inputMoney / Unit.UNIT_MONEY.getValue(); + } + + private void lottoSave(Lotto generatedNumber) { + lottoRepository.save(generatedNumber); + } +} diff --git a/src/main/java/lotto_model/LottoRank.java b/src/main/java/lotto_model/LottoRank.java index 24c95ffb..2d15126e 100644 --- a/src/main/java/lotto_model/LottoRank.java +++ b/src/main/java/lotto_model/LottoRank.java @@ -1,34 +1,19 @@ package lotto_model; public enum LottoRank { - FIRST(1000000000, 0), - SECOND(30000000, 0), - THIRD(1500000, 0), - FOURTH(50000, 0), - FIFTH(5000, 0); + FIRST(1000000000), + SECOND(30000000), + THIRD(1500000), + FOURTH(50000), + FIFTH(5000); private final int lottoPrize; - private int quantity; - - LottoRank(int lottoPrize, int quantity) { + LottoRank(int lottoPrize) { this.lottoPrize = lottoPrize; - this.quantity = quantity; } public int getLottoPrize() { return lottoPrize; } - - public int getQuantity() { - return quantity; - } - - public void setQuantity(int quantity) { - this.quantity = quantity; - } - - public double getLottoTotalPrize() { - return getLottoPrize() * getQuantity(); - } } diff --git a/src/main/java/lotto_model/LottoRepository.java b/src/main/java/lotto_model/LottoRepository.java index 1e04da9c..4f51681a 100644 --- a/src/main/java/lotto_model/LottoRepository.java +++ b/src/main/java/lotto_model/LottoRepository.java @@ -1,26 +1,8 @@ package lotto_model; -import java.util.ArrayList; import java.util.List; -public class LottoRepository { - - private static final LottoRepository instance = new LottoRepository(); // 싱글턴 인스턴스 - private final List lottoSaved; // Lotto 저장 리스트 - - private LottoRepository() { - lottoSaved = new ArrayList<>(); - } - - public static LottoRepository getInstance() { - return instance; - } - - public List getLottoSaved() { - return lottoSaved; - } - - public void save(Lotto lotto) { - lottoSaved.add(lotto); - } +public interface LottoRepository { + List getLottoSaved(); + void save(Lotto lotto); } diff --git a/src/main/java/lotto_model/LottoRepositoryImpl.java b/src/main/java/lotto_model/LottoRepositoryImpl.java new file mode 100644 index 00000000..0590bc4c --- /dev/null +++ b/src/main/java/lotto_model/LottoRepositoryImpl.java @@ -0,0 +1,28 @@ +package lotto_model; + +import java.util.ArrayList; +import java.util.List; + +public class LottoRepositoryImpl implements LottoRepository { + + private static final LottoRepositoryImpl instance = new LottoRepositoryImpl(); + private final List lottoSaved; + + private LottoRepositoryImpl() { + lottoSaved = new ArrayList<>(); + } + + public static LottoRepositoryImpl getInstance() { + return instance; + } + + @Override + public List getLottoSaved() { + return lottoSaved; + } + + @Override + public void save(Lotto lotto) { + lottoSaved.add(lotto); + } +} diff --git a/src/main/java/lotto_model/LottoService.java b/src/main/java/lotto_model/LottoService.java index bfec21b6..d91e3f68 100644 --- a/src/main/java/lotto_model/LottoService.java +++ b/src/main/java/lotto_model/LottoService.java @@ -1,19 +1,6 @@ package lotto_model; -public class LottoService { - private final LottoComparator lottoComparator; - private final LottoGenerator lottoGenerator; - - public LottoService(LottoComparator lottoComparator, LottoGenerator lottoGenerator) { - this.lottoComparator = lottoComparator; - this.lottoGenerator = lottoGenerator; - } - - public void lottoCompare(Lotto targetLotto, int bonusNumber) { - lottoComparator.compare(targetLotto, bonusNumber); - } - - public void printLotto(int inputMoney) { - lottoGenerator.printLottoSaved(inputMoney); - } +public interface LottoService { + void lottoCompare(Lotto targetLotto, int bonusNumber); + void printLotto(int inputMoney); } diff --git a/src/main/java/lotto_model/LottoServiceImpl.java b/src/main/java/lotto_model/LottoServiceImpl.java new file mode 100644 index 00000000..959b427d --- /dev/null +++ b/src/main/java/lotto_model/LottoServiceImpl.java @@ -0,0 +1,21 @@ +package lotto_model; + +public class LottoServiceImpl implements LottoService { + private final LottoComparator lottoComparator; + private final LottoGenerator lottoGenerator; + + public LottoServiceImpl(LottoComparator lottoComparator, LottoGenerator lottoGenerator) { + this.lottoComparator = lottoComparator; + this.lottoGenerator = lottoGenerator; + } + + @Override + public void lottoCompare(Lotto targetLotto, int bonusNumber) { + lottoComparator.compare(targetLotto, bonusNumber); + } + + @Override + public void printLotto(int inputMoney) { + lottoGenerator.printLottoSaved(inputMoney); + } +} diff --git a/src/main/java/lotto_model/LottoWinning.java b/src/main/java/lotto_model/LottoWinning.java new file mode 100644 index 00000000..7069a3ed --- /dev/null +++ b/src/main/java/lotto_model/LottoWinning.java @@ -0,0 +1,11 @@ +package lotto_model; + +public interface LottoWinning { + void addFirst(); + void addSecond(); + void addThird(); + void addFourth(); + void addFifth(); + + int getQuantity(LottoRank lottoRank); +} diff --git a/src/main/java/lotto_model/LottoWinningImpl.java b/src/main/java/lotto_model/LottoWinningImpl.java new file mode 100644 index 00000000..d0c9fbc7 --- /dev/null +++ b/src/main/java/lotto_model/LottoWinningImpl.java @@ -0,0 +1,56 @@ +package lotto_model; + +import lotto_exception.ErrorMessage; + +public class LottoWinningImpl implements LottoWinning { + int first = 0; + int second = 0; + int third = 0; + int fourth = 0; + int fifth = 0; + + @Override + public void addFirst() { + first++; + } + + @Override + public void addSecond() { + second++; + } + + @Override + public void addThird() { + third++; + } + + @Override + public void addFourth() { + fourth++; + } + + @Override + public void addFifth() { + fifth++; + } + + @Override + public int getQuantity(LottoRank lottoRank){ + if (lottoRank == LottoRank.FIRST) { + return first; + } + if (lottoRank ==LottoRank.SECOND) { + return second; + } + if (lottoRank == LottoRank.THIRD) { + return third; + } + if (lottoRank == LottoRank.FOURTH) { + return fourth; + } + if (lottoRank == LottoRank.FIFTH) { + return fifth; + } + throw new IllegalArgumentException(ErrorMessage.NOT_CORRECT_LEVEL.getErrorMessage()); + } +} diff --git a/src/main/java/lotto_view/LottoInput.java b/src/main/java/lotto_view/LottoInput.java index 5087a645..372026e8 100644 --- a/src/main/java/lotto_view/LottoInput.java +++ b/src/main/java/lotto_view/LottoInput.java @@ -1,54 +1,9 @@ package lotto_view; import lotto_model.Lotto; -import lotto_model.Unit; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Scanner; - -import static lotto_exception.ErrorMessage.*; - - -public class LottoInput { - Scanner sc = new Scanner(System.in); - - public int getBonusNum() { - System.out.println("보너스 번호를 입력해 주세요."); - int bonusNumber = sc.nextInt(); - if (bonusNumber < Unit.MIN_NUMBER.getValue() || bonusNumber > Unit.MAX_NUMBER.getValue()) { - throw new IllegalArgumentException(OUT_OF_RANGE.getErrorMessage()); - } - return bonusNumber; - - } - - public int getInputMoney() { - System.out.println("구입 금액을 입력해 주세요."); - int inputMoney = sc.nextInt(); - if (inputMoney % Unit.UNIT_MONEY.getValue() != 0) { - throw new IllegalArgumentException(OUT_OF_UNIT.getErrorMessage()); - } - return inputMoney; - } - - public Lotto inputNumber() { - System.out.println("당첨 번호를 입력해 주세요."); - List numbers = new ArrayList<>(); - String inputNum = sc.next(); - String[] targetNum = inputNum.split(","); - for (String num : targetNum) { - int addNumber = Integer.parseInt(num.trim()); - if (addNumber > Unit.MAX_NUMBER.getValue()) { - throw new NumberFormatException(OUT_OF_RANGE.getErrorMessage()); - } - if (numbers.contains(addNumber)){ - throw new NumberFormatException(DUPLICATE_NUMBER.getErrorMessage()); - } - numbers.add(addNumber); - } - Collections.sort(numbers); - return new Lotto(numbers); - } +public interface LottoInput { + int getBonusNumber(); + int getInputMoney(); + Lotto inputNumber(); } diff --git a/src/main/java/lotto_view/LottoInputImpl.java b/src/main/java/lotto_view/LottoInputImpl.java new file mode 100644 index 00000000..bccfd059 --- /dev/null +++ b/src/main/java/lotto_view/LottoInputImpl.java @@ -0,0 +1,57 @@ +package lotto_view; + +import lotto_model.Lotto; +import lotto_model.Unit; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Scanner; + +import static lotto_exception.ErrorMessage.*; + + +public class LottoInputImpl implements LottoInput{ + Scanner sc = new Scanner(System.in); + + @Override + public int getBonusNumber() { + System.out.println("보너스 번호를 입력해 주세요."); + int bonusNumber = sc.nextInt(); + if (bonusNumber < Unit.MIN_NUMBER.getValue() || bonusNumber > Unit.MAX_NUMBER.getValue()) { + throw new IllegalArgumentException(OUT_OF_RANGE.getErrorMessage()); + } + return bonusNumber; + + } + + @Override + public int getInputMoney() { + System.out.println("구입 금액을 입력해 주세요."); + int inputMoney = sc.nextInt(); + if (inputMoney % Unit.UNIT_MONEY.getValue() != 0) { + throw new IllegalArgumentException(OUT_OF_UNIT.getErrorMessage()); + } + return inputMoney; + } + + @Override + public Lotto inputNumber() { + System.out.println("당첨 번호를 입력해 주세요."); + List numbers = new ArrayList<>(); + String inputNum = sc.next(); + String[] targetNum = inputNum.split(","); + for (String num : targetNum) { + int addNumber = Integer.parseInt(num.trim()); + if (addNumber > Unit.MAX_NUMBER.getValue()) { + throw new NumberFormatException(OUT_OF_RANGE.getErrorMessage()); + } + if (numbers.contains(addNumber)){ + throw new NumberFormatException(DUPLICATE_NUMBER.getErrorMessage()); + } + numbers.add(addNumber); + } + Collections.sort(numbers); + return new Lotto(numbers); + } +} diff --git a/src/main/java/lotto_view/LottoOutput.java b/src/main/java/lotto_view/LottoOutput.java index 05834b43..6e2471e0 100644 --- a/src/main/java/lotto_view/LottoOutput.java +++ b/src/main/java/lotto_view/LottoOutput.java @@ -1,39 +1,5 @@ package lotto_view; -import lotto_model.Lotto; -import lotto_model.LottoRank; -import lotto_model.Unit; - -import static lotto_model.LottoRank.*; -import static lotto_view.OutputMessage.*; - -public class LottoOutput { - public void resultPrint(int inputMoney) { - System.out.println("당첨 통계"); - System.out.println("---"); - printEachMessage(FIFTH,FIFTH_OUTPUT); - printEachMessage(FOURTH,FOURTH_OUTPUT); - printEachMessage(THIRD,THIRD_OUTPUT); - printEachMessage(SECOND,SECOND_OUTPUT); - printEachMessage(FIRST,FIRST_OUTPUT); - - double totalPrice = getTotalPrice(inputMoney); - System.out.println("총 수익률은 " + totalPrice + "% 입니다."); - } - - private static double getTotalPrice(int inputMoney) { - return Math.round(((FIFTH.getLottoTotalPrize() + - FOURTH.getLottoTotalPrize() + - THIRD.getLottoTotalPrize() + - SECOND.getLottoTotalPrize() + - FIRST.getLottoTotalPrize()) / inputMoney * Unit.PERCENT_UNIT.getValue()) * 10) / 10.0; - } - - private void printEachMessage(LottoRank rank, OutputMessage output) { - System.out.println(String.format(output.getMessage(),rank.getQuantity())); - } - - public void printLottoNumbers(Lotto lotto) { - System.out.println(lotto.getNumbers()); - } +public interface LottoOutput { + void resultPrint(int inputMoney); } diff --git a/src/main/java/lotto_view/LottoOutputImpl.java b/src/main/java/lotto_view/LottoOutputImpl.java new file mode 100644 index 00000000..eeb2d364 --- /dev/null +++ b/src/main/java/lotto_view/LottoOutputImpl.java @@ -0,0 +1,43 @@ +package lotto_view; + +import lotto_model.LottoWinning; +import lotto_model.Unit; +import static lotto_model.LottoRank.*; +import static lotto_view.OutputMessage.*; + +public class LottoOutputImpl implements LottoOutput { + private final LottoWinning lottoWinning; + + public LottoOutputImpl(LottoWinning lottoWinning) { + this.lottoWinning = lottoWinning; + } + + public void resultPrint(int inputMoney) { + System.out.println("당첨 통계"); + System.out.println("---"); + printEachMessage(FIFTH_OUTPUT, lottoWinning.getQuantity(FIFTH)); + printEachMessage(FOURTH_OUTPUT, lottoWinning.getQuantity(FOURTH)); + printEachMessage(THIRD_OUTPUT, lottoWinning.getQuantity(THIRD)); + printEachMessage(SECOND_OUTPUT, lottoWinning.getQuantity(SECOND)); + printEachMessage(FIRST_OUTPUT, lottoWinning.getQuantity(FIRST)); + + double totalPricePercent = getTotalPrizePercent(inputMoney); + System.out.println("총 수익률은 " + totalPricePercent + "% 입니다."); + } + + private double getTotalPrizePercent(int inputMoney) { + return Math.round(((double) getTotalPrize() / inputMoney * Unit.PERCENT_UNIT.getValue()) * 10) / 10.0; + } + + private int getTotalPrize() { + return FIFTH.getLottoPrize() * lottoWinning.getQuantity(FIFTH) + + FOURTH.getLottoPrize() * lottoWinning.getQuantity(FOURTH) + + THIRD.getLottoPrize() * lottoWinning.getQuantity(THIRD) + + SECOND.getLottoPrize() * lottoWinning.getQuantity(SECOND) + + FIRST.getLottoPrize() * lottoWinning.getQuantity(FIRST); + } + + private void printEachMessage(OutputMessage output, int lottoWinning) { + System.out.println(String.format(output.getMessage(), lottoWinning)); + } +} diff --git a/src/main/java/lotto_view/OutputMessage.java b/src/main/java/lotto_view/OutputMessage.java index af2a3cae..b2e7ce97 100644 --- a/src/main/java/lotto_view/OutputMessage.java +++ b/src/main/java/lotto_view/OutputMessage.java @@ -1,12 +1,12 @@ package lotto_view; public enum OutputMessage { - AMOUNT_OUTPUT("%s개를 구매했습니다."), - FIFTH_OUTPUT("3개 일치 (5,000원)-%S개"), - FOURTH_OUTPUT("4개 일치 (50,000원)-%S개"), - THIRD_OUTPUT("5개 일치 (1,500,000원)-%S개"), - SECOND_OUTPUT("5개 일치, 보너스 볼 일치 (30,000,000원)-%S개"), - FIRST_OUTPUT("6개 일치 (1,000,000,000원)-%S개"); + AMOUNT_OUTPUT("%d개를 구매했습니다."), + FIFTH_OUTPUT("3개 일치 (5,000원)-%d개"), + FOURTH_OUTPUT("4개 일치 (50,000원)-%d개"), + THIRD_OUTPUT("5개 일치 (1,500,000원)-%d개"), + SECOND_OUTPUT("5개 일치, 보너스 볼 일치 (30,000,000원)-%d개"), + FIRST_OUTPUT("6개 일치 (1,000,000,000원)-%d개"); private final String message; From 8e5364f45a4429775e888167e51e6006682fd584 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Thu, 10 Oct 2024 01:09:03 +0900 Subject: [PATCH 15/21] =?UTF-8?q?refactor:=20=EB=A1=9C=EB=98=90=20WinningI?= =?UTF-8?q?mpl=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=8B=B1=EA=B8=80=ED=86=A4?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD,=ED=8C=A8=ED=82=A4=EC=8B=9C=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/AppConfig.java | 13 ++++++++++-- .../lotto_controller/LottoControllerImpl.java | 4 ++-- .../{ => comparator}/LottoComparator.java | 4 +++- .../{ => comparator}/LottoComparatorImpl.java | 6 +++++- .../{ => data}/LottoRepository.java | 4 +++- .../{ => data}/LottoRepositoryImpl.java | 4 +++- .../lotto_model/{ => data}/LottoWinning.java | 4 +++- .../{ => data}/LottoWinningImpl.java | 20 +++++++++++++------ .../{ => generator}/LottoGenerator.java | 2 +- .../{ => generator}/LottoGeneratorImpl.java | 5 ++++- .../java/lotto_model/{ => lotto}/Lotto.java | 2 +- .../lotto_model/{ => lotto}/LottoRank.java | 2 +- .../java/lotto_model/{ => lotto}/Unit.java | 2 +- .../{ => service}/LottoService.java | 4 +++- .../{ => service}/LottoServiceImpl.java | 6 +++++- src/main/java/lotto_view/LottoInput.java | 2 +- src/main/java/lotto_view/LottoInputImpl.java | 4 ++-- src/main/java/lotto_view/LottoOutputImpl.java | 7 ++++--- src/test/java/lotto_view/LottoTest.java | 2 +- 19 files changed, 68 insertions(+), 29 deletions(-) rename src/main/java/lotto_model/{ => comparator}/LottoComparator.java (58%) rename src/main/java/lotto_model/{ => comparator}/LottoComparatorImpl.java (91%) rename src/main/java/lotto_model/{ => data}/LottoRepository.java (67%) rename src/main/java/lotto_model/{ => data}/LottoRepositoryImpl.java (90%) rename src/main/java/lotto_model/{ => data}/LottoWinning.java (74%) rename src/main/java/lotto_model/{ => data}/LottoWinningImpl.java (73%) rename src/main/java/lotto_model/{ => generator}/LottoGenerator.java (71%) rename src/main/java/lotto_model/{ => generator}/LottoGeneratorImpl.java (91%) rename src/main/java/lotto_model/{ => lotto}/Lotto.java (95%) rename src/main/java/lotto_model/{ => lotto}/LottoRank.java (91%) rename src/main/java/lotto_model/{ => lotto}/Unit.java (91%) rename src/main/java/lotto_model/{ => service}/LottoService.java (67%) rename src/main/java/lotto_model/{ => service}/LottoServiceImpl.java (80%) diff --git a/src/main/java/AppConfig.java b/src/main/java/AppConfig.java index e878bbf7..642c5092 100644 --- a/src/main/java/AppConfig.java +++ b/src/main/java/AppConfig.java @@ -1,6 +1,15 @@ import lotto_controller.LottoController; import lotto_controller.LottoControllerImpl; -import lotto_model.*; +import lotto_model.comparator.LottoComparator; +import lotto_model.comparator.LottoComparatorImpl; +import lotto_model.data.LottoRepository; +import lotto_model.data.LottoRepositoryImpl; +import lotto_model.data.LottoWinning; +import lotto_model.data.LottoWinningImpl; +import lotto_model.generator.LottoGenerator; +import lotto_model.generator.LottoGeneratorImpl; +import lotto_model.service.LottoService; +import lotto_model.service.LottoServiceImpl; import lotto_view.LottoInput; import lotto_view.LottoInputImpl; import lotto_view.LottoOutput; @@ -28,7 +37,7 @@ public LottoRepository lottoRepository() { } public LottoWinning lottoWinning() { - return new LottoWinningImpl(); + return LottoWinningImpl.getInstance(); } public LottoService lottoService() { diff --git a/src/main/java/lotto_controller/LottoControllerImpl.java b/src/main/java/lotto_controller/LottoControllerImpl.java index 622fd96a..b40ec073 100644 --- a/src/main/java/lotto_controller/LottoControllerImpl.java +++ b/src/main/java/lotto_controller/LottoControllerImpl.java @@ -1,7 +1,7 @@ package lotto_controller; -import lotto_model.Lotto; -import lotto_model.LottoService; +import lotto_model.lotto.Lotto; +import lotto_model.service.LottoService; import lotto_view.LottoInput; import lotto_view.LottoOutput; diff --git a/src/main/java/lotto_model/LottoComparator.java b/src/main/java/lotto_model/comparator/LottoComparator.java similarity index 58% rename from src/main/java/lotto_model/LottoComparator.java rename to src/main/java/lotto_model/comparator/LottoComparator.java index b445020a..85099db4 100644 --- a/src/main/java/lotto_model/LottoComparator.java +++ b/src/main/java/lotto_model/comparator/LottoComparator.java @@ -1,4 +1,6 @@ -package lotto_model; +package lotto_model.comparator; + +import lotto_model.lotto.Lotto; public interface LottoComparator { void compare(Lotto tragetLotto, int bonusNumber); diff --git a/src/main/java/lotto_model/LottoComparatorImpl.java b/src/main/java/lotto_model/comparator/LottoComparatorImpl.java similarity index 91% rename from src/main/java/lotto_model/LottoComparatorImpl.java rename to src/main/java/lotto_model/comparator/LottoComparatorImpl.java index 2f2974ff..e574405f 100644 --- a/src/main/java/lotto_model/LottoComparatorImpl.java +++ b/src/main/java/lotto_model/comparator/LottoComparatorImpl.java @@ -1,4 +1,8 @@ -package lotto_model; +package lotto_model.comparator; + +import lotto_model.data.LottoRepository; +import lotto_model.data.LottoWinning; +import lotto_model.lotto.Lotto; import java.util.Iterator; diff --git a/src/main/java/lotto_model/LottoRepository.java b/src/main/java/lotto_model/data/LottoRepository.java similarity index 67% rename from src/main/java/lotto_model/LottoRepository.java rename to src/main/java/lotto_model/data/LottoRepository.java index 4f51681a..65dccfe6 100644 --- a/src/main/java/lotto_model/LottoRepository.java +++ b/src/main/java/lotto_model/data/LottoRepository.java @@ -1,4 +1,6 @@ -package lotto_model; +package lotto_model.data; + +import lotto_model.lotto.Lotto; import java.util.List; diff --git a/src/main/java/lotto_model/LottoRepositoryImpl.java b/src/main/java/lotto_model/data/LottoRepositoryImpl.java similarity index 90% rename from src/main/java/lotto_model/LottoRepositoryImpl.java rename to src/main/java/lotto_model/data/LottoRepositoryImpl.java index 0590bc4c..fce3a34e 100644 --- a/src/main/java/lotto_model/LottoRepositoryImpl.java +++ b/src/main/java/lotto_model/data/LottoRepositoryImpl.java @@ -1,4 +1,6 @@ -package lotto_model; +package lotto_model.data; + +import lotto_model.lotto.Lotto; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/lotto_model/LottoWinning.java b/src/main/java/lotto_model/data/LottoWinning.java similarity index 74% rename from src/main/java/lotto_model/LottoWinning.java rename to src/main/java/lotto_model/data/LottoWinning.java index 7069a3ed..4a727dac 100644 --- a/src/main/java/lotto_model/LottoWinning.java +++ b/src/main/java/lotto_model/data/LottoWinning.java @@ -1,4 +1,6 @@ -package lotto_model; +package lotto_model.data; + +import lotto_model.lotto.LottoRank; public interface LottoWinning { void addFirst(); diff --git a/src/main/java/lotto_model/LottoWinningImpl.java b/src/main/java/lotto_model/data/LottoWinningImpl.java similarity index 73% rename from src/main/java/lotto_model/LottoWinningImpl.java rename to src/main/java/lotto_model/data/LottoWinningImpl.java index d0c9fbc7..6b84e2d2 100644 --- a/src/main/java/lotto_model/LottoWinningImpl.java +++ b/src/main/java/lotto_model/data/LottoWinningImpl.java @@ -1,13 +1,21 @@ -package lotto_model; +package lotto_model.data; import lotto_exception.ErrorMessage; +import lotto_model.lotto.LottoRank; public class LottoWinningImpl implements LottoWinning { - int first = 0; - int second = 0; - int third = 0; - int fourth = 0; - int fifth = 0; + private final static LottoWinningImpl instance = new LottoWinningImpl(); + + public static LottoWinningImpl getInstance() { + return instance; + } + + + private int first = 0; + private int second = 0; + private int third = 0; + private int fourth = 0; + private int fifth = 0; @Override public void addFirst() { diff --git a/src/main/java/lotto_model/LottoGenerator.java b/src/main/java/lotto_model/generator/LottoGenerator.java similarity index 71% rename from src/main/java/lotto_model/LottoGenerator.java rename to src/main/java/lotto_model/generator/LottoGenerator.java index 3287167c..e5313b2c 100644 --- a/src/main/java/lotto_model/LottoGenerator.java +++ b/src/main/java/lotto_model/generator/LottoGenerator.java @@ -1,4 +1,4 @@ -package lotto_model; +package lotto_model.generator; public interface LottoGenerator { void printLottoSaved(int inputMoney); diff --git a/src/main/java/lotto_model/LottoGeneratorImpl.java b/src/main/java/lotto_model/generator/LottoGeneratorImpl.java similarity index 91% rename from src/main/java/lotto_model/LottoGeneratorImpl.java rename to src/main/java/lotto_model/generator/LottoGeneratorImpl.java index 4e27aff9..1bd5fc0c 100644 --- a/src/main/java/lotto_model/LottoGeneratorImpl.java +++ b/src/main/java/lotto_model/generator/LottoGeneratorImpl.java @@ -1,6 +1,9 @@ -package lotto_model; +package lotto_model.generator; import camp.nextstep.edu.missionutils.Randoms; +import lotto_model.data.LottoRepository; +import lotto_model.lotto.Lotto; +import lotto_model.lotto.Unit; import java.util.Collections; diff --git a/src/main/java/lotto_model/Lotto.java b/src/main/java/lotto_model/lotto/Lotto.java similarity index 95% rename from src/main/java/lotto_model/Lotto.java rename to src/main/java/lotto_model/lotto/Lotto.java index eaf5ebbe..fd8bbbf1 100644 --- a/src/main/java/lotto_model/Lotto.java +++ b/src/main/java/lotto_model/lotto/Lotto.java @@ -1,4 +1,4 @@ -package lotto_model; +package lotto_model.lotto; import java.util.*; diff --git a/src/main/java/lotto_model/LottoRank.java b/src/main/java/lotto_model/lotto/LottoRank.java similarity index 91% rename from src/main/java/lotto_model/LottoRank.java rename to src/main/java/lotto_model/lotto/LottoRank.java index 2d15126e..4c8c17d0 100644 --- a/src/main/java/lotto_model/LottoRank.java +++ b/src/main/java/lotto_model/lotto/LottoRank.java @@ -1,4 +1,4 @@ -package lotto_model; +package lotto_model.lotto; public enum LottoRank { FIRST(1000000000), diff --git a/src/main/java/lotto_model/Unit.java b/src/main/java/lotto_model/lotto/Unit.java similarity index 91% rename from src/main/java/lotto_model/Unit.java rename to src/main/java/lotto_model/lotto/Unit.java index 419851e8..b45f1467 100644 --- a/src/main/java/lotto_model/Unit.java +++ b/src/main/java/lotto_model/lotto/Unit.java @@ -1,4 +1,4 @@ -package lotto_model; +package lotto_model.lotto; public enum Unit { UNIT_MONEY(1000), diff --git a/src/main/java/lotto_model/LottoService.java b/src/main/java/lotto_model/service/LottoService.java similarity index 67% rename from src/main/java/lotto_model/LottoService.java rename to src/main/java/lotto_model/service/LottoService.java index d91e3f68..2dc74a14 100644 --- a/src/main/java/lotto_model/LottoService.java +++ b/src/main/java/lotto_model/service/LottoService.java @@ -1,4 +1,6 @@ -package lotto_model; +package lotto_model.service; + +import lotto_model.lotto.Lotto; public interface LottoService { void lottoCompare(Lotto targetLotto, int bonusNumber); diff --git a/src/main/java/lotto_model/LottoServiceImpl.java b/src/main/java/lotto_model/service/LottoServiceImpl.java similarity index 80% rename from src/main/java/lotto_model/LottoServiceImpl.java rename to src/main/java/lotto_model/service/LottoServiceImpl.java index 959b427d..0a830a73 100644 --- a/src/main/java/lotto_model/LottoServiceImpl.java +++ b/src/main/java/lotto_model/service/LottoServiceImpl.java @@ -1,4 +1,8 @@ -package lotto_model; +package lotto_model.service; + +import lotto_model.comparator.LottoComparator; +import lotto_model.generator.LottoGenerator; +import lotto_model.lotto.Lotto; public class LottoServiceImpl implements LottoService { private final LottoComparator lottoComparator; diff --git a/src/main/java/lotto_view/LottoInput.java b/src/main/java/lotto_view/LottoInput.java index 372026e8..8c3c5b65 100644 --- a/src/main/java/lotto_view/LottoInput.java +++ b/src/main/java/lotto_view/LottoInput.java @@ -1,6 +1,6 @@ package lotto_view; -import lotto_model.Lotto; +import lotto_model.lotto.Lotto; public interface LottoInput { int getBonusNumber(); diff --git a/src/main/java/lotto_view/LottoInputImpl.java b/src/main/java/lotto_view/LottoInputImpl.java index bccfd059..81f5c33b 100644 --- a/src/main/java/lotto_view/LottoInputImpl.java +++ b/src/main/java/lotto_view/LottoInputImpl.java @@ -1,7 +1,7 @@ package lotto_view; -import lotto_model.Lotto; -import lotto_model.Unit; +import lotto_model.lotto.Lotto; +import lotto_model.lotto.Unit; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/lotto_view/LottoOutputImpl.java b/src/main/java/lotto_view/LottoOutputImpl.java index eeb2d364..e910c879 100644 --- a/src/main/java/lotto_view/LottoOutputImpl.java +++ b/src/main/java/lotto_view/LottoOutputImpl.java @@ -1,8 +1,8 @@ package lotto_view; -import lotto_model.LottoWinning; -import lotto_model.Unit; -import static lotto_model.LottoRank.*; +import lotto_model.data.LottoWinning; +import lotto_model.lotto.Unit; +import static lotto_model.lotto.LottoRank.*; import static lotto_view.OutputMessage.*; public class LottoOutputImpl implements LottoOutput { @@ -12,6 +12,7 @@ public LottoOutputImpl(LottoWinning lottoWinning) { this.lottoWinning = lottoWinning; } + @Override public void resultPrint(int inputMoney) { System.out.println("당첨 통계"); System.out.println("---"); diff --git a/src/test/java/lotto_view/LottoTest.java b/src/test/java/lotto_view/LottoTest.java index 4e03e43d..bcf85453 100644 --- a/src/test/java/lotto_view/LottoTest.java +++ b/src/test/java/lotto_view/LottoTest.java @@ -1,6 +1,6 @@ package lotto_view; -import lotto_model.Lotto; +import lotto_model.lotto.Lotto; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; From 1406a83bfad18d4e2964e8c9728112aa81e99d67 Mon Sep 17 00:00:00 2001 From: baaamk <136908616+baaamk@users.noreply.github.com> Date: Thu, 10 Oct 2024 12:15:44 +0900 Subject: [PATCH 16/21] =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=A1=B0?= =?UTF-8?q?=EC=A7=81=EB=8F=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...235\264\354\226\264\352\267\270\353\236\250.drawio" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" diff --git "a/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" "b/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" new file mode 100644 index 00000000..85255a62 --- /dev/null +++ "b/\354\240\234\353\252\251 \354\227\206\353\212\224 \353\213\244\354\235\264\354\226\264\352\267\270\353\236\250.drawio" @@ -0,0 +1,10 @@ + + + + + + + + + + From a503c0d6d83b9c52675f6f0bd5cdfa0ffed3d6d2 Mon Sep 17 00:00:00 2001 From: baaamk <136908616+baaamk@users.noreply.github.com> Date: Thu, 10 Oct 2024 12:16:55 +0900 Subject: [PATCH 17/21] =?UTF-8?q?lotto=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=A1=B0=EC=A7=81=EB=8F=84.drawio=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...12\244 \354\241\260\354\247\201\353\217\204.drawio" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "lotto \355\201\264\353\236\230\354\212\244 \354\241\260\354\247\201\353\217\204.drawio" diff --git "a/lotto \355\201\264\353\236\230\354\212\244 \354\241\260\354\247\201\353\217\204.drawio" "b/lotto \355\201\264\353\236\230\354\212\244 \354\241\260\354\247\201\353\217\204.drawio" new file mode 100644 index 00000000..2aee1104 --- /dev/null +++ "b/lotto \355\201\264\353\236\230\354\212\244 \354\241\260\354\247\201\353\217\204.drawio" @@ -0,0 +1,10 @@ + + + + + + + + + + From 3c5365316004057d9d10e7b7afb32fa2e89ddbf6 Mon Sep 17 00:00:00 2001 From: baaamk <136908616+baaamk@users.noreply.github.com> Date: Thu, 10 Oct 2024 13:05:48 +0900 Subject: [PATCH 18/21] =?UTF-8?q?lotto=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=A1=B0=EC=A7=81=EB=8F=84.drawio=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\241\260\354\247\201\353\217\204.drawio" | 106 +++++++++++++++++- 1 file changed, 105 insertions(+), 1 deletion(-) diff --git "a/lotto \355\201\264\353\236\230\354\212\244 \354\241\260\354\247\201\353\217\204.drawio" "b/lotto \355\201\264\353\236\230\354\212\244 \354\241\260\354\247\201\353\217\204.drawio" index 2aee1104..6118b004 100644 --- "a/lotto \355\201\264\353\236\230\354\212\244 \354\241\260\354\247\201\353\217\204.drawio" +++ "b/lotto \355\201\264\353\236\230\354\212\244 \354\241\260\354\247\201\353\217\204.drawio" @@ -1,9 +1,113 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 82f770fac83f377361ed5e37aa7aa60df90a20f9 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Thu, 10 Oct 2024 16:04:02 +0900 Subject: [PATCH 19/21] =?UTF-8?q?refactor:=20numbers=20=EC=A0=84=EC=97=AD?= =?UTF-8?q?=EB=B2=88=EC=88=98=EB=A1=9C=20=EB=B3=80=EA=B2=BD,?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: 보너스 번호 중복 방지 --- src/main/java/lotto_view/LottoInputImpl.java | 34 +++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/main/java/lotto_view/LottoInputImpl.java b/src/main/java/lotto_view/LottoInputImpl.java index 81f5c33b..e120047c 100644 --- a/src/main/java/lotto_view/LottoInputImpl.java +++ b/src/main/java/lotto_view/LottoInputImpl.java @@ -11,19 +11,9 @@ import static lotto_exception.ErrorMessage.*; -public class LottoInputImpl implements LottoInput{ +public class LottoInputImpl implements LottoInput { Scanner sc = new Scanner(System.in); - - @Override - public int getBonusNumber() { - System.out.println("보너스 번호를 입력해 주세요."); - int bonusNumber = sc.nextInt(); - if (bonusNumber < Unit.MIN_NUMBER.getValue() || bonusNumber > Unit.MAX_NUMBER.getValue()) { - throw new IllegalArgumentException(OUT_OF_RANGE.getErrorMessage()); - } - return bonusNumber; - - } + private final List numbers = new ArrayList<>(); @Override public int getInputMoney() { @@ -38,15 +28,14 @@ public int getInputMoney() { @Override public Lotto inputNumber() { System.out.println("당첨 번호를 입력해 주세요."); - List numbers = new ArrayList<>(); String inputNum = sc.next(); String[] targetNum = inputNum.split(","); - for (String num : targetNum) { - int addNumber = Integer.parseInt(num.trim()); + for (String number : targetNum) { + int addNumber = Integer.parseInt(number.trim()); if (addNumber > Unit.MAX_NUMBER.getValue()) { throw new NumberFormatException(OUT_OF_RANGE.getErrorMessage()); } - if (numbers.contains(addNumber)){ + if (numbers.contains(addNumber)) { throw new NumberFormatException(DUPLICATE_NUMBER.getErrorMessage()); } numbers.add(addNumber); @@ -54,4 +43,17 @@ public Lotto inputNumber() { Collections.sort(numbers); return new Lotto(numbers); } + + @Override + public int getBonusNumber() { + System.out.println("보너스 번호를 입력해 주세요."); + int bonusNumber = sc.nextInt(); + if (bonusNumber < Unit.MIN_NUMBER.getValue() || bonusNumber > Unit.MAX_NUMBER.getValue()) { + throw new IllegalArgumentException(OUT_OF_RANGE.getErrorMessage()); + } + if (numbers.contains(bonusNumber)) { + throw new IllegalArgumentException(DUPLICATE_NUMBER.getErrorMessage()); + } + return bonusNumber; + } } From 7aeb106917ed79393ce8e76b466a61deabfa4bd4 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Thu, 10 Oct 2024 16:18:59 +0900 Subject: [PATCH 20/21] =?UTF-8?q?refactor:=20=EC=A0=9C=EA=B3=B5=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9(scanner=20=EB=B3=80=EA=B2=BD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto_view/LottoInputImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/lotto_view/LottoInputImpl.java b/src/main/java/lotto_view/LottoInputImpl.java index e120047c..f47aad09 100644 --- a/src/main/java/lotto_view/LottoInputImpl.java +++ b/src/main/java/lotto_view/LottoInputImpl.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Scanner; +import static camp.nextstep.edu.missionutils.Console.readLine; import static lotto_exception.ErrorMessage.*; @@ -28,8 +29,8 @@ public int getInputMoney() { @Override public Lotto inputNumber() { System.out.println("당첨 번호를 입력해 주세요."); - String inputNum = sc.next(); - String[] targetNum = inputNum.split(","); + String inputNumber = readLine(); + String[] targetNum = inputNumber.split(","); for (String number : targetNum) { int addNumber = Integer.parseInt(number.trim()); if (addNumber > Unit.MAX_NUMBER.getValue()) { From 1baf846affe90016dcdc70d7c0be3ef3db3c5889 Mon Sep 17 00:00:00 2001 From: banghyunwoo Date: Thu, 10 Oct 2024 19:17:23 +0900 Subject: [PATCH 21/21] =?UTF-8?q?refactor:=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++-- src/main/java/AppConfig.java | 32 +++++++++---------- src/main/java/Application.java | 2 +- .../LottoController.java | 2 +- .../LottoControllerImpl.java | 10 +++--- .../ErrorMessage.java | 2 +- .../comparator/LottoComparator.java | 4 +-- .../comparator/LottoComparatorImpl.java | 8 ++--- .../data/LottoRepository.java | 4 +-- .../data/LottoRepositoryImpl.java | 4 +-- .../data/LottoWinning.java | 4 +-- .../data/LottoWinningImpl.java | 6 ++-- .../generator/LottoGenerator.java | 2 +- .../generator/LottoGeneratorImpl.java | 18 +++++++---- .../{lotto_model => model}/lotto/Lotto.java | 16 +++++----- .../lotto/LottoRank.java | 4 +-- .../{lotto_model => model}/lotto/Unit.java | 2 +- .../service/LottoService.java | 4 +-- .../service/LottoServiceImpl.java | 8 ++--- .../java/{lotto_view => view}/LottoInput.java | 4 +-- .../{lotto_view => view}/LottoInputImpl.java | 8 ++--- .../{lotto_view => view}/LottoOutput.java | 2 +- .../{lotto_view => view}/LottoOutputImpl.java | 10 +++--- .../{lotto_view => view}/OutputMessage.java | 12 +++---- .../java/{lotto_view => view}/LottoTest.java | 4 +-- 25 files changed, 91 insertions(+), 87 deletions(-) rename src/main/java/{lotto_controller => controller}/LottoController.java (67%) rename src/main/java/{lotto_controller => controller}/LottoControllerImpl.java (83%) rename src/main/java/{lotto_exception => exception}/ErrorMessage.java (96%) rename src/main/java/{lotto_model => model}/comparator/LottoComparator.java (59%) rename src/main/java/{lotto_model => model}/comparator/LottoComparatorImpl.java (91%) rename src/main/java/{lotto_model => model}/data/LottoRepository.java (68%) rename src/main/java/{lotto_model => model}/data/LottoRepositoryImpl.java (91%) rename src/main/java/{lotto_model => model}/data/LottoWinning.java (75%) rename src/main/java/{lotto_model => model}/data/LottoWinningImpl.java (92%) rename src/main/java/{lotto_model => model}/generator/LottoGenerator.java (71%) rename src/main/java/{lotto_model => model}/generator/LottoGeneratorImpl.java (77%) rename src/main/java/{lotto_model => model}/lotto/Lotto.java (88%) rename src/main/java/{lotto_model => model}/lotto/LottoRank.java (85%) rename src/main/java/{lotto_model => model}/lotto/Unit.java (91%) rename src/main/java/{lotto_model => model}/service/LottoService.java (68%) rename src/main/java/{lotto_model => model}/service/LottoServiceImpl.java (80%) rename src/main/java/{lotto_view => view}/LottoInput.java (67%) rename src/main/java/{lotto_view => view}/LottoInputImpl.java (93%) rename src/main/java/{lotto_view => view}/LottoOutput.java (78%) rename src/main/java/{lotto_view => view}/LottoOutputImpl.java (90%) rename src/main/java/{lotto_view => view}/OutputMessage.java (55%) rename src/test/java/{lotto_view => view}/LottoTest.java (94%) diff --git a/README.md b/README.md index 466d43d8..71fd180b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 객체지향 코드 연습 - 로또([우아한테크코스 프리코스 - lotto_view](https://github.com/woowacourse-precourse/java-lotto)) +# 객체지향 코드 연습 - 로또([우아한테크코스 프리코스 - view](https://github.com/woowacourse-precourse/java-lotto)) ## 🔍 진행 방식 @@ -180,7 +180,7 @@ BUILD SUCCESSFUL in 0 - Java Enum을 적용한다. - 도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(System.out, System.in, Scanner) 로직은 제외한다. - 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 분리해 구현한다. - - 단위 테스트 작성이 익숙하지 않다면 `test/java/lotto_view/LottoTest`를 참고하여 학습한 후 테스트를 구현한다. + - 단위 테스트 작성이 익숙하지 않다면 `test/java/view/LottoTest`를 참고하여 학습한 후 테스트를 구현한다. ### 라이브러리 @@ -225,7 +225,7 @@ public class Lotto { ## ✏️ 과제 진행 요구 사항 -- 미션은 [practice-oop-lotto_view](https://github.com/COW-edu/practice-oop-lotto) 저장소를 Fork & Clone해 시작한다. +- 미션은 [practice-oop-view](https://github.com/COW-edu/practice-oop-lotto) 저장소를 Fork & Clone해 시작한다. - **기능을 구현하기 전 `docs/README.md`에 구현할 기능 목록을 정리**해 추가한다. - **Git의 커밋 단위는 앞 단계에서 `docs/README.md`에 정리한 기능 목록 단위**로 추가한다. - [커밋 메시지 컨벤션](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) 가이드를 참고해 커밋 메시지를 작성한다. diff --git a/src/main/java/AppConfig.java b/src/main/java/AppConfig.java index 642c5092..dce6a5d5 100644 --- a/src/main/java/AppConfig.java +++ b/src/main/java/AppConfig.java @@ -1,19 +1,19 @@ -import lotto_controller.LottoController; -import lotto_controller.LottoControllerImpl; -import lotto_model.comparator.LottoComparator; -import lotto_model.comparator.LottoComparatorImpl; -import lotto_model.data.LottoRepository; -import lotto_model.data.LottoRepositoryImpl; -import lotto_model.data.LottoWinning; -import lotto_model.data.LottoWinningImpl; -import lotto_model.generator.LottoGenerator; -import lotto_model.generator.LottoGeneratorImpl; -import lotto_model.service.LottoService; -import lotto_model.service.LottoServiceImpl; -import lotto_view.LottoInput; -import lotto_view.LottoInputImpl; -import lotto_view.LottoOutput; -import lotto_view.LottoOutputImpl; +import controller.LottoController; +import controller.LottoControllerImpl; +import model.comparator.LottoComparator; +import model.comparator.LottoComparatorImpl; +import model.data.LottoRepository; +import model.data.LottoRepositoryImpl; +import model.data.LottoWinning; +import model.data.LottoWinningImpl; +import model.generator.LottoGenerator; +import model.generator.LottoGeneratorImpl; +import model.service.LottoService; +import model.service.LottoServiceImpl; +import view.LottoInput; +import view.LottoInputImpl; +import view.LottoOutput; +import view.LottoOutputImpl; public class AppConfig { public LottoInput lottoInput() { diff --git a/src/main/java/Application.java b/src/main/java/Application.java index 4b66655d..6123abaa 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -1,4 +1,4 @@ -import lotto_controller.LottoController; +import controller.LottoController; public class Application { public static void main(String[] args) { diff --git a/src/main/java/lotto_controller/LottoController.java b/src/main/java/controller/LottoController.java similarity index 67% rename from src/main/java/lotto_controller/LottoController.java rename to src/main/java/controller/LottoController.java index 1968f5f1..545fbf29 100644 --- a/src/main/java/lotto_controller/LottoController.java +++ b/src/main/java/controller/LottoController.java @@ -1,4 +1,4 @@ -package lotto_controller; +package controller; public interface LottoController { void run(); diff --git a/src/main/java/lotto_controller/LottoControllerImpl.java b/src/main/java/controller/LottoControllerImpl.java similarity index 83% rename from src/main/java/lotto_controller/LottoControllerImpl.java rename to src/main/java/controller/LottoControllerImpl.java index b40ec073..d98e6065 100644 --- a/src/main/java/lotto_controller/LottoControllerImpl.java +++ b/src/main/java/controller/LottoControllerImpl.java @@ -1,9 +1,9 @@ -package lotto_controller; +package controller; -import lotto_model.lotto.Lotto; -import lotto_model.service.LottoService; -import lotto_view.LottoInput; -import lotto_view.LottoOutput; +import model.lotto.Lotto; +import model.service.LottoService; +import view.LottoInput; +import view.LottoOutput; public class LottoControllerImpl implements LottoController { private final LottoInput lottoInput; diff --git a/src/main/java/lotto_exception/ErrorMessage.java b/src/main/java/exception/ErrorMessage.java similarity index 96% rename from src/main/java/lotto_exception/ErrorMessage.java rename to src/main/java/exception/ErrorMessage.java index dc9408b4..810843e8 100644 --- a/src/main/java/lotto_exception/ErrorMessage.java +++ b/src/main/java/exception/ErrorMessage.java @@ -1,4 +1,4 @@ -package lotto_exception; +package exception; public enum ErrorMessage { OUT_OF_RANGE("[ERROR] 1부터 45사이의 숫자를 입력해 주세요."), diff --git a/src/main/java/lotto_model/comparator/LottoComparator.java b/src/main/java/model/comparator/LottoComparator.java similarity index 59% rename from src/main/java/lotto_model/comparator/LottoComparator.java rename to src/main/java/model/comparator/LottoComparator.java index 85099db4..11fae143 100644 --- a/src/main/java/lotto_model/comparator/LottoComparator.java +++ b/src/main/java/model/comparator/LottoComparator.java @@ -1,6 +1,6 @@ -package lotto_model.comparator; +package model.comparator; -import lotto_model.lotto.Lotto; +import model.lotto.Lotto; public interface LottoComparator { void compare(Lotto tragetLotto, int bonusNumber); diff --git a/src/main/java/lotto_model/comparator/LottoComparatorImpl.java b/src/main/java/model/comparator/LottoComparatorImpl.java similarity index 91% rename from src/main/java/lotto_model/comparator/LottoComparatorImpl.java rename to src/main/java/model/comparator/LottoComparatorImpl.java index e574405f..36318345 100644 --- a/src/main/java/lotto_model/comparator/LottoComparatorImpl.java +++ b/src/main/java/model/comparator/LottoComparatorImpl.java @@ -1,8 +1,8 @@ -package lotto_model.comparator; +package model.comparator; -import lotto_model.data.LottoRepository; -import lotto_model.data.LottoWinning; -import lotto_model.lotto.Lotto; +import model.data.LottoRepository; +import model.data.LottoWinning; +import model.lotto.Lotto; import java.util.Iterator; diff --git a/src/main/java/lotto_model/data/LottoRepository.java b/src/main/java/model/data/LottoRepository.java similarity index 68% rename from src/main/java/lotto_model/data/LottoRepository.java rename to src/main/java/model/data/LottoRepository.java index 65dccfe6..ffb2bc87 100644 --- a/src/main/java/lotto_model/data/LottoRepository.java +++ b/src/main/java/model/data/LottoRepository.java @@ -1,6 +1,6 @@ -package lotto_model.data; +package model.data; -import lotto_model.lotto.Lotto; +import model.lotto.Lotto; import java.util.List; diff --git a/src/main/java/lotto_model/data/LottoRepositoryImpl.java b/src/main/java/model/data/LottoRepositoryImpl.java similarity index 91% rename from src/main/java/lotto_model/data/LottoRepositoryImpl.java rename to src/main/java/model/data/LottoRepositoryImpl.java index fce3a34e..c2a67b6a 100644 --- a/src/main/java/lotto_model/data/LottoRepositoryImpl.java +++ b/src/main/java/model/data/LottoRepositoryImpl.java @@ -1,6 +1,6 @@ -package lotto_model.data; +package model.data; -import lotto_model.lotto.Lotto; +import model.lotto.Lotto; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/lotto_model/data/LottoWinning.java b/src/main/java/model/data/LottoWinning.java similarity index 75% rename from src/main/java/lotto_model/data/LottoWinning.java rename to src/main/java/model/data/LottoWinning.java index 4a727dac..b9895ab1 100644 --- a/src/main/java/lotto_model/data/LottoWinning.java +++ b/src/main/java/model/data/LottoWinning.java @@ -1,6 +1,6 @@ -package lotto_model.data; +package model.data; -import lotto_model.lotto.LottoRank; +import model.lotto.LottoRank; public interface LottoWinning { void addFirst(); diff --git a/src/main/java/lotto_model/data/LottoWinningImpl.java b/src/main/java/model/data/LottoWinningImpl.java similarity index 92% rename from src/main/java/lotto_model/data/LottoWinningImpl.java rename to src/main/java/model/data/LottoWinningImpl.java index 6b84e2d2..5155eca9 100644 --- a/src/main/java/lotto_model/data/LottoWinningImpl.java +++ b/src/main/java/model/data/LottoWinningImpl.java @@ -1,7 +1,7 @@ -package lotto_model.data; +package model.data; -import lotto_exception.ErrorMessage; -import lotto_model.lotto.LottoRank; +import exception.ErrorMessage; +import model.lotto.LottoRank; public class LottoWinningImpl implements LottoWinning { private final static LottoWinningImpl instance = new LottoWinningImpl(); diff --git a/src/main/java/lotto_model/generator/LottoGenerator.java b/src/main/java/model/generator/LottoGenerator.java similarity index 71% rename from src/main/java/lotto_model/generator/LottoGenerator.java rename to src/main/java/model/generator/LottoGenerator.java index e5313b2c..970b123b 100644 --- a/src/main/java/lotto_model/generator/LottoGenerator.java +++ b/src/main/java/model/generator/LottoGenerator.java @@ -1,4 +1,4 @@ -package lotto_model.generator; +package model.generator; public interface LottoGenerator { void printLottoSaved(int inputMoney); diff --git a/src/main/java/lotto_model/generator/LottoGeneratorImpl.java b/src/main/java/model/generator/LottoGeneratorImpl.java similarity index 77% rename from src/main/java/lotto_model/generator/LottoGeneratorImpl.java rename to src/main/java/model/generator/LottoGeneratorImpl.java index 1bd5fc0c..4db90d61 100644 --- a/src/main/java/lotto_model/generator/LottoGeneratorImpl.java +++ b/src/main/java/model/generator/LottoGeneratorImpl.java @@ -1,13 +1,13 @@ -package lotto_model.generator; +package model.generator; import camp.nextstep.edu.missionutils.Randoms; -import lotto_model.data.LottoRepository; -import lotto_model.lotto.Lotto; -import lotto_model.lotto.Unit; +import model.data.LottoRepository; +import model.lotto.Lotto; +import model.lotto.Unit; import java.util.Collections; -import static lotto_view.OutputMessage.AMOUNT_OUTPUT; +import static view.OutputMessage.AMOUNT_OUTPUT; public class LottoGeneratorImpl implements LottoGenerator { private final LottoRepository lottoRepository; @@ -16,13 +16,17 @@ public LottoGeneratorImpl(LottoRepository lottoRepository) { this.lottoRepository = lottoRepository; } - int lottoAmount = 0; + int lottoAmount; @Override public void printLottoSaved(int inputMoney) { lottoAlign(inputMoney); System.out.printf((AMOUNT_OUTPUT.getMessage()) + "%n", lottoAmount); - lottoRepository.getLottoSaved().stream().forEach(item -> System.out.println(item.getNumbers())); + printAllLotto(); + } + + private void printAllLotto() { + lottoRepository.getLottoSaved().stream().forEach(item -> System.out.println(item.getNumbers())); } private void lottoAlign(int inputMoney) { diff --git a/src/main/java/lotto_model/lotto/Lotto.java b/src/main/java/model/lotto/Lotto.java similarity index 88% rename from src/main/java/lotto_model/lotto/Lotto.java rename to src/main/java/model/lotto/Lotto.java index fd8bbbf1..0321bcfc 100644 --- a/src/main/java/lotto_model/lotto/Lotto.java +++ b/src/main/java/model/lotto/Lotto.java @@ -1,8 +1,8 @@ -package lotto_model.lotto; +package model.lotto; import java.util.*; -import static lotto_exception.ErrorMessage.*; +import static exception.ErrorMessage.*; public class Lotto { private final List numbers; @@ -12,12 +12,6 @@ public Lotto(List numbers) { this.numbers = numbers; } - private void validate(List numbers) { - if (numbers.size() != 6) { - throw new IllegalArgumentException(INVALID_NUMBER_COUNT.getErrorMessage()); - } - } - public boolean contains(Integer element) { return numbers.contains(element); } @@ -25,4 +19,10 @@ public boolean contains(Integer element) { public List getNumbers() { return numbers; } + + private void validate(List numbers) { + if (numbers.size() != 6) { + throw new IllegalArgumentException(INVALID_NUMBER_COUNT.getErrorMessage()); + } + } } diff --git a/src/main/java/lotto_model/lotto/LottoRank.java b/src/main/java/model/lotto/LottoRank.java similarity index 85% rename from src/main/java/lotto_model/lotto/LottoRank.java rename to src/main/java/model/lotto/LottoRank.java index 4c8c17d0..59f7727f 100644 --- a/src/main/java/lotto_model/lotto/LottoRank.java +++ b/src/main/java/model/lotto/LottoRank.java @@ -1,7 +1,7 @@ -package lotto_model.lotto; +package model.lotto; public enum LottoRank { - FIRST(1000000000), + FIRST(2000000000), SECOND(30000000), THIRD(1500000), FOURTH(50000), diff --git a/src/main/java/lotto_model/lotto/Unit.java b/src/main/java/model/lotto/Unit.java similarity index 91% rename from src/main/java/lotto_model/lotto/Unit.java rename to src/main/java/model/lotto/Unit.java index b45f1467..a187c0b9 100644 --- a/src/main/java/lotto_model/lotto/Unit.java +++ b/src/main/java/model/lotto/Unit.java @@ -1,4 +1,4 @@ -package lotto_model.lotto; +package model.lotto; public enum Unit { UNIT_MONEY(1000), diff --git a/src/main/java/lotto_model/service/LottoService.java b/src/main/java/model/service/LottoService.java similarity index 68% rename from src/main/java/lotto_model/service/LottoService.java rename to src/main/java/model/service/LottoService.java index 2dc74a14..bddfcfd7 100644 --- a/src/main/java/lotto_model/service/LottoService.java +++ b/src/main/java/model/service/LottoService.java @@ -1,6 +1,6 @@ -package lotto_model.service; +package model.service; -import lotto_model.lotto.Lotto; +import model.lotto.Lotto; public interface LottoService { void lottoCompare(Lotto targetLotto, int bonusNumber); diff --git a/src/main/java/lotto_model/service/LottoServiceImpl.java b/src/main/java/model/service/LottoServiceImpl.java similarity index 80% rename from src/main/java/lotto_model/service/LottoServiceImpl.java rename to src/main/java/model/service/LottoServiceImpl.java index 0a830a73..84948e6d 100644 --- a/src/main/java/lotto_model/service/LottoServiceImpl.java +++ b/src/main/java/model/service/LottoServiceImpl.java @@ -1,8 +1,8 @@ -package lotto_model.service; +package model.service; -import lotto_model.comparator.LottoComparator; -import lotto_model.generator.LottoGenerator; -import lotto_model.lotto.Lotto; +import model.comparator.LottoComparator; +import model.generator.LottoGenerator; +import model.lotto.Lotto; public class LottoServiceImpl implements LottoService { private final LottoComparator lottoComparator; diff --git a/src/main/java/lotto_view/LottoInput.java b/src/main/java/view/LottoInput.java similarity index 67% rename from src/main/java/lotto_view/LottoInput.java rename to src/main/java/view/LottoInput.java index 8c3c5b65..abe6bbad 100644 --- a/src/main/java/lotto_view/LottoInput.java +++ b/src/main/java/view/LottoInput.java @@ -1,6 +1,6 @@ -package lotto_view; +package view; -import lotto_model.lotto.Lotto; +import model.lotto.Lotto; public interface LottoInput { int getBonusNumber(); diff --git a/src/main/java/lotto_view/LottoInputImpl.java b/src/main/java/view/LottoInputImpl.java similarity index 93% rename from src/main/java/lotto_view/LottoInputImpl.java rename to src/main/java/view/LottoInputImpl.java index f47aad09..3f71d933 100644 --- a/src/main/java/lotto_view/LottoInputImpl.java +++ b/src/main/java/view/LottoInputImpl.java @@ -1,7 +1,7 @@ -package lotto_view; +package view; -import lotto_model.lotto.Lotto; -import lotto_model.lotto.Unit; +import model.lotto.Lotto; +import model.lotto.Unit; import java.util.ArrayList; import java.util.Collections; @@ -9,7 +9,7 @@ import java.util.Scanner; import static camp.nextstep.edu.missionutils.Console.readLine; -import static lotto_exception.ErrorMessage.*; +import static exception.ErrorMessage.*; public class LottoInputImpl implements LottoInput { diff --git a/src/main/java/lotto_view/LottoOutput.java b/src/main/java/view/LottoOutput.java similarity index 78% rename from src/main/java/lotto_view/LottoOutput.java rename to src/main/java/view/LottoOutput.java index 6e2471e0..9db3b39e 100644 --- a/src/main/java/lotto_view/LottoOutput.java +++ b/src/main/java/view/LottoOutput.java @@ -1,4 +1,4 @@ -package lotto_view; +package view; public interface LottoOutput { void resultPrint(int inputMoney); diff --git a/src/main/java/lotto_view/LottoOutputImpl.java b/src/main/java/view/LottoOutputImpl.java similarity index 90% rename from src/main/java/lotto_view/LottoOutputImpl.java rename to src/main/java/view/LottoOutputImpl.java index e910c879..6f45accb 100644 --- a/src/main/java/lotto_view/LottoOutputImpl.java +++ b/src/main/java/view/LottoOutputImpl.java @@ -1,9 +1,9 @@ -package lotto_view; +package view; -import lotto_model.data.LottoWinning; -import lotto_model.lotto.Unit; -import static lotto_model.lotto.LottoRank.*; -import static lotto_view.OutputMessage.*; +import model.data.LottoWinning; +import model.lotto.Unit; +import static model.lotto.LottoRank.*; +import static view.OutputMessage.*; public class LottoOutputImpl implements LottoOutput { private final LottoWinning lottoWinning; diff --git a/src/main/java/lotto_view/OutputMessage.java b/src/main/java/view/OutputMessage.java similarity index 55% rename from src/main/java/lotto_view/OutputMessage.java rename to src/main/java/view/OutputMessage.java index b2e7ce97..73acf572 100644 --- a/src/main/java/lotto_view/OutputMessage.java +++ b/src/main/java/view/OutputMessage.java @@ -1,12 +1,12 @@ -package lotto_view; +package view; public enum OutputMessage { AMOUNT_OUTPUT("%d개를 구매했습니다."), - FIFTH_OUTPUT("3개 일치 (5,000원)-%d개"), - FOURTH_OUTPUT("4개 일치 (50,000원)-%d개"), - THIRD_OUTPUT("5개 일치 (1,500,000원)-%d개"), - SECOND_OUTPUT("5개 일치, 보너스 볼 일치 (30,000,000원)-%d개"), - FIRST_OUTPUT("6개 일치 (1,000,000,000원)-%d개"); + FIFTH_OUTPUT("3개 일치 (5,000원) - %d개"), + FOURTH_OUTPUT("4개 일치 (50,000원) - %d개"), + THIRD_OUTPUT("5개 일치 (1,500,000원) - %d개"), + SECOND_OUTPUT("5개 일치, 보너스 볼 일치 (30,000,000원) - %d개"), + FIRST_OUTPUT("6개 일치 (2,000,000,000원) - %d개"); private final String message; diff --git a/src/test/java/lotto_view/LottoTest.java b/src/test/java/view/LottoTest.java similarity index 94% rename from src/test/java/lotto_view/LottoTest.java rename to src/test/java/view/LottoTest.java index bcf85453..0cc0cb2b 100644 --- a/src/test/java/lotto_view/LottoTest.java +++ b/src/test/java/view/LottoTest.java @@ -1,6 +1,6 @@ -package lotto_view; +package view; -import lotto_model.lotto.Lotto; +import model.lotto.Lotto; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test;