Skip to content

Commit

Permalink
refactor(OutputView): LottoApplication에서 로또 출력하는 기능을 분리함
Browse files Browse the repository at this point in the history
- Lotto의 number정보를 주는 getter를 만들지 않고 dto를 만들어 줌
  - 다른 객체에서 numbers를 사용하지 않도록 하기 위해 dto를 구현함
- OutputView를 만들어 1차적으로 Lotto 출력하는 부분을 비즈니스 로직에서 분리함
- Lotto, LottoShop에서 UI와 관련된 메서드를 삭제함
  • Loading branch information
leegwichan committed Nov 16, 2022
1 parent c8bd3b3 commit 1484b17
Show file tree
Hide file tree
Showing 8 changed files with 77 additions and 43 deletions.
10 changes: 6 additions & 4 deletions src/main/java/lotto/LottoApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,20 @@

import device.input.Input;
import device.output.Output;
import lotto.lotto.dto.LottoListDto;
import lotto.lotto.Lotto;
import lotto.lotto.LottoShop;
import lotto.reward.RewardCoordinator;
import lotto.setting.LottoApplicationSetting;
import lotto.view.InputView;
import lotto.view.OutputView;
import lotto.winningnumber.WinningNumber;
import java.util.List;

public class LottoApplication {

private final InputView inputView;
private final OutputView outputView;
private final Output output;
private final LottoApplicationSetting setting;

Expand All @@ -21,6 +24,7 @@ public class LottoApplication {

LottoApplication(Input input, Output output, LottoApplicationSetting setting) {
this.inputView = new InputView(input, output);
this.outputView = new OutputView(output);
this.output = output;
this.setting = setting;
}
Expand All @@ -40,12 +44,10 @@ private void runApplication() {

private void buyLotto() {
purchasePrice = inputView.readPurchasePrice();

LottoShop lottoShop = setting.createLottoShop();
lottos = lottoShop.buyLotto(purchasePrice);

String lottosInfo = lottoShop.getLottoInfo(lottos);
output.print(lottosInfo);
lottos = lottoShop.buyLotto(purchasePrice);
outputView.printLottos(new LottoListDto(lottos));
}

private void showRewardResult() {
Expand Down
9 changes: 3 additions & 6 deletions src/main/java/lotto/lotto/Lotto.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package lotto.lotto;

import lotto.message.ExceptionMessage;
import lotto.lotto.dto.LottoDto;
import lotto.setting.LottoSetting;
import java.util.List;
import java.util.stream.Collectors;

public class Lotto {
private final List<Integer> numbers;
Expand All @@ -17,10 +16,8 @@ public Lotto(List<Integer> numbers, LottoSetting setting) {
this.numbers = numbers;
}

public String getNumbers() {
return numbers.stream().sorted()
.map(number -> String.valueOf(number))
.collect(Collectors.joining(", ","[","]"));
public LottoDto getLottoDto() {
return new LottoDto(List.copyOf(numbers));
}

public boolean isInNumbers(int number) {
Expand Down
9 changes: 0 additions & 9 deletions src/main/java/lotto/lotto/LottoShop.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,4 @@ private List<Lotto> createAutoLotto(int countOfLotto) {
}
return lottos;
}

public String getLottoInfo(List<Lotto> lottos) {
String lottosInfo = lottos.stream()
.map(lotto -> lotto.getNumbers())
.collect(Collectors.joining("\n"));

return "\n" + lottos.size() + "개를 구매했습니다."
+ lottosInfo;
}
}
16 changes: 16 additions & 0 deletions src/main/java/lotto/lotto/dto/LottoDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package lotto.lotto.dto;

import java.util.List;

public class LottoDto {

private List<Integer> numbers;

public LottoDto(List<Integer> numbers) {
this.numbers = numbers;
}

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

import lotto.lotto.Lotto;
import java.util.List;
import java.util.stream.Collectors;

public class LottoListDto {

private List<LottoDto> lottoDtos;

public LottoListDto(List<Lotto> lottos) {
this.lottoDtos = lottos.stream()
.map(lotto -> lotto.getLottoDto())
.collect(Collectors.toList());
}

public List<LottoDto> getLottoDtos() {
return lottoDtos;
}
}
32 changes: 32 additions & 0 deletions src/main/java/lotto/view/OutputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package lotto.view;

import device.output.Output;
import lotto.lotto.dto.LottoDto;
import lotto.lotto.dto.LottoListDto;
import java.util.List;
import java.util.stream.Collectors;

public class OutputView {

private final Output output;

public OutputView(Output output) {
this.output = output;
}

public void printLottos(LottoListDto lottoListDto) {
List<LottoDto> lottoDtos = lottoListDto.getLottoDtos();

output.print("\n" + lottoDtos.size() + "개를 구매했습니다.");
for (LottoDto lottoDto : lottoDtos) {
output.print(getNumbers(lottoDto));
}
}

private String getNumbers(LottoDto lottoDto) {
return lottoDto.getNumbers().stream()
.sorted()
.map(number -> String.valueOf(number))
.collect(Collectors.joining(", ","[","]"));
}
}
13 changes: 0 additions & 13 deletions src/test/java/lotto/lotto/LottoShopTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,4 @@ void buyLottoTest_IsListSizeMatched() {

assertThat(result.size() == 5).isEqualTo(true);
}

@Test
void getLottoInfoTest() {
Lotto lotto = mock(Lotto.class);
when(lotto.getNumbers()).thenReturn("[1, 2, 3, 4, 5, 6]");
List<Lotto> lottos = List.of(lotto, lotto);
LottoSetting lottoSetting = mock(LottoSetting.class);
String expect = "\n2개를 구매했습니다.\n" +
"[1, 2, 3, 4, 5, 6]" +
"[1, 2, 3, 4, 5, 6]";

String result = new LottoShop(1000, lottoSetting).getLottoInfo(lottos);
}
}
11 changes: 0 additions & 11 deletions src/test/java/lotto/lotto/LottoUnitTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,6 @@ void notThrowExceptionTest_whenFormMatched() {
}).doesNotThrowAnyException();
}

@Test
void getNumbersTest() {
LottoSetting lottoSetting = mock(LottoSetting.class);
Lotto lotto = new Lotto(List.of(6,5,4,3,2,1), lottoSetting);
String excepted = "[1, 2, 3, 4, 5, 6]";

String result = lotto.getNumbers();

assertThat(result).isEqualTo(excepted);
}

@Test
void isInNumberTest_expectedTrue() {
LottoSetting lottoSetting = mock(LottoSetting.class);
Expand Down

0 comments on commit 1484b17

Please sign in to comment.