Skip to content

Commit

Permalink
🔨Refactor : Config를 통한 의존성 주입. Controller를 통한 게임 진행.
Browse files Browse the repository at this point in the history
  • Loading branch information
ChabinHwang committed Feb 7, 2025
1 parent 45013be commit ed887f3
Show file tree
Hide file tree
Showing 18 changed files with 346 additions and 207 deletions.
38 changes: 11 additions & 27 deletions src/main/java/lotto/Application.java
Original file line number Diff line number Diff line change
@@ -1,34 +1,18 @@
package lotto;

import lotto.Producer.LottoProducer;
import lotto.Product.Lotto;

import java.util.Scanner;
import lotto.config.LottoConfig;
import lotto.controller.LottoController;

public class Application {

public static void main(String[] args) {
IOSequence io=new IOSequence(new Scanner(System.in));
User user = new User();
// 초기 투자금 지정
user.setPurchaseMoney(io.inputPurchaseMoney());
Seller seller = new Seller(new LottoProducer());
// 셀러에게 로또 구매
user.orderToSeller(seller);
// 구매한 로또 번호 출력
io.outputLottoList(user.getPurchaseLottoList());
// 당첨 번호, 보너스 번호 지정해서 객체 생성
Lotto lt= io.inputWinningLotto();
int bonusNum = io.inputBonusInt(lt);
LottoGradeCheck lc=new LottoGradeCheck(lt, bonusNum);
// 등수 확인
user.checkLottoGrade(lc);
// 등수 출력
io.outputGrade(user.getGradeList());
// 상금 계산
user.calculatePrize();
// 수익률 계산
user.calculateRateofProfit();
// 수익률 반환, 출력
io.outputRateOfProfit(user.getRateofProfit());

LottoConfig lottoConfig=new LottoConfig();

// config를 통해 controller에 의존성 주입
LottoController lottoController = lottoConfig.initLottoController();

// startGame을 통해 게임 진행
lottoController.startGame();
}
}
88 changes: 0 additions & 88 deletions src/main/java/lotto/IOSequence.java

This file was deleted.

62 changes: 0 additions & 62 deletions src/main/java/lotto/User.java

This file was deleted.

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


import lotto.controller.LottoController;
import lotto.domain.Seller;
import lotto.domain.producer.LottoProducer;
import lotto.domain.producer.Producer;
import lotto.service.CalculateService;
import lotto.service.DistributeService;
import lotto.service.ValidationService;
import lotto.service.LottoGradeCheckService;
import lotto.service.InputService;
import lotto.view.Output;

import java.util.Scanner;

/**
* <h4>로또 프로그램 실행을 위해 의존성 주입</h4>
*/
public class LottoConfig {

public LottoController initLottoController() {
Producer producer = getLottoProducer();
Seller seller = getSeller(producer);
DistributeService distributeService = getDistributeService(seller);
LottoGradeCheckService lottoGradeCheckService = getLottoGradeCheckService();
InputService inputService = getIOSequence();
CalculateService calculateService = getCalculateService();
Output output = getOutput();
return new LottoController(lottoGradeCheckService, distributeService, inputService, calculateService, output);
}

private Output getOutput() {
return new Output();
}

private static CalculateService getCalculateService() {
return new CalculateService();
}

private static InputService getIOSequence() {
return new InputService(getValidationService(), new Scanner(System.in));
}

private static DistributeService getDistributeService(Seller seller) {
return new DistributeService(seller);
}

private static LottoGradeCheckService getLottoGradeCheckService() {
return new LottoGradeCheckService();
}

private static ValidationService getValidationService() {
return new ValidationService();
}

private Producer getLottoProducer() {
return new LottoProducer();
}

private Seller getSeller(Producer producer) {
return new Seller(producer);
}
}
70 changes: 70 additions & 0 deletions src/main/java/lotto/controller/LottoController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package lotto.controller;

import lotto.domain.product.Lotto;
import lotto.domain.product.Product;
import lotto.service.CalculateService;
import lotto.service.DistributeService;
import lotto.service.LottoGradeCheckService;
import lotto.service.InputService;
import lotto.view.Output;

import java.util.ArrayList;
import java.util.List;
/**
* <h4>전체적인 프로그램 흐름 제어</h4>
* <br>
* {@link lotto.config.LottoConfig} 를 통해 Controller 객체가 생성된 후, {@link #startGame()} 을 통해 프로그램 진행
*/
public class LottoController {

private final LottoGradeCheckService lottoGradeCheckService;
private final DistributeService distributeService;
private final InputService inputService;
private final CalculateService calculateService;
private final Output output;

public LottoController(LottoGradeCheckService lottoGradeCheckService, DistributeService distributeService, InputService inputService, CalculateService calculateService, Output output) {
this.lottoGradeCheckService = lottoGradeCheckService;
this.distributeService = distributeService;
this.inputService = inputService;
this.calculateService = calculateService;
this.output = output;
}

public void startGame(){
// 초기 투자금 지정
int purchaseMoney;
try{
purchaseMoney = inputService.inputPurchaseMoney();
}catch (IllegalArgumentException e){
System.out.println("[ERROR]잘못된 입력입니다. 프로그램을 종료합니다.");
return;
}
int purchaseLottoCount= purchaseMoney / 1000;
// 구매 수량으로 Lotto 구매
List<Product> purchaseProduct = distributeService.orderToSeller(purchaseLottoCount);
List<Lotto> purchaseLottos = new ArrayList<>();
for (Product product : purchaseProduct) {
purchaseLottos.add((Lotto) product);
}

// 구매한 로또 번호 출력
output.outputLottoList(purchaseLottos);
// 당첨 번호, 보너스 번호 지정해서 객체 생성
Lotto prizeLotto= inputService.inputWinningLotto();
int bonusNum = inputService.inputBonusInt(prizeLotto);
endGame(purchaseLottos, prizeLotto, bonusNum, purchaseMoney);
}

private void endGame(List<Lotto> purchaseLottos, Lotto prizeLotto, int bonusNum, int purchaseMoney){
// 등수 확인
List<Integer> gradeList=lottoGradeCheckService.checkGrade(prizeLotto,bonusNum,purchaseLottos);
// 등수 출력
output.outputGrade(gradeList);
// 수익률 계산
double RateOfProfit = calculateService.calculateRateofProfit(gradeList, purchaseMoney);
// 수익률 반환, 출력
output.outputRateOfProfit(RateOfProfit);

}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package lotto;
package lotto.domain;

public enum LottoPrize {
FIRST(2_000_000_000.0),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package lotto;
package lotto.domain;

import lotto.Producer.Producer;
import lotto.Product.Lotto;
import lotto.Product.Product;
import lotto.domain.producer.Producer;
import lotto.domain.product.Product;

import java.util.List;

Expand All @@ -13,7 +12,7 @@ public Seller(Producer Producer) {
this.producer = Producer;
}

public List<Product> orderSequence(int ProductCount, User Buyer) {
public List<Product> orderSequence(int ProductCount) {
// producer 에게서 상품을 만들어 Buyer 에게 전달
return this.producer.produceProducts(ProductCount);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package lotto.Producer;
package lotto.domain.producer;

import camp.nextstep.edu.missionutils.Randoms;
import lotto.Product.Lotto;
import lotto.Product.Product;
import lotto.domain.product.Lotto;
import lotto.domain.product.Product;

import java.util.ArrayList;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package lotto.Producer;
package lotto.domain.producer;

import lotto.Product.Product;
import lotto.domain.product.Product;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package lotto.Product;
package lotto.domain.product;

import java.util.ArrayList;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package lotto.Product;
package lotto.domain.product;

public interface Product {
}
Loading

0 comments on commit ed887f3

Please sign in to comment.