From 194bd1597dc76aa45cb65f32f5c003713eff5ee9 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 17:02:03 +0900 Subject: [PATCH 001/115] =?UTF-8?q?docs:=20TDD=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=82=AC=ED=95=AD=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 03ba7ed3..0d8a642c 100644 --- a/README.md +++ b/README.md @@ -1 +1,65 @@ -# java-blackjack \ No newline at end of file +# 연료 주입 + +## TDD 기능 구현 사항 + +- [ ] Sonata + - [ ] `Sonata` String Type 이름을 가져야한다. + - [ ] `10km/리터`의 연비 가져야한다. + - [ ] 거리 가져야한다. + - [ ] 거리는 `0` 이상 정수이어야한다. + - [ ] 주입해야할 연료량을 구할 수 있다. +- [ ] Avante + - [ ] `Avante` String Type 이름을 가져야한다. + - [ ] `15km/리터`의 연비 가져야한다. + - [ ] 거리 가져야한다. + - [ ] 거리는 `0` 이상 정수이어야한다. - + - [ ] 주입해야할 연료량을 구할 수 있다. +- [ ] K5 + - [ ] `K5` String Type 이름을 가져야한다. + - [ ] `13km/리터`의 연비 가져야한다. + - [ ] 거리 가져야한다. + - [ ] 거리는 `0` 이상 정수이어야한다. + - [ ] 주입해야할 연료량을 구할 수 있다. +- [ ] RentCompany + - [ ] `create()`, 팩토리 메서드를 구현한다. + - [ ] `addCar()`, 차를 추가할 수 있다. + - [ ] `generateReport()`는 전체 결과를 출력한다. +- [ ] InputView + - [ ] 이동거리와 차를 입력 받을 수 있다. +- [ ] OutputView + - [ ] `printRequiredFuel()` 하나의 차에 대해 연비를 출력할 수 있다. + +## 기능 구현 사항 + +- [ ] 보유 차량 + - Sonata + - 대수: 2대 + - 연비: 10km/리터 + - Avante + - 대수: 1대 + - 연비: 15km/리터 + - K5 + - 대수: 2대 + - 연비: 13km/리터 +- [ ] 고객이 인터넷으로부터 예약할 때 여행할 목적지의 대략적인 이동거리를 입력 받을 수 있다. +- [ ] 이동거리를 활용해 차량 별로 필요한 연료를 주입할 수 있다. +- [ ] 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성할 수 있다. + +## 프로그래밍 요구 사항 + +- [ ] 상속과 추상 메서드를 활용한다. +- [ ] 위 요구사항을 if/else 절을 쓰지 않고 구현해야 한다. +- [ ] 인터페이스를 적용해 구현한다. + +# java-blackjack + + +### git multiple author + +```bash +git commit -m "commit message + + +Co-authored-by: hochan222 +Co-authored-by: chanuuuuu +``` \ No newline at end of file From 2132cfe4a7c51eb407347047c3e4c8652f40121c Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 17:03:39 +0900 Subject: [PATCH 002/115] =?UTF-8?q?test:=20RentCompanyTest=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BC=80=EC=9D=B4=EC=8A=A4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/fuelInjection/RentCompanyTest.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/test/java/fuelInjection/RentCompanyTest.java diff --git a/src/test/java/fuelInjection/RentCompanyTest.java b/src/test/java/fuelInjection/RentCompanyTest.java new file mode 100644 index 00000000..dda01f7b --- /dev/null +++ b/src/test/java/fuelInjection/RentCompanyTest.java @@ -0,0 +1,28 @@ +package fuelInjection; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +public class RentCompanyTest { + private static final String NEWLINE = System.getProperty("line.separator"); + + @Test + public void report() throws Exception { + RentCompany company = RentCompany.create(); // factory method를 사용해 생성 + company.addCar(new Sonata(150)); + company.addCar(new K5(260)); + company.addCar(new Sonata(120)); + company.addCar(new Avante(300)); + company.addCar(new K5(390)); + + String report = company.generateReport(); + assertThat(report).isEqualTo( + "Sonata : 15리터" + NEWLINE + + "K5 : 20리터" + NEWLINE + + "Sonata : 12리터" + NEWLINE + + "Avante : 20리터" + NEWLINE + + "K5 : 30리터" + NEWLINE + ); + } +} From 452e4942b041a3fd35f57806cdb3cc81f5bd89de Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 17:04:39 +0900 Subject: [PATCH 003/115] =?UTF-8?q?feat:=20=EC=B4=88=EA=B8=B0=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/fuelInjection/Application.java | 8 +++++++ src/main/java/fuelInjection/RentCompany.java | 5 ++++ src/main/java/fuelInjection/domain/Car.java | 25 ++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 src/main/java/fuelInjection/Application.java create mode 100644 src/main/java/fuelInjection/RentCompany.java create mode 100644 src/main/java/fuelInjection/domain/Car.java diff --git a/src/main/java/fuelInjection/Application.java b/src/main/java/fuelInjection/Application.java new file mode 100644 index 00000000..b6fb0e05 --- /dev/null +++ b/src/main/java/fuelInjection/Application.java @@ -0,0 +1,8 @@ +package fuelInjection; + +public class Application { + + public static void main(String[] args) { + + } +} diff --git a/src/main/java/fuelInjection/RentCompany.java b/src/main/java/fuelInjection/RentCompany.java new file mode 100644 index 00000000..b26fd687 --- /dev/null +++ b/src/main/java/fuelInjection/RentCompany.java @@ -0,0 +1,5 @@ +package fuelInjection; + +public class RentCompany { + +} diff --git a/src/main/java/fuelInjection/domain/Car.java b/src/main/java/fuelInjection/domain/Car.java new file mode 100644 index 00000000..545bf96b --- /dev/null +++ b/src/main/java/fuelInjection/domain/Car.java @@ -0,0 +1,25 @@ +package fuelInjection.domain; + +public abstract class Car { + /** + * 리터당 이동 거리. 즉, 연비 + */ + abstract double getDistancePerLiter(); + + /** + * 여행하려는 거리 + */ + abstract double getTripDistance(); + + /** + * 차종의 이름 + */ + abstract String getName(); + + /** + * 주입해야할 연료량을 구한다. + */ + double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } +} From af3b6ac0a6997e328c9920366d7838a6b8e03166 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 17:08:18 +0900 Subject: [PATCH 004/115] =?UTF-8?q?test:=20`Sonata`=20String=20Type=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=84=20=EA=B0=80=EC=A0=B8=EC=95=BC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/fuelInjection/RentCompanyTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/java/fuelInjection/RentCompanyTest.java b/src/test/java/fuelInjection/RentCompanyTest.java index dda01f7b..060bfee8 100644 --- a/src/test/java/fuelInjection/RentCompanyTest.java +++ b/src/test/java/fuelInjection/RentCompanyTest.java @@ -1,12 +1,23 @@ package fuelInjection; import static org.junit.jupiter.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; public class RentCompanyTest { private static final String NEWLINE = System.getProperty("line.separator"); + @DisplayName("`Sonata` String Type 이름을 가져야한다.") + @Test + public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { + Sonata sonata = new Sonata(); + + assertThat(sonata.getName()) + .isEqualTo("Sonata"); + } + @Test public void report() throws Exception { RentCompany company = RentCompany.create(); // factory method를 사용해 생성 From a508794b3e84cbe4343fa63de94126a78763f96b Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 17:20:19 +0900 Subject: [PATCH 005/115] =?UTF-8?q?test:=20`Sonata`=20String=20Type=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=84=20=EA=B0=80=EC=A0=B8=EC=95=BC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/fuelInjection/RentCompanyTest.java | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/test/java/fuelInjection/RentCompanyTest.java b/src/test/java/fuelInjection/RentCompanyTest.java index 060bfee8..53f87522 100644 --- a/src/test/java/fuelInjection/RentCompanyTest.java +++ b/src/test/java/fuelInjection/RentCompanyTest.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThat; +import fuelInjection.domain.Sonata; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -18,22 +19,22 @@ public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { .isEqualTo("Sonata"); } - @Test - public void report() throws Exception { - RentCompany company = RentCompany.create(); // factory method를 사용해 생성 - company.addCar(new Sonata(150)); - company.addCar(new K5(260)); - company.addCar(new Sonata(120)); - company.addCar(new Avante(300)); - company.addCar(new K5(390)); - - String report = company.generateReport(); - assertThat(report).isEqualTo( - "Sonata : 15리터" + NEWLINE + - "K5 : 20리터" + NEWLINE + - "Sonata : 12리터" + NEWLINE + - "Avante : 20리터" + NEWLINE + - "K5 : 30리터" + NEWLINE - ); - } +// @Test +// public void report() throws Exception { +// RentCompany company = RentCompany.create(); // factory method를 사용해 생성 +// company.addCar(new Sonata(150)); +// company.addCar(new K5(260)); +// company.addCar(new Sonata(120)); +// company.addCar(new Avante(300)); +// company.addCar(new K5(390)); +// +// String report = company.generateReport(); +// assertThat(report).isEqualTo( +// "Sonata : 15리터" + NEWLINE + +// "K5 : 20리터" + NEWLINE + +// "Sonata : 12리터" + NEWLINE + +// "Avante : 20리터" + NEWLINE + +// "K5 : 30리터" + NEWLINE +// ); +// } } From 115b8727d3fa21dae12d2908392b4e2cc6d9a9b0 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 17:20:35 +0900 Subject: [PATCH 006/115] =?UTF-8?q?feat:=20`Sonata`=20String=20Type=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=84=20=EA=B0=80=EC=A0=B8=EC=95=BC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/fuelInjection/domain/Car.java | 10 +++++----- src/main/java/fuelInjection/domain/Sonata.java | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 src/main/java/fuelInjection/domain/Sonata.java diff --git a/src/main/java/fuelInjection/domain/Car.java b/src/main/java/fuelInjection/domain/Car.java index 545bf96b..82ae833b 100644 --- a/src/main/java/fuelInjection/domain/Car.java +++ b/src/main/java/fuelInjection/domain/Car.java @@ -4,12 +4,12 @@ public abstract class Car { /** * 리터당 이동 거리. 즉, 연비 */ - abstract double getDistancePerLiter(); +// abstract double getDistancePerLiter(); /** * 여행하려는 거리 */ - abstract double getTripDistance(); +// abstract double getTripDistance(); /** * 차종의 이름 @@ -19,7 +19,7 @@ public abstract class Car { /** * 주입해야할 연료량을 구한다. */ - double getChargeQuantity() { - return getTripDistance() / getDistancePerLiter(); - } +// double getChargeQuantity() { +// return getTripDistance() / getDistancePerLiter(); +// } } diff --git a/src/main/java/fuelInjection/domain/Sonata.java b/src/main/java/fuelInjection/domain/Sonata.java new file mode 100644 index 00000000..b221b753 --- /dev/null +++ b/src/main/java/fuelInjection/domain/Sonata.java @@ -0,0 +1,14 @@ +package fuelInjection.domain; + +public class Sonata extends Car { + + private static final String NAME = "Sonata"; + + public Sonata () { + + } + + public String getName() { + return NAME; + }; +} From afb8d8b727a366f57eb28e1e19152a53145095dc Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 17:20:42 +0900 Subject: [PATCH 007/115] =?UTF-8?q?docs:=20`Sonata`=20String=20Type=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=84=20=EA=B0=80=EC=A0=B8=EC=95=BC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0d8a642c..a903df13 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## TDD 기능 구현 사항 - [ ] Sonata - - [ ] `Sonata` String Type 이름을 가져야한다. + - [x] `Sonata` String Type 이름을 가져야한다. - [ ] `10km/리터`의 연비 가져야한다. - [ ] 거리 가져야한다. - [ ] 거리는 `0` 이상 정수이어야한다. From 27431e99fbc9260d97c2fa582f494ee06e5362f6 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 17:24:24 +0900 Subject: [PATCH 008/115] =?UTF-8?q?test:=20`10km/=EB=A6=AC=ED=84=B0`?= =?UTF-8?q?=EC=9D=98=20=EC=97=B0=EB=B9=84=20=EA=B0=80=EC=A0=B8=EC=95=BC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/fuelInjection/RentCompanyTest.java | 9 ------- .../java/fuelInjection/domain/SonataTest.java | 27 +++++++++++++++++++ 2 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 src/test/java/fuelInjection/domain/SonataTest.java diff --git a/src/test/java/fuelInjection/RentCompanyTest.java b/src/test/java/fuelInjection/RentCompanyTest.java index 53f87522..eb299115 100644 --- a/src/test/java/fuelInjection/RentCompanyTest.java +++ b/src/test/java/fuelInjection/RentCompanyTest.java @@ -10,15 +10,6 @@ public class RentCompanyTest { private static final String NEWLINE = System.getProperty("line.separator"); - @DisplayName("`Sonata` String Type 이름을 가져야한다.") - @Test - public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { - Sonata sonata = new Sonata(); - - assertThat(sonata.getName()) - .isEqualTo("Sonata"); - } - // @Test // public void report() throws Exception { // RentCompany company = RentCompany.create(); // factory method를 사용해 생성 diff --git a/src/test/java/fuelInjection/domain/SonataTest.java b/src/test/java/fuelInjection/domain/SonataTest.java new file mode 100644 index 00000000..50e935a2 --- /dev/null +++ b/src/test/java/fuelInjection/domain/SonataTest.java @@ -0,0 +1,27 @@ +package fuelInjection.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class SonataTest { + @DisplayName("`Sonata` String Type 이름을 가져야한다.") + @Test + public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { + Sonata sonata = new Sonata(); + + assertThat(sonata.getName()) + .isEqualTo("Sonata"); + } + + @DisplayName("`10km/리터`의 연비 가져야한다.") + @Test + public void givenSonataClass_whenCreateInstance_thenDistancePerLiterIs10 () { + Sonata sonata = new Sonata(); + + assertThat(sonata.getDistancePerLiter()) + .isEqualTo(10); + } +} \ No newline at end of file From bed1c08990018665ae0d68ae390a91a5a7a29d82 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 17:24:36 +0900 Subject: [PATCH 009/115] =?UTF-8?q?feat:=20`10km/=EB=A6=AC=ED=84=B0`?= =?UTF-8?q?=EC=9D=98=20=EC=97=B0=EB=B9=84=20=EA=B0=80=EC=A0=B8=EC=95=BC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/fuelInjection/domain/Car.java | 2 +- src/main/java/fuelInjection/domain/Sonata.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/fuelInjection/domain/Car.java b/src/main/java/fuelInjection/domain/Car.java index 82ae833b..0e69f253 100644 --- a/src/main/java/fuelInjection/domain/Car.java +++ b/src/main/java/fuelInjection/domain/Car.java @@ -4,7 +4,7 @@ public abstract class Car { /** * 리터당 이동 거리. 즉, 연비 */ -// abstract double getDistancePerLiter(); + abstract double getDistancePerLiter(); /** * 여행하려는 거리 diff --git a/src/main/java/fuelInjection/domain/Sonata.java b/src/main/java/fuelInjection/domain/Sonata.java index b221b753..f1233fc8 100644 --- a/src/main/java/fuelInjection/domain/Sonata.java +++ b/src/main/java/fuelInjection/domain/Sonata.java @@ -4,11 +4,16 @@ public class Sonata extends Car { private static final String NAME = "Sonata"; - public Sonata () { + private static final int DISTANCE_PER_LITER = 10; + public Sonata () { } public String getName() { return NAME; }; + + public double getDistancePerLiter() { + return DISTANCE_PER_LITER; + }; } From 33d93c5f0016335f7f9e58ebc5c96c1020713e35 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 17:24:44 +0900 Subject: [PATCH 010/115] =?UTF-8?q?docs:=20`10km/=EB=A6=AC=ED=84=B0`?= =?UTF-8?q?=EC=9D=98=20=EC=97=B0=EB=B9=84=20=EA=B0=80=EC=A0=B8=EC=95=BC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a903df13..38846272 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ - [ ] Sonata - [x] `Sonata` String Type 이름을 가져야한다. - - [ ] `10km/리터`의 연비 가져야한다. + - [x] `10km/리터`의 연비 가져야한다. - [ ] 거리 가져야한다. - [ ] 거리는 `0` 이상 정수이어야한다. - [ ] 주입해야할 연료량을 구할 수 있다. From 7071676337c0535b52cc239f207188b848bff83d Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 17:35:55 +0900 Subject: [PATCH 011/115] =?UTF-8?q?test:=20=EA=B1=B0=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 거리를 가져야한다. - 거리는 `0` 이상 정수이어야 한다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/fuelInjection/domain/SonataTest.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/test/java/fuelInjection/domain/SonataTest.java b/src/test/java/fuelInjection/domain/SonataTest.java index 50e935a2..0b1e9210 100644 --- a/src/test/java/fuelInjection/domain/SonataTest.java +++ b/src/test/java/fuelInjection/domain/SonataTest.java @@ -1,16 +1,21 @@ package fuelInjection.domain; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; class SonataTest { + int TEMP_DISTANCE = 10; + @DisplayName("`Sonata` String Type 이름을 가져야한다.") @Test public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { - Sonata sonata = new Sonata(); + Sonata sonata = new Sonata(TEMP_DISTANCE); assertThat(sonata.getName()) .isEqualTo("Sonata"); @@ -19,9 +24,29 @@ public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { @DisplayName("`10km/리터`의 연비 가져야한다.") @Test public void givenSonataClass_whenCreateInstance_thenDistancePerLiterIs10 () { - Sonata sonata = new Sonata(); + Sonata sonata = new Sonata(TEMP_DISTANCE); assertThat(sonata.getDistancePerLiter()) .isEqualTo(10); } + + @DisplayName("거리 가져야한다.") + @ParameterizedTest + @ValueSource(ints = {10 ,20 ,30}) + public void givenValidDistance_whenGetTripDistance_thenNotThrowException (int tripDistance) { + Sonata sonata = new Sonata(tripDistance); + + assertThat(sonata.getTripDistance()) + .isEqualTo(tripDistance); + } + + @DisplayName("거리 가져야한다.") + @ParameterizedTest + @ValueSource(ints = {0 ,-1 ,-2}) + public void givenInvalidDistance_whenGetTripDistance_thenThrowException (int tripDistance) { + Sonata sonata = new Sonata(tripDistance); + + assertThatThrownBy(() -> sonata.getTripDistance()) + .isInstanceOf(IllegalArgumentException.class); + } } \ No newline at end of file From 4d48981c85ef7d5445bd61bc0d31c2ca00f3868c Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 22:23:17 +0900 Subject: [PATCH 012/115] =?UTF-8?q?test:=20=EA=B1=B0=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 거리를 가져야한다. - 거리는 `0` 이상 정수이어야 한다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/fuelInjection/domain/SonataTest.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/test/java/fuelInjection/domain/SonataTest.java b/src/test/java/fuelInjection/domain/SonataTest.java index 0b1e9210..fb20abe7 100644 --- a/src/test/java/fuelInjection/domain/SonataTest.java +++ b/src/test/java/fuelInjection/domain/SonataTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -32,21 +33,19 @@ public void givenSonataClass_whenCreateInstance_thenDistancePerLiterIs10 () { @DisplayName("거리 가져야한다.") @ParameterizedTest - @ValueSource(ints = {10 ,20 ,30}) - public void givenValidDistance_whenGetTripDistance_thenNotThrowException (int tripDistance) { + @ValueSource(ints = {10, 30, 100}) + public void givenTripDistanceOverZeroTypeWithInt_whenGetTripDistance_thenNotThrowException (int tripDistance) { Sonata sonata = new Sonata(tripDistance); assertThat(sonata.getTripDistance()) .isEqualTo(tripDistance); } - @DisplayName("거리 가져야한다.") + @DisplayName("0이하 정수 값이 TripDistanceUnder으로 주어졌을때, IllegalArgumentException이 발생한다.") @ParameterizedTest - @ValueSource(ints = {0 ,-1 ,-2}) - public void givenInvalidDistance_whenGetTripDistance_thenThrowException (int tripDistance) { - Sonata sonata = new Sonata(tripDistance); - - assertThatThrownBy(() -> sonata.getTripDistance()) + @ValueSource(ints = {0, -1, -10, -100}) + public void givenTripDistanceBelowZeroTypeWithInt_whenGetTripDistance_thenThrowIllegalArgumentException (int tripDistance) { + assertThatThrownBy(() -> new Sonata(tripDistance)) .isInstanceOf(IllegalArgumentException.class); } } \ No newline at end of file From 49214d3bea2521c501713fd5d40f0a95e80bfed4 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 22:23:32 +0900 Subject: [PATCH 013/115] =?UTF-8?q?feat:=20=EA=B1=B0=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 거리를 가져야한다. - 거리는 `0` 이상 정수이어야 한다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/fuelInjection/domain/Car.java | 3 ++- .../java/fuelInjection/domain/Sonata.java | 27 ++++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/fuelInjection/domain/Car.java b/src/main/java/fuelInjection/domain/Car.java index 0e69f253..40d1a2eb 100644 --- a/src/main/java/fuelInjection/domain/Car.java +++ b/src/main/java/fuelInjection/domain/Car.java @@ -1,6 +1,7 @@ package fuelInjection.domain; public abstract class Car { + /** * 리터당 이동 거리. 즉, 연비 */ @@ -9,7 +10,7 @@ public abstract class Car { /** * 여행하려는 거리 */ -// abstract double getTripDistance(); + abstract double getTripDistance(); /** * 차종의 이름 diff --git a/src/main/java/fuelInjection/domain/Sonata.java b/src/main/java/fuelInjection/domain/Sonata.java index f1233fc8..60bfb4d8 100644 --- a/src/main/java/fuelInjection/domain/Sonata.java +++ b/src/main/java/fuelInjection/domain/Sonata.java @@ -3,17 +3,36 @@ public class Sonata extends Car { private static final String NAME = "Sonata"; - private static final int DISTANCE_PER_LITER = 10; + private static final int TRIP_DISTANCE_MIN = 1; + + private final int tripDistance; + + public Sonata(int tripDistance) { + this.tripDistance = tripDistance; - public Sonata () { + validTripDistance(); } public String getName() { return NAME; - }; + } public double getDistancePerLiter() { return DISTANCE_PER_LITER; - }; + } + + public double getTripDistance() { + return tripDistance; + } + + private void validTripDistance() { + if (isInvalidTripDistance()) { + throw new IllegalArgumentException("[ERROR] 거리 값을 1이상 정수값을 입력해주세요."); + } + } + + private boolean isInvalidTripDistance() { + return tripDistance < TRIP_DISTANCE_MIN; + } } From e5bcbc79aba8222c47a6f1ac9de50eb7d08c67c5 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 22:23:40 +0900 Subject: [PATCH 014/115] =?UTF-8?q?docs:=20=EA=B1=B0=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 거리를 가져야한다. - 거리는 `0` 이상 정수이어야 한다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 38846272..bb8a38db 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,9 @@ - [ ] Sonata - [x] `Sonata` String Type 이름을 가져야한다. - [x] `10km/리터`의 연비 가져야한다. - - [ ] 거리 가져야한다. - - [ ] 거리는 `0` 이상 정수이어야한다. + - [x] 거리 + - [x] 거리를 가져야한다. + - [x] 거리는 `0` 이상 정수이어야 한다. - [ ] 주입해야할 연료량을 구할 수 있다. - [ ] Avante - [ ] `Avante` String Type 이름을 가져야한다. From 9e5d638eb2e79a1a97d455114271d7d96ef00254 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 22:45:50 +0900 Subject: [PATCH 015/115] =?UTF-8?q?test:=20=EC=A3=BC=EC=9E=85=ED=95=B4?= =?UTF-8?q?=EC=95=BC=ED=95=A0=20=EC=97=B0=EB=A3=8C=EB=9F=89=EC=9D=84=20?= =?UTF-8?q?=EA=B5=AC=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/fuelInjection/domain/SonataTest.java | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/test/java/fuelInjection/domain/SonataTest.java b/src/test/java/fuelInjection/domain/SonataTest.java index fb20abe7..da6d3ed8 100644 --- a/src/test/java/fuelInjection/domain/SonataTest.java +++ b/src/test/java/fuelInjection/domain/SonataTest.java @@ -5,9 +5,12 @@ import static org.junit.jupiter.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import java.util.stream.Stream; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; class SonataTest { @@ -33,8 +36,8 @@ public void givenSonataClass_whenCreateInstance_thenDistancePerLiterIs10 () { @DisplayName("거리 가져야한다.") @ParameterizedTest - @ValueSource(ints = {10, 30, 100}) - public void givenTripDistanceOverZeroTypeWithInt_whenGetTripDistance_thenNotThrowException (int tripDistance) { + @ValueSource(doubles = {0, 10, 30, 100, 1.5}) + public void givenTripDistanceOverZeroTypeWithDouble_whenGetTripDistance_thenNotThrowException (double tripDistance) { Sonata sonata = new Sonata(tripDistance); assertThat(sonata.getTripDistance()) @@ -43,9 +46,27 @@ public void givenTripDistanceOverZeroTypeWithInt_whenGetTripDistance_thenNotThro @DisplayName("0이하 정수 값이 TripDistanceUnder으로 주어졌을때, IllegalArgumentException이 발생한다.") @ParameterizedTest - @ValueSource(ints = {0, -1, -10, -100}) - public void givenTripDistanceBelowZeroTypeWithInt_whenGetTripDistance_thenThrowIllegalArgumentException (int tripDistance) { + @ValueSource(doubles = {-1, -10, -100}) + public void givenTripDistanceBelowZeroTypeWithDouble_whenGetTripDistance_thenThrowIllegalArgumentException (double tripDistance) { assertThatThrownBy(() -> new Sonata(tripDistance)) .isInstanceOf(IllegalArgumentException.class); } + + static Stream generateTripDistanceAndChargeQuantity() { + return Stream.of( + Arguments.of(0, 0), + Arguments.of(10, 1), + Arguments.of(100, 10), + Arguments.of(1000, 100), + Arguments.of(15, 1.5) + ); + } + + @DisplayName("주입해야할 연료량을 구할 수 있다.") + @ParameterizedTest + @MethodSource("generateTripDistanceAndChargeQuantity") + public void givenTripDistanceOverZeroTypeWithDouble_whenGetChargeQuantity_then (double tripDistance, double chargeQuantity) { + assertThat(new Sonata(tripDistance).getChargeQuantity()) + .isEqualTo(chargeQuantity); + } } \ No newline at end of file From 7aab241da8cc66d5db402710f709e98bab62edb2 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 22:46:09 +0900 Subject: [PATCH 016/115] =?UTF-8?q?feat:=20=EC=A3=BC=EC=9E=85=ED=95=B4?= =?UTF-8?q?=EC=95=BC=ED=95=A0=20=EC=97=B0=EB=A3=8C=EB=9F=89=EC=9D=84=20?= =?UTF-8?q?=EA=B5=AC=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/fuelInjection/domain/Car.java | 6 +++--- src/main/java/fuelInjection/domain/Sonata.java | 14 +++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/fuelInjection/domain/Car.java b/src/main/java/fuelInjection/domain/Car.java index 40d1a2eb..8811e9b6 100644 --- a/src/main/java/fuelInjection/domain/Car.java +++ b/src/main/java/fuelInjection/domain/Car.java @@ -20,7 +20,7 @@ public abstract class Car { /** * 주입해야할 연료량을 구한다. */ -// double getChargeQuantity() { -// return getTripDistance() / getDistancePerLiter(); -// } + double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } } diff --git a/src/main/java/fuelInjection/domain/Sonata.java b/src/main/java/fuelInjection/domain/Sonata.java index 60bfb4d8..6b407200 100644 --- a/src/main/java/fuelInjection/domain/Sonata.java +++ b/src/main/java/fuelInjection/domain/Sonata.java @@ -3,12 +3,12 @@ public class Sonata extends Car { private static final String NAME = "Sonata"; - private static final int DISTANCE_PER_LITER = 10; - private static final int TRIP_DISTANCE_MIN = 1; + private static final double DISTANCE_PER_LITER = 10; + private static final double TRIP_DISTANCE_MIN = 0; - private final int tripDistance; + private final double tripDistance; - public Sonata(int tripDistance) { + public Sonata(double tripDistance) { this.tripDistance = tripDistance; validTripDistance(); @@ -26,9 +26,13 @@ public double getTripDistance() { return tripDistance; } + public double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } + private void validTripDistance() { if (isInvalidTripDistance()) { - throw new IllegalArgumentException("[ERROR] 거리 값을 1이상 정수값을 입력해주세요."); + throw new IllegalArgumentException("[ERROR] 거리 값을 0 이상 양수값을 입력해주세요."); } } From 6081d0992df892f4ae2f7b73cfac61c87d3ba837 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 22:46:19 +0900 Subject: [PATCH 017/115] =?UTF-8?q?docs:=20=EC=A3=BC=EC=9E=85=ED=95=B4?= =?UTF-8?q?=EC=95=BC=ED=95=A0=20=EC=97=B0=EB=A3=8C=EB=9F=89=EC=9D=84=20?= =?UTF-8?q?=EA=B5=AC=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bb8a38db..8c44b06c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - [x] 거리 - [x] 거리를 가져야한다. - [x] 거리는 `0` 이상 정수이어야 한다. - - [ ] 주입해야할 연료량을 구할 수 있다. + - [x] 주입해야할 연료량을 구할 수 있다. - [ ] Avante - [ ] `Avante` String Type 이름을 가져야한다. - [ ] `15km/리터`의 연비 가져야한다. From 4f596acda371a0cb123061f7c3f2cdf561e8a401 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 22:48:41 +0900 Subject: [PATCH 018/115] =?UTF-8?q?test:=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EB=A6=AC=ED=8E=99=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/fuelInjection/domain/SonataTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/test/java/fuelInjection/domain/SonataTest.java b/src/test/java/fuelInjection/domain/SonataTest.java index da6d3ed8..8792d39d 100644 --- a/src/test/java/fuelInjection/domain/SonataTest.java +++ b/src/test/java/fuelInjection/domain/SonataTest.java @@ -2,8 +2,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.*; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import java.util.stream.Stream; import org.junit.jupiter.api.DisplayName; @@ -65,7 +63,7 @@ static Stream generateTripDistanceAndChargeQuantity() { @DisplayName("주입해야할 연료량을 구할 수 있다.") @ParameterizedTest @MethodSource("generateTripDistanceAndChargeQuantity") - public void givenTripDistanceOverZeroTypeWithDouble_whenGetChargeQuantity_then (double tripDistance, double chargeQuantity) { + public void givenTripDistanceOverZeroTypeWithDouble_whenGetChargeQuantity_thenCanCalculateChargeQuantity (double tripDistance, double chargeQuantity) { assertThat(new Sonata(tripDistance).getChargeQuantity()) .isEqualTo(chargeQuantity); } From d557835e8bac738defa4938b1f2a049ef5992ccb Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 22:55:45 +0900 Subject: [PATCH 019/115] =?UTF-8?q?test:=20Avante=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Avante - `Avante` String Type 이름을 가져야한다. - `15km/리터`의 연비 가져야한다. - 거리 가져야한다. - 거리는 `0` 이상 정수이어야한다. - - 주입해야할 연료량을 구할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/fuelInjection/domain/AvanteTest.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/test/java/fuelInjection/domain/AvanteTest.java diff --git a/src/test/java/fuelInjection/domain/AvanteTest.java b/src/test/java/fuelInjection/domain/AvanteTest.java new file mode 100644 index 00000000..9b7c78d3 --- /dev/null +++ b/src/test/java/fuelInjection/domain/AvanteTest.java @@ -0,0 +1,70 @@ +package fuelInjection.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.stream.Stream; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; + +class AvanteTest { + int TEMP_DISTANCE = 10; + + @DisplayName("`Avante` String Type 이름을 가져야한다.") + @Test + public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { + Avante avante = new Avante(TEMP_DISTANCE); + + assertThat(avante.getName()) + .isEqualTo("Avante"); + } + + @DisplayName("`15km/리터`의 연비 가져야한다.") + @Test + public void givenSonataClass_whenCreateInstance_thenDistancePerLiterIs10 () { + Avante avante = new Avante(TEMP_DISTANCE); + + assertThat(avante.getDistancePerLiter()) + .isEqualTo(15); + } + + @DisplayName("거리 가져야한다.") + @ParameterizedTest + @ValueSource(doubles = {0, 10, 30, 100, 1.5}) + public void givenTripDistanceOverZeroTypeWithDouble_whenGetTripDistance_thenNotThrowException (double tripDistance) { + Avante avante = new Avante(tripDistance); + + assertThat(avante.getTripDistance()) + .isEqualTo(tripDistance); + } + + @DisplayName("0이하 정수 값이 TripDistanceUnder으로 주어졌을때, IllegalArgumentException이 발생한다.") + @ParameterizedTest + @ValueSource(doubles = {-1, -10, -100}) + public void givenTripDistanceBelowZeroTypeWithDouble_whenGetTripDistance_thenThrowIllegalArgumentException (double tripDistance) { + assertThatThrownBy(() -> new Avante(tripDistance)) + .isInstanceOf(IllegalArgumentException.class); + } + + static Stream generateTripDistanceAndChargeQuantity() { + return Stream.of( + Arguments.of(0, 0), + Arguments.of(15, 1), + Arguments.of(150, 10), + Arguments.of(1500, 100) + ); + } + + @DisplayName("주입해야할 연료량을 구할 수 있다.") + @ParameterizedTest + @MethodSource("generateTripDistanceAndChargeQuantity") + public void givenTripDistanceOverZeroTypeWithDouble_whenGetChargeQuantity_thenCanCalculateChargeQuantity (double tripDistance, double chargeQuantity) { + assertThat(new Avante(tripDistance).getChargeQuantity()) + .isEqualTo(chargeQuantity); + } +} \ No newline at end of file From 5ced6261b8f835935791485639fb05b45730ef6d Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 22:56:01 +0900 Subject: [PATCH 020/115] =?UTF-8?q?feat:=20Avante=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Avante - `Avante` String Type 이름을 가져야한다. - `15km/리터`의 연비 가져야한다. - 거리 가져야한다. - 거리는 `0` 이상 정수이어야한다. - - 주입해야할 연료량을 구할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/fuelInjection/domain/Avante.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/fuelInjection/domain/Avante.java diff --git a/src/main/java/fuelInjection/domain/Avante.java b/src/main/java/fuelInjection/domain/Avante.java new file mode 100644 index 00000000..495ea58e --- /dev/null +++ b/src/main/java/fuelInjection/domain/Avante.java @@ -0,0 +1,42 @@ +package fuelInjection.domain; + +public class Avante { + + private static final String NAME = "Avante"; + private static final double DISTANCE_PER_LITER = 15; + private static final double TRIP_DISTANCE_MIN = 0; + + private final double tripDistance; + + public Avante(double tripDistance) { + this.tripDistance = tripDistance; + + validTripDistance(); + } + + public String getName() { + return NAME; + } + + public double getDistancePerLiter() { + return DISTANCE_PER_LITER; + } + + public double getTripDistance() { + return tripDistance; + } + + public double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } + + private void validTripDistance() { + if (isInvalidTripDistance()) { + throw new IllegalArgumentException("[ERROR] 거리 값을 0 이상 양수값을 입력해주세요."); + } + } + + private boolean isInvalidTripDistance() { + return tripDistance < TRIP_DISTANCE_MIN; + } +} From c2d769b9a06bea32a803642b3a8ebc3669bc9f20 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 22:56:13 +0900 Subject: [PATCH 021/115] =?UTF-8?q?docs:=20Avante=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Avante - `Avante` String Type 이름을 가져야한다. - `15km/리터`의 연비 가져야한다. - 거리 가져야한다. - 거리는 `0` 이상 정수이어야한다. - - 주입해야할 연료량을 구할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 8c44b06c..c2775f79 100644 --- a/README.md +++ b/README.md @@ -2,19 +2,19 @@ ## TDD 기능 구현 사항 -- [ ] Sonata +- [x] Sonata - [x] `Sonata` String Type 이름을 가져야한다. - [x] `10km/리터`의 연비 가져야한다. - [x] 거리 - [x] 거리를 가져야한다. - [x] 거리는 `0` 이상 정수이어야 한다. - [x] 주입해야할 연료량을 구할 수 있다. -- [ ] Avante - - [ ] `Avante` String Type 이름을 가져야한다. - - [ ] `15km/리터`의 연비 가져야한다. - - [ ] 거리 가져야한다. - - [ ] 거리는 `0` 이상 정수이어야한다. - - - [ ] 주입해야할 연료량을 구할 수 있다. +- [x] Avante + - [x] `Avante` String Type 이름을 가져야한다. + - [x] `15km/리터`의 연비 가져야한다. + - [x] 거리 가져야한다. + - [x] 거리는 `0` 이상 정수이어야한다. - + - [x] 주입해야할 연료량을 구할 수 있다. - [ ] K5 - [ ] `K5` String Type 이름을 가져야한다. - [ ] `13km/리터`의 연비 가져야한다. From fdc4a5db2aec2f7fc2be62bfbdbdc2e50fef7833 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 23:01:39 +0900 Subject: [PATCH 022/115] =?UTF-8?q?test:=20K5=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - K5 - `K5` String Type 이름을 가져야한다. - `13km/리터`의 연비 가져야한다. - 거리 가져야한다. - 거리는 `0` 이상 정수이어야한다. - 주입해야할 연료량을 구할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/fuelInjection/domain/K5Test.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/test/java/fuelInjection/domain/K5Test.java diff --git a/src/test/java/fuelInjection/domain/K5Test.java b/src/test/java/fuelInjection/domain/K5Test.java new file mode 100644 index 00000000..2afd42fc --- /dev/null +++ b/src/test/java/fuelInjection/domain/K5Test.java @@ -0,0 +1,70 @@ +package fuelInjection.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.stream.Stream; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; + +class K5Test { + int TEMP_DISTANCE = 10; + + @DisplayName("`K5` String Type 이름을 가져야한다.") + @Test + public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { + K5 k5 = new K5(TEMP_DISTANCE); + + assertThat(k5.getName()) + .isEqualTo("K5"); + } + + @DisplayName("`13km/리터`의 연비 가져야한다.") + @Test + public void givenSonataClass_whenCreateInstance_thenDistancePerLiterIs10 () { + K5 k5 = new K5(TEMP_DISTANCE); + + assertThat(k5.getDistancePerLiter()) + .isEqualTo(13); + } + + @DisplayName("거리 가져야한다.") + @ParameterizedTest + @ValueSource(doubles = {0, 10, 30, 100, 1.5}) + public void givenTripDistanceOverZeroTypeWithDouble_whenGetTripDistance_thenNotThrowException (double tripDistance) { + K5 k5 = new K5(tripDistance); + + assertThat(k5.getTripDistance()) + .isEqualTo(tripDistance); + } + + @DisplayName("0이하 정수 값이 TripDistanceUnder으로 주어졌을때, IllegalArgumentException이 발생한다.") + @ParameterizedTest + @ValueSource(doubles = {-1, -10, -100}) + public void givenTripDistanceBelowZeroTypeWithDouble_whenGetTripDistance_thenThrowIllegalArgumentException (double tripDistance) { + assertThatThrownBy(() -> new K5(tripDistance)) + .isInstanceOf(IllegalArgumentException.class); + } + + static Stream generateTripDistanceAndChargeQuantity() { + return Stream.of( + Arguments.of(0, 0), + Arguments.of(13, 1), + Arguments.of(130, 10), + Arguments.of(1300, 100) + ); + } + + @DisplayName("주입해야할 연료량을 구할 수 있다.") + @ParameterizedTest + @MethodSource("generateTripDistanceAndChargeQuantity") + public void givenTripDistanceOverZeroTypeWithDouble_whenGetChargeQuantity_thenCanCalculateChargeQuantity (double tripDistance, double chargeQuantity) { + assertThat(new K5(tripDistance).getChargeQuantity()) + .isEqualTo(chargeQuantity); + } +} \ No newline at end of file From c0f7781440c4ca1c36d07e32811481fd76a6051a Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 23:01:53 +0900 Subject: [PATCH 023/115] =?UTF-8?q?feat:=20K5=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - K5 - `K5` String Type 이름을 가져야한다. - `13km/리터`의 연비 가져야한다. - 거리 가져야한다. - 거리는 `0` 이상 정수이어야한다. - 주입해야할 연료량을 구할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/fuelInjection/domain/K5.java | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/fuelInjection/domain/K5.java diff --git a/src/main/java/fuelInjection/domain/K5.java b/src/main/java/fuelInjection/domain/K5.java new file mode 100644 index 00000000..6b88ea91 --- /dev/null +++ b/src/main/java/fuelInjection/domain/K5.java @@ -0,0 +1,42 @@ +package fuelInjection.domain; + +public class K5 { + + private static final String NAME = "K5"; + private static final double DISTANCE_PER_LITER = 13; + private static final double TRIP_DISTANCE_MIN = 0; + + private final double tripDistance; + + public K5(double tripDistance) { + this.tripDistance = tripDistance; + + validTripDistance(); + } + + public String getName() { + return NAME; + } + + public double getDistancePerLiter() { + return DISTANCE_PER_LITER; + } + + public double getTripDistance() { + return tripDistance; + } + + public double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } + + private void validTripDistance() { + if (isInvalidTripDistance()) { + throw new IllegalArgumentException("[ERROR] 거리 값을 0 이상 양수값을 입력해주세요."); + } + } + + private boolean isInvalidTripDistance() { + return tripDistance < TRIP_DISTANCE_MIN; + } +} From 18191dafaedfa01863b7efbb4da1d216efdf877c Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 23:02:01 +0900 Subject: [PATCH 024/115] =?UTF-8?q?docs:=20K5=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - K5 - `K5` String Type 이름을 가져야한다. - `13km/리터`의 연비 가져야한다. - 거리 가져야한다. - 거리는 `0` 이상 정수이어야한다. - 주입해야할 연료량을 구할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c2775f79..6090a3c7 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,12 @@ - [x] 거리 가져야한다. - [x] 거리는 `0` 이상 정수이어야한다. - - [x] 주입해야할 연료량을 구할 수 있다. -- [ ] K5 - - [ ] `K5` String Type 이름을 가져야한다. - - [ ] `13km/리터`의 연비 가져야한다. - - [ ] 거리 가져야한다. - - [ ] 거리는 `0` 이상 정수이어야한다. - - [ ] 주입해야할 연료량을 구할 수 있다. +- [x] K5 + - [x] `K5` String Type 이름을 가져야한다. + - [x] `13km/리터`의 연비 가져야한다. + - [x] 거리 가져야한다. + - [x] 거리는 `0` 이상 정수이어야한다. + - [x] 주입해야할 연료량을 구할 수 있다. - [ ] RentCompany - [ ] `create()`, 팩토리 메서드를 구현한다. - [ ] `addCar()`, 차를 추가할 수 있다. From 0501b466db26d88c4d202b2c6a970953c9db654b Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 11 Feb 2022 23:05:08 +0900 Subject: [PATCH 025/115] docs: git pull pair Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 6090a3c7..f9274666 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,11 @@ # java-blackjack +### git pull pair + +```bash +git pull pair step1 +``` ### git multiple author From 7ad9a5fc216a84b5b33ba5f1b799d3f425a536cf Mon Sep 17 00:00:00 2001 From: chanu94 Date: Fri, 11 Feb 2022 23:07:37 +0900 Subject: [PATCH 026/115] =?UTF-8?q?docs=20:=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=82=AC=ED=95=AD=20checkbox=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f9274666..dbd31d4a 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ ## 기능 구현 사항 -- [ ] 보유 차량 +- 보유 차량 - Sonata - 대수: 2대 - 연비: 10km/리터 @@ -42,9 +42,9 @@ - K5 - 대수: 2대 - 연비: 13km/리터 -- [ ] 고객이 인터넷으로부터 예약할 때 여행할 목적지의 대략적인 이동거리를 입력 받을 수 있다. -- [ ] 이동거리를 활용해 차량 별로 필요한 연료를 주입할 수 있다. -- [ ] 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성할 수 있다. +- 고객이 인터넷으로부터 예약할 때 여행할 목적지의 대략적인 이동거리를 입력 받을 수 있다. +- 이동거리를 활용해 차량 별로 필요한 연료를 주입할 수 있다. +- 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성할 수 있다. ## 프로그래밍 요구 사항 @@ -68,4 +68,4 @@ git commit -m "commit message Co-authored-by: hochan222 Co-authored-by: chanuuuuu -``` \ No newline at end of file +``` From 4d22b97cb182cd32bc8fe2543505be095148e7ef Mon Sep 17 00:00:00 2001 From: chanu94 Date: Fri, 11 Feb 2022 23:10:22 +0900 Subject: [PATCH 027/115] =?UTF-8?q?test=20:=20Class=EB=AA=85=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=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 변경된 클래스 - Avante - K5 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/fuelInjection/domain/AvanteTest.java | 6 +++--- src/test/java/fuelInjection/domain/K5Test.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/java/fuelInjection/domain/AvanteTest.java b/src/test/java/fuelInjection/domain/AvanteTest.java index 9b7c78d3..3ac5975b 100644 --- a/src/test/java/fuelInjection/domain/AvanteTest.java +++ b/src/test/java/fuelInjection/domain/AvanteTest.java @@ -17,7 +17,7 @@ class AvanteTest { @DisplayName("`Avante` String Type 이름을 가져야한다.") @Test - public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { + public void givenAvanteClass_whenCreateInstance_thenInstanceNameIsAvante () { Avante avante = new Avante(TEMP_DISTANCE); assertThat(avante.getName()) @@ -26,7 +26,7 @@ public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { @DisplayName("`15km/리터`의 연비 가져야한다.") @Test - public void givenSonataClass_whenCreateInstance_thenDistancePerLiterIs10 () { + public void givenAvanteClass_whenCreateInstance_thenDistancePerLiterIs10 () { Avante avante = new Avante(TEMP_DISTANCE); assertThat(avante.getDistancePerLiter()) @@ -67,4 +67,4 @@ public void givenTripDistanceOverZeroTypeWithDouble_whenGetChargeQuantity_thenCa assertThat(new Avante(tripDistance).getChargeQuantity()) .isEqualTo(chargeQuantity); } -} \ No newline at end of file +} diff --git a/src/test/java/fuelInjection/domain/K5Test.java b/src/test/java/fuelInjection/domain/K5Test.java index 2afd42fc..12205c43 100644 --- a/src/test/java/fuelInjection/domain/K5Test.java +++ b/src/test/java/fuelInjection/domain/K5Test.java @@ -17,7 +17,7 @@ class K5Test { @DisplayName("`K5` String Type 이름을 가져야한다.") @Test - public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { + public void givenK5Class_whenCreateInstance_thenInstanceNameIsK5 () { K5 k5 = new K5(TEMP_DISTANCE); assertThat(k5.getName()) @@ -26,7 +26,7 @@ public void givenSonataClass_whenCreateInstance_thenInstanceNameIsSonata () { @DisplayName("`13km/리터`의 연비 가져야한다.") @Test - public void givenSonataClass_whenCreateInstance_thenDistancePerLiterIs10 () { + public void givenK5Class_whenCreateInstance_thenDistancePerLiterIs10 () { K5 k5 = new K5(TEMP_DISTANCE); assertThat(k5.getDistancePerLiter()) @@ -67,4 +67,4 @@ public void givenTripDistanceOverZeroTypeWithDouble_whenGetChargeQuantity_thenCa assertThat(new K5(tripDistance).getChargeQuantity()) .isEqualTo(chargeQuantity); } -} \ No newline at end of file +} From 94c57b91ed168eb670df3aa324314ca514d3fa01 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Fri, 11 Feb 2022 23:31:15 +0900 Subject: [PATCH 028/115] =?UTF-8?q?docs=20:=20RentCompany=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dbd31d4a..fe40a22c 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,13 @@ - [x] 거리는 `0` 이상 정수이어야한다. - [x] 주입해야할 연료량을 구할 수 있다. - [ ] RentCompany - - [ ] `create()`, 팩토리 메서드를 구현한다. + - [] `List`을 가져야한다. + - [] `List`에 대한 getter를 가져야한다. + - [x] `create()`, 팩토리 메서드를 구현한다. - [ ] `addCar()`, 차를 추가할 수 있다. + - [] `List`에 Sonata를 추가하고 이름을 조회하는 경우, 'Sonata'를 반환한다. + - [] `List`에 Avante를 추가하고 이름을 조회하는 경우, 'Avante'를 반환한다. + - [] `List`에 K5를 추가하고 이름을 조회하는 경우, 'K5'를 반환한다. - [ ] `generateReport()`는 전체 결과를 출력한다. - [ ] InputView - [ ] 이동거리와 차를 입력 받을 수 있다. From 3fbb73314afbbdb7282af7bcac037aafe5d32521 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Fri, 11 Feb 2022 23:32:21 +0900 Subject: [PATCH 029/115] =?UTF-8?q?feat=20:=20RentCompany=20factory=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/fuelInjection/RentCompany.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/fuelInjection/RentCompany.java b/src/main/java/fuelInjection/RentCompany.java index b26fd687..0e7e313d 100644 --- a/src/main/java/fuelInjection/RentCompany.java +++ b/src/main/java/fuelInjection/RentCompany.java @@ -2,4 +2,11 @@ public class RentCompany { + private RentCompany() { + } + + public static RentCompany create() { + return new RentCompany(); + } + } From ffc7c7ff820d6cc39ab0ef8a743576776e5b5a72 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Fri, 11 Feb 2022 23:33:05 +0900 Subject: [PATCH 030/115] =?UTF-8?q?test=20:=20RentCompanyTest=20-=20Car?= =?UTF-8?q?=EC=9D=98=20List=EB=A5=BC=20=EA=B0=80=EC=A0=B8=EC=95=BC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/fuelInjection/RentCompanyTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/fuelInjection/RentCompanyTest.java b/src/test/java/fuelInjection/RentCompanyTest.java index eb299115..4db2c0c4 100644 --- a/src/test/java/fuelInjection/RentCompanyTest.java +++ b/src/test/java/fuelInjection/RentCompanyTest.java @@ -3,6 +3,8 @@ import static org.junit.jupiter.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThat; +import fuelInjection.domain.Avante; +import fuelInjection.domain.K5; import fuelInjection.domain.Sonata; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -10,6 +12,14 @@ public class RentCompanyTest { private static final String NEWLINE = System.getProperty("line.separator"); + @Test + void Car의_List를_가져야한다() { + RentCompany company = RentCompany.create(); + + assertThat(company.getCars().size()) + .isEqualTo(0); + } + // @Test // public void report() throws Exception { // RentCompany company = RentCompany.create(); // factory method를 사용해 생성 From 118309e935da81153b973000d3ef9422c24c1e5a Mon Sep 17 00:00:00 2001 From: chanu94 Date: Fri, 11 Feb 2022 23:38:58 +0900 Subject: [PATCH 031/115] =?UTF-8?q?feat=20:=20RentCompany=20-=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=EB=B3=80=EC=88=98=20rentCars=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - rentCars라는 변수명 변경에 따른 테스트 코드 변경 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/fuelInjection/RentCompany.java | 10 ++++++++++ src/test/java/fuelInjection/RentCompanyTest.java | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/fuelInjection/RentCompany.java b/src/main/java/fuelInjection/RentCompany.java index 0e7e313d..d5fd04a4 100644 --- a/src/main/java/fuelInjection/RentCompany.java +++ b/src/main/java/fuelInjection/RentCompany.java @@ -1,12 +1,22 @@ package fuelInjection; +import fuelInjection.domain.Car; +import java.util.ArrayList; +import java.util.List; + public class RentCompany { + private final List rentCars; + private RentCompany() { + this.rentCars = new ArrayList<>(); } public static RentCompany create() { return new RentCompany(); } + public List getRentCars() { + return rentCars; + } } diff --git a/src/test/java/fuelInjection/RentCompanyTest.java b/src/test/java/fuelInjection/RentCompanyTest.java index 4db2c0c4..9c04dd53 100644 --- a/src/test/java/fuelInjection/RentCompanyTest.java +++ b/src/test/java/fuelInjection/RentCompanyTest.java @@ -16,7 +16,7 @@ public class RentCompanyTest { void Car의_List를_가져야한다() { RentCompany company = RentCompany.create(); - assertThat(company.getCars().size()) + assertThat(company.getRentCars().size()) .isEqualTo(0); } From 0083d3cedf166f1ac99e851ca3453e29c6fcc087 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Fri, 11 Feb 2022 23:41:27 +0900 Subject: [PATCH 032/115] =?UTF-8?q?docs=20:=20RentCompany=20-=20List?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `List`을 가져야한다. - `List`에 대한 getter를 가져야한다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fe40a22c..8cdff875 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,8 @@ - [x] 거리는 `0` 이상 정수이어야한다. - [x] 주입해야할 연료량을 구할 수 있다. - [ ] RentCompany - - [] `List`을 가져야한다. - - [] `List`에 대한 getter를 가져야한다. + - [x] `List`을 가져야한다. + - [x] `List`에 대한 getter를 가져야한다. - [x] `create()`, 팩토리 메서드를 구현한다. - [ ] `addCar()`, 차를 추가할 수 있다. - [] `List`에 Sonata를 추가하고 이름을 조회하는 경우, 'Sonata'를 반환한다. From 00c41a8941ef057819645102abaf80b5c4d27148 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Fri, 11 Feb 2022 23:43:09 +0900 Subject: [PATCH 033/115] =?UTF-8?q?refactor=20:=20EUC-KR=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B8=EC=BD=94=EB=94=A9=20=EB=B0=A9=EC=8B=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/fuelInjection/RentCompanyTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/java/fuelInjection/RentCompanyTest.java b/src/test/java/fuelInjection/RentCompanyTest.java index 9c04dd53..2f895e1a 100644 --- a/src/test/java/fuelInjection/RentCompanyTest.java +++ b/src/test/java/fuelInjection/RentCompanyTest.java @@ -13,7 +13,7 @@ public class RentCompanyTest { private static final String NEWLINE = System.getProperty("line.separator"); @Test - void Car의_List를_가져야한다() { + void Car_List_Ѵ() { RentCompany company = RentCompany.create(); assertThat(company.getRentCars().size()) @@ -22,7 +22,7 @@ public class RentCompanyTest { // @Test // public void report() throws Exception { -// RentCompany company = RentCompany.create(); // factory method를 사용해 생성 +// RentCompany company = RentCompany.create(); // factory method // company.addCar(new Sonata(150)); // company.addCar(new K5(260)); // company.addCar(new Sonata(120)); @@ -31,11 +31,11 @@ public class RentCompanyTest { // // String report = company.generateReport(); // assertThat(report).isEqualTo( -// "Sonata : 15리터" + NEWLINE + -// "K5 : 20리터" + NEWLINE + -// "Sonata : 12리터" + NEWLINE + -// "Avante : 20리터" + NEWLINE + -// "K5 : 30리터" + NEWLINE +// "Sonata : 15" + NEWLINE + +// "K5 : 20" + NEWLINE + +// "Sonata : 12" + NEWLINE + +// "Avante : 20" + NEWLINE + +// "K5 : 30" + NEWLINE // ); // } } From f6076e5d16517f72ea9e216903b6051b7c467230 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Sat, 12 Feb 2022 00:03:31 +0900 Subject: [PATCH 034/115] =?UTF-8?q?docs=20:=20RentCompany=20-=20addCar()?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EB=AA=85=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 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8cdff875..e6a1d741 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,9 @@ - [x] `List`에 대한 getter를 가져야한다. - [x] `create()`, 팩토리 메서드를 구현한다. - [ ] `addCar()`, 차를 추가할 수 있다. - - [] `List`에 Sonata를 추가하고 이름을 조회하는 경우, 'Sonata'를 반환한다. - - [] `List`에 Avante를 추가하고 이름을 조회하는 경우, 'Avante'를 반환한다. - - [] `List`에 K5를 추가하고 이름을 조회하는 경우, 'K5'를 반환한다. + - [] `List`에 Sonata를 추가할 수 있다. + - [] `List`에 Avante를 추가할 수 있다. + - [] `List`에 K5를 추가할 수 있다. - [ ] `generateReport()`는 전체 결과를 출력한다. - [ ] InputView - [ ] 이동거리와 차를 입력 받을 수 있다. From 226c68dc28236949d6e7650cc2063c2addfe8992 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Sat, 12 Feb 2022 00:10:29 +0900 Subject: [PATCH 035/115] =?UTF-8?q?test=20:=20`addCar()`,=20=EC=B0=A8?= =?UTF-8?q?=EB=A5=BC=20=EC=B6=94=EA=B0=80=ED=95=A0=20=EC=88=98=20=EC=9E=88?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `List`에 Sonata를 추가할 수 있다. - `List`에 Avante를 추가할 수 있다. - `List`에 K5를 추가할 수 있다. - UTF-8 인코딩 방식 원복 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/fuelInjection/RentCompanyTest.java | 56 +++++++++++++++---- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/src/test/java/fuelInjection/RentCompanyTest.java b/src/test/java/fuelInjection/RentCompanyTest.java index 2f895e1a..4d853ff4 100644 --- a/src/test/java/fuelInjection/RentCompanyTest.java +++ b/src/test/java/fuelInjection/RentCompanyTest.java @@ -1,28 +1,64 @@ package fuelInjection; -import static org.junit.jupiter.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThat; import fuelInjection.domain.Avante; +import fuelInjection.domain.Car; import fuelInjection.domain.K5; import fuelInjection.domain.Sonata; -import org.junit.jupiter.api.DisplayName; +import java.util.Arrays; +import java.util.List; import org.junit.jupiter.api.Test; public class RentCompanyTest { + private static final String NEWLINE = System.getProperty("line.separator"); + int TEMP_DISTANCE = 10; @Test - void Car_List_Ѵ() { + void Car의_List를_가져야한다() { RentCompany company = RentCompany.create(); assertThat(company.getRentCars().size()) .isEqualTo(0); } -// @Test + @Test + void Car의_List에_Sonata를_추가할_수_있다() { + RentCompany company = RentCompany.create(); + Sonata sonata = new Sonata(TEMP_DISTANCE); + List cars = Arrays.asList(sonata); + + company.addCar(sonata); + assertThat(company.getRentCars().equals(cars)) + .isTrue(); + } + + @Test + void Car의_List에_Avante를_추가할_수_있다() { + RentCompany company = RentCompany.create(); + Avante avante = new Avante(TEMP_DISTANCE); + List cars = Arrays.asList(avante); + + company.addCar(avante); + assertThat(company.getRentCars().equals(cars)) + .isTrue(); + } + + @Test + void Car의_List에_K5를_추가할_수_있다() { + RentCompany company = RentCompany.create(); + K5 k5 = new K5(TEMP_DISTANCE); + List cars = Arrays.asList(k5); + + company.addCar(k5); + assertThat(company.getRentCars().equals(cars)) + .isTrue(); + } + + // @Test // public void report() throws Exception { -// RentCompany company = RentCompany.create(); // factory method +// RentCompany company = RentCompany.create(); // factory method를 사용해 생성 // company.addCar(new Sonata(150)); // company.addCar(new K5(260)); // company.addCar(new Sonata(120)); @@ -31,11 +67,11 @@ public class RentCompanyTest { // // String report = company.generateReport(); // assertThat(report).isEqualTo( -// "Sonata : 15" + NEWLINE + -// "K5 : 20" + NEWLINE + -// "Sonata : 12" + NEWLINE + -// "Avante : 20" + NEWLINE + -// "K5 : 30" + NEWLINE +// "Sonata : 15리터" + NEWLINE + +// "K5 : 20리터" + NEWLINE + +// "Sonata : 12리터" + NEWLINE + +// "Avante : 20리터" + NEWLINE + +// "K5 : 30리터" + NEWLINE // ); // } } From df2f6229974aed13b36a6030ce2d361897d3b680 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Sat, 12 Feb 2022 00:11:30 +0900 Subject: [PATCH 036/115] =?UTF-8?q?refactor=20:=20Car=EC=9D=98=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20equals,=20ha?= =?UTF-8?q?shcode=20=EC=98=A4=EB=B2=84=EB=9D=BC=EC=9D=B4=EB=94=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/fuelInjection/domain/Avante.java | 21 ++++++++++++++++++- src/main/java/fuelInjection/domain/K5.java | 21 ++++++++++++++++++- .../java/fuelInjection/domain/Sonata.java | 19 +++++++++++++++++ 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/src/main/java/fuelInjection/domain/Avante.java b/src/main/java/fuelInjection/domain/Avante.java index 495ea58e..11a5205e 100644 --- a/src/main/java/fuelInjection/domain/Avante.java +++ b/src/main/java/fuelInjection/domain/Avante.java @@ -1,6 +1,8 @@ package fuelInjection.domain; -public class Avante { +import java.util.Objects; + +public class Avante extends Car { private static final String NAME = "Avante"; private static final double DISTANCE_PER_LITER = 15; @@ -39,4 +41,21 @@ private void validTripDistance() { private boolean isInvalidTripDistance() { return tripDistance < TRIP_DISTANCE_MIN; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Avante)) { + return false; + } + Avante avante = (Avante) o; + return Double.compare(avante.tripDistance, tripDistance) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(tripDistance); + } } diff --git a/src/main/java/fuelInjection/domain/K5.java b/src/main/java/fuelInjection/domain/K5.java index 6b88ea91..6a22209c 100644 --- a/src/main/java/fuelInjection/domain/K5.java +++ b/src/main/java/fuelInjection/domain/K5.java @@ -1,6 +1,8 @@ package fuelInjection.domain; -public class K5 { +import java.util.Objects; + +public class K5 extends Car { private static final String NAME = "K5"; private static final double DISTANCE_PER_LITER = 13; @@ -39,4 +41,21 @@ private void validTripDistance() { private boolean isInvalidTripDistance() { return tripDistance < TRIP_DISTANCE_MIN; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof K5)) { + return false; + } + K5 k5 = (K5) o; + return Double.compare(k5.tripDistance, tripDistance) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(tripDistance); + } } diff --git a/src/main/java/fuelInjection/domain/Sonata.java b/src/main/java/fuelInjection/domain/Sonata.java index 6b407200..fc6981dc 100644 --- a/src/main/java/fuelInjection/domain/Sonata.java +++ b/src/main/java/fuelInjection/domain/Sonata.java @@ -1,5 +1,7 @@ package fuelInjection.domain; +import java.util.Objects; + public class Sonata extends Car { private static final String NAME = "Sonata"; @@ -39,4 +41,21 @@ private void validTripDistance() { private boolean isInvalidTripDistance() { return tripDistance < TRIP_DISTANCE_MIN; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Sonata)) { + return false; + } + Sonata sonata = (Sonata) o; + return Double.compare(sonata.tripDistance, tripDistance) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(tripDistance); + } } From c983e1d495e196e6b5b1cdae764c3bd3c0b7cb3e Mon Sep 17 00:00:00 2001 From: chanu94 Date: Sat, 12 Feb 2022 00:11:51 +0900 Subject: [PATCH 037/115] =?UTF-8?q?feat=20:=20RentCompany=20addCar()=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/fuelInjection/RentCompany.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/fuelInjection/RentCompany.java b/src/main/java/fuelInjection/RentCompany.java index d5fd04a4..e3d7c1b1 100644 --- a/src/main/java/fuelInjection/RentCompany.java +++ b/src/main/java/fuelInjection/RentCompany.java @@ -19,4 +19,8 @@ public static RentCompany create() { public List getRentCars() { return rentCars; } + + public void addCar(Car car) { + rentCars.add(car); + } } From b12d6696cd8bf1bd223d270056ff591726aa0d04 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Sat, 12 Feb 2022 00:12:11 +0900 Subject: [PATCH 038/115] =?UTF-8?q?docs=20:=20RentCompany=20addCar()=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e6a1d741..4792a7a9 100644 --- a/README.md +++ b/README.md @@ -25,10 +25,10 @@ - [x] `List`을 가져야한다. - [x] `List`에 대한 getter를 가져야한다. - [x] `create()`, 팩토리 메서드를 구현한다. - - [ ] `addCar()`, 차를 추가할 수 있다. - - [] `List`에 Sonata를 추가할 수 있다. - - [] `List`에 Avante를 추가할 수 있다. - - [] `List`에 K5를 추가할 수 있다. + - [x] `addCar()`, 차를 추가할 수 있다. + - [x] `List`에 Sonata를 추가할 수 있다. + - [x] `List`에 Avante를 추가할 수 있다. + - [x] `List`에 K5를 추가할 수 있다. - [ ] `generateReport()`는 전체 결과를 출력한다. - [ ] InputView - [ ] 이동거리와 차를 입력 받을 수 있다. From b01db13e5710f011fd2d5df506247ea54445f603 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Mon, 14 Feb 2022 16:56:05 +0900 Subject: [PATCH 039/115] =?UTF-8?q?feat=20:=20RentCompany=20generateReport?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `generateReport()`는 전체 결과를 출력한다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 10 ++---- src/main/java/fuelInjection/RentCompany.java | 13 +++++++ src/main/java/fuelInjection/domain/Car.java | 5 +-- .../java/fuelInjection/RentCompanyTest.java | 36 +++++++++---------- 4 files changed, 37 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 4792a7a9..6789181d 100644 --- a/README.md +++ b/README.md @@ -29,11 +29,7 @@ - [x] `List`에 Sonata를 추가할 수 있다. - [x] `List`에 Avante를 추가할 수 있다. - [x] `List`에 K5를 추가할 수 있다. - - [ ] `generateReport()`는 전체 결과를 출력한다. -- [ ] InputView - - [ ] 이동거리와 차를 입력 받을 수 있다. -- [ ] OutputView - - [ ] `printRequiredFuel()` 하나의 차에 대해 연비를 출력할 수 있다. + - [x] `generateReport()`는 전체 결과를 출력한다. ## 기능 구현 사항 @@ -53,8 +49,8 @@ ## 프로그래밍 요구 사항 -- [ ] 상속과 추상 메서드를 활용한다. -- [ ] 위 요구사항을 if/else 절을 쓰지 않고 구현해야 한다. +- [x] 상속과 추상 메서드를 활용한다. +- [x] 위 요구사항을 if/else 절을 쓰지 않고 구현해야 한다. - [ ] 인터페이스를 적용해 구현한다. # java-blackjack diff --git a/src/main/java/fuelInjection/RentCompany.java b/src/main/java/fuelInjection/RentCompany.java index e3d7c1b1..d2841e76 100644 --- a/src/main/java/fuelInjection/RentCompany.java +++ b/src/main/java/fuelInjection/RentCompany.java @@ -6,6 +6,8 @@ public class RentCompany { + private static final String NEWLINE = System.getProperty("line.separator"); + private static final String REPORT_FORM = "%s : %.0f리터"; private final List rentCars; private RentCompany() { @@ -23,4 +25,15 @@ public List getRentCars() { public void addCar(Car car) { rentCars.add(car); } + + public String generateReport() { + StringBuilder report = new StringBuilder(); + + rentCars.forEach( + car -> report.append(String.format(REPORT_FORM, car.getName(), car.getChargeQuantity())) + .append(NEWLINE) + ); + + return report.toString(); + } } diff --git a/src/main/java/fuelInjection/domain/Car.java b/src/main/java/fuelInjection/domain/Car.java index 8811e9b6..631d235c 100644 --- a/src/main/java/fuelInjection/domain/Car.java +++ b/src/main/java/fuelInjection/domain/Car.java @@ -15,12 +15,13 @@ public abstract class Car { /** * 차종의 이름 */ - abstract String getName(); + public abstract String getName(); /** * 주입해야할 연료량을 구한다. */ - double getChargeQuantity() { + public double getChargeQuantity() { return getTripDistance() / getDistancePerLiter(); } + } diff --git a/src/test/java/fuelInjection/RentCompanyTest.java b/src/test/java/fuelInjection/RentCompanyTest.java index 4d853ff4..a288cebc 100644 --- a/src/test/java/fuelInjection/RentCompanyTest.java +++ b/src/test/java/fuelInjection/RentCompanyTest.java @@ -56,22 +56,22 @@ public class RentCompanyTest { .isTrue(); } - // @Test -// public void report() throws Exception { -// RentCompany company = RentCompany.create(); // factory method를 사용해 생성 -// company.addCar(new Sonata(150)); -// company.addCar(new K5(260)); -// company.addCar(new Sonata(120)); -// company.addCar(new Avante(300)); -// company.addCar(new K5(390)); -// -// String report = company.generateReport(); -// assertThat(report).isEqualTo( -// "Sonata : 15리터" + NEWLINE + -// "K5 : 20리터" + NEWLINE + -// "Sonata : 12리터" + NEWLINE + -// "Avante : 20리터" + NEWLINE + -// "K5 : 30리터" + NEWLINE -// ); -// } + @Test + public void report() throws Exception { + RentCompany company = RentCompany.create(); // factory method를 사용해 생성 + company.addCar(new Sonata(150)); + company.addCar(new K5(260)); + company.addCar(new Sonata(120)); + company.addCar(new Avante(300)); + company.addCar(new K5(390)); + + String report = company.generateReport(); + assertThat(report).isEqualTo( + "Sonata : 15리터" + NEWLINE + + "K5 : 20리터" + NEWLINE + + "Sonata : 12리터" + NEWLINE + + "Avante : 20리터" + NEWLINE + + "K5 : 30리터" + NEWLINE + ); + } } From 18abdbf22d1226191b2308f68ed00dd5bd5638af Mon Sep 17 00:00:00 2001 From: chanu94 Date: Mon, 14 Feb 2022 16:57:58 +0900 Subject: [PATCH 040/115] =?UTF-8?q?feat=20:=20Car=20getChargeQuantity=20?= =?UTF-8?q?=EC=B6=94=EC=83=81=ED=99=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EA=B5=AC=EC=B2=B4=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `getChargeQuantity()`는 주입해야할 연료량을 구할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/fuelInjection/domain/Avante.java | 4 ---- src/main/java/fuelInjection/domain/K5.java | 4 ---- src/main/java/fuelInjection/domain/Sonata.java | 4 ---- 3 files changed, 12 deletions(-) diff --git a/src/main/java/fuelInjection/domain/Avante.java b/src/main/java/fuelInjection/domain/Avante.java index 11a5205e..bba54282 100644 --- a/src/main/java/fuelInjection/domain/Avante.java +++ b/src/main/java/fuelInjection/domain/Avante.java @@ -28,10 +28,6 @@ public double getTripDistance() { return tripDistance; } - public double getChargeQuantity() { - return getTripDistance() / getDistancePerLiter(); - } - private void validTripDistance() { if (isInvalidTripDistance()) { throw new IllegalArgumentException("[ERROR] 거리 값을 0 이상 양수값을 입력해주세요."); diff --git a/src/main/java/fuelInjection/domain/K5.java b/src/main/java/fuelInjection/domain/K5.java index 6a22209c..daa1760c 100644 --- a/src/main/java/fuelInjection/domain/K5.java +++ b/src/main/java/fuelInjection/domain/K5.java @@ -28,10 +28,6 @@ public double getTripDistance() { return tripDistance; } - public double getChargeQuantity() { - return getTripDistance() / getDistancePerLiter(); - } - private void validTripDistance() { if (isInvalidTripDistance()) { throw new IllegalArgumentException("[ERROR] 거리 값을 0 이상 양수값을 입력해주세요."); diff --git a/src/main/java/fuelInjection/domain/Sonata.java b/src/main/java/fuelInjection/domain/Sonata.java index fc6981dc..ea9fa9cb 100644 --- a/src/main/java/fuelInjection/domain/Sonata.java +++ b/src/main/java/fuelInjection/domain/Sonata.java @@ -28,10 +28,6 @@ public double getTripDistance() { return tripDistance; } - public double getChargeQuantity() { - return getTripDistance() / getDistancePerLiter(); - } - private void validTripDistance() { if (isInvalidTripDistance()) { throw new IllegalArgumentException("[ERROR] 거리 값을 0 이상 양수값을 입력해주세요."); From 3521cdf62e89406ef4b06539830a3fab9e8482ad Mon Sep 17 00:00:00 2001 From: chanu94 Date: Mon, 14 Feb 2022 17:01:09 +0900 Subject: [PATCH 041/115] =?UTF-8?q?docs=20:=20=EB=88=84=EB=9D=BD=EB=90=9C?= =?UTF-8?q?=20RentCompany=20checkbox=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6789181d..d7c51b70 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ - [x] 거리 가져야한다. - [x] 거리는 `0` 이상 정수이어야한다. - [x] 주입해야할 연료량을 구할 수 있다. -- [ ] RentCompany +- [x] RentCompany - [x] `List`을 가져야한다. - [x] `List`에 대한 getter를 가져야한다. - [x] `create()`, 팩토리 메서드를 구현한다. From 15f080ce0dcffacb134e0a42be68a97f87129375 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Mon, 14 Feb 2022 18:30:31 +0900 Subject: [PATCH 042/115] =?UTF-8?q?docs=20:=20blackjack=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=9A=94=EA=B5=AC=20=EC=82=AC=ED=95=AD=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/README.md b/README.md index d7c51b70..62bce4b4 100644 --- a/README.md +++ b/README.md @@ -53,8 +53,60 @@ - [x] 위 요구사항을 if/else 절을 쓰지 않고 구현해야 한다. - [ ] 인터페이스를 적용해 구현한다. +--- + # java-blackjack +## TDD 기능 구현 사항 + +- [] User + - [] Deck을 가지고 있다. + - [] UserName을 가지고 있다. + - [] Deck에 카드를 추가할 수 있다. + - [] Deck의 현재 score가 21을 넘는지에 대한 boolean 계산을 할 수 있다. +- [] Dealer + - [] 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. +- [] Player +- [] Deck - 딜러 또는 플레이어가 가진 Card의 집합 + - [] List를 가지고 있다. + - [] 현재 List의 총 score를 계산할 수 있다. + - [] 현재 가진 Card 중에서 Ace가 있는 경우, 해당 Card에 대한 Score를 1 또는 11로 계산할 수 있다. + - [] 21을 초과하지 않으면서, 21에 가깝게 계산할 수 있다. +- [] Card - Game에서 사용할 카드의 객체 + - [] CardType type을 가지고 있다. (e.g 다이아몬드, 클로버, 스페이드, 하트 ...) + - [] CardNumber number을 가지고 있다. (e.g 1, 2, 3, A, K, Q ...) +- [] CardType - Card의 타입 +- [] CardNumber - Card의 숫자 + - [] 해당 카드의 점수인 score를 가지고 있다. +- [] GameCard - 게임에서 사용될 모든 Card의 집합 + - [] 모든 Card는 중복이 없어야한다. +- [] GameUser - BlackJack을 수행한는 User의 집합 + - [] List를 가지고 있다. + - [] User를 추가할 수 있다. + - [] List를 반환할 수 있다. +- [] BlackJack - 게임 로직 수행 + - [] GameUser를 가지고 있다. + - [] GameCard를 가지고 있다. + - [] 게임 진행시 최초로 GameCard를 셔플할 수 있다. + - [] User별로 턴을 진행할 수 있게 한다. + - [] GameCard에서 Card를 하나 뽑을 수 있다. + - [] User에 카드를 전달할 수 있다. + - [] 21을 넘지 않는 경우, User에게 카드를 지속적으로 전달할 수 있다. +- [] UserStats - User별 승/패에 대한 정보 + - [] GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. +- [] GameController - 전체적인 게임을 진행할 Controller + - [] 이름의 배열을 BlackJack에 전달한다. +- [] UserName - 게임 참여자의 이름 +- [] InputParser - String -> List의 이름의 배열로 반환한다. + - [] 이름의 중복을 확인한다. + - [] 이름의 공백을 확인한다. +- [] InputView + - [] 게임에 참여할 이름을 입력받는다. +- [] OutputView + +## 기능 구현 사항 + + ### git pull pair ```bash From 4a3c4db27ee832075ae64217c12c2b7a7a43da49 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 17:18:28 +0900 Subject: [PATCH 043/115] =?UTF-8?q?feat:=20=EC=9D=B8=ED=84=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=EB=A5=BC=20=EC=A0=81=EC=9A=A9=ED=95=B4=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/fuelInjection/domain/Car.java | 2 +- src/main/java/fuelInjection/domain/Vehicle.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 src/main/java/fuelInjection/domain/Vehicle.java diff --git a/src/main/java/fuelInjection/domain/Car.java b/src/main/java/fuelInjection/domain/Car.java index 631d235c..537f0815 100644 --- a/src/main/java/fuelInjection/domain/Car.java +++ b/src/main/java/fuelInjection/domain/Car.java @@ -1,6 +1,6 @@ package fuelInjection.domain; -public abstract class Car { +public abstract class Car implements Vehicle { /** * 리터당 이동 거리. 즉, 연비 diff --git a/src/main/java/fuelInjection/domain/Vehicle.java b/src/main/java/fuelInjection/domain/Vehicle.java new file mode 100644 index 00000000..d09ba1b7 --- /dev/null +++ b/src/main/java/fuelInjection/domain/Vehicle.java @@ -0,0 +1,5 @@ +package fuelInjection.domain; + +public interface Vehicle { + +} From ea6bcd95eaa8d77469107b25b8ff5a2ce0ce1f96 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 17:18:39 +0900 Subject: [PATCH 044/115] =?UTF-8?q?docs:=20=EC=9D=B8=ED=84=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=EB=A5=BC=20=EC=A0=81=EC=9A=A9=ED=95=B4=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 62bce4b4..5313609f 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ - [x] 상속과 추상 메서드를 활용한다. - [x] 위 요구사항을 if/else 절을 쓰지 않고 구현해야 한다. -- [ ] 인터페이스를 적용해 구현한다. +- [x] 인터페이스를 적용해 구현한다. --- From caa3e0e9394521e2a61fa6d71717430c627be8c7 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 17:32:33 +0900 Subject: [PATCH 045/115] =?UTF-8?q?chore:=20=EC=95=88=EC=93=B0=EB=8A=94=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 4 +++- src/main/java/{fuelInjection => blackJack}/Application.java | 2 +- src/main/java/empty.txt | 0 src/test/java/empty.txt | 0 4 files changed, 4 insertions(+), 2 deletions(-) rename src/main/java/{fuelInjection => blackJack}/Application.java (78%) delete mode 100644 src/main/java/empty.txt delete mode 100644 src/test/java/empty.txt diff --git a/README.md b/README.md index 5313609f..6f28ec40 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,9 @@ - [] 게임에 참여할 이름을 입력받는다. - [] OutputView -## 기능 구현 사항 +## 최초 PR 마감 기한 + +2월 17일 목요일까지 ### git pull pair diff --git a/src/main/java/fuelInjection/Application.java b/src/main/java/blackJack/Application.java similarity index 78% rename from src/main/java/fuelInjection/Application.java rename to src/main/java/blackJack/Application.java index b6fb0e05..60bfb57f 100644 --- a/src/main/java/fuelInjection/Application.java +++ b/src/main/java/blackJack/Application.java @@ -1,4 +1,4 @@ -package fuelInjection; +package blackJack; public class Application { diff --git a/src/main/java/empty.txt b/src/main/java/empty.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/src/test/java/empty.txt b/src/test/java/empty.txt deleted file mode 100644 index e69de29b..00000000 From ed9287681edb584b0e07a4be8063d275bd17e77b Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 17:59:54 +0900 Subject: [PATCH 046/115] =?UTF-8?q?test:=20=EC=A3=BC=EC=96=B4=EC=A7=84=20?= =?UTF-8?q?=EC=A0=95=EC=88=98=EB=A1=9C=20CardNumber=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=ED=9B=84=20getCardNumber()=20=ED=98=B8=EC=B6=9C=EC=8B=9C,?= =?UTF-8?q?=20=EC=A3=BC=EC=96=B4=EC=A7=84=20=EC=A0=95=EC=88=98=EC=99=80=20?= =?UTF-8?q?=EB=8F=99=EC=9D=BC=ED=95=98=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/blackJack/domain/CardNumberTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/test/java/blackJack/domain/CardNumberTest.java diff --git a/src/test/java/blackJack/domain/CardNumberTest.java b/src/test/java/blackJack/domain/CardNumberTest.java new file mode 100644 index 00000000..92ea4e3a --- /dev/null +++ b/src/test/java/blackJack/domain/CardNumberTest.java @@ -0,0 +1,20 @@ +package blackJack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class CardNumberTest { + + @DisplayName("주어진 정수로 CardNumber 생성 후 getCardNumber() 호출시, 주어진 정수와 동일하다.") + @ParameterizedTest + @ValueSource(strings = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}) + void givenNumberWithInt_WhenGetCardNumber_ThenEqualToGivenNumber(String number) { + CardNumber cardNumber = CardNumber.from(number); + + assertThat(cardNumber.getCardNumber()) + .isEqualTo(number); + } +} \ No newline at end of file From 99a0d730c8505b5762577eb4ce6d7182fbb0b29c Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 18:00:19 +0900 Subject: [PATCH 047/115] =?UTF-8?q?feat:=20=EC=A3=BC=EC=96=B4=EC=A7=84=20?= =?UTF-8?q?=EC=A0=95=EC=88=98=EB=A1=9C=20CardNumber=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=ED=9B=84=20getCardNumber()=20=ED=98=B8=EC=B6=9C=EC=8B=9C,?= =?UTF-8?q?=20=EC=A3=BC=EC=96=B4=EC=A7=84=20=EC=A0=95=EC=88=98=EC=99=80=20?= =?UTF-8?q?=EB=8F=99=EC=9D=BC=ED=95=98=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/CardNumber.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/blackJack/domain/CardNumber.java diff --git a/src/main/java/blackJack/domain/CardNumber.java b/src/main/java/blackJack/domain/CardNumber.java new file mode 100644 index 00000000..717492c6 --- /dev/null +++ b/src/main/java/blackJack/domain/CardNumber.java @@ -0,0 +1,18 @@ +package blackJack.domain; + +public class CardNumber { + + private String cardNumber; + + private CardNumber(String cardNumber) { + this.cardNumber = cardNumber; + } + + public static CardNumber from(String cardNumber) { + return new CardNumber(cardNumber); + } + + public String getCardNumber() { + return cardNumber; + } +} From 14d58ef86ae11278ea9ee0c746d9d7b11dcd03cb Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 18:14:04 +0900 Subject: [PATCH 048/115] =?UTF-8?q?test:=20=EC=9C=A0=ED=9A=A8=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20CarNumber=20=EB=B2=94=EC=9C=84?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=EC=8A=A4=ED=84=B4=EC=8A=A4=EA=B0=80=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EB=90=A0=EB=95=8C,=20RuntimeException=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/blackJack/domain/CardNumberTest.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/test/java/blackJack/domain/CardNumberTest.java b/src/test/java/blackJack/domain/CardNumberTest.java index 92ea4e3a..212e53c0 100644 --- a/src/test/java/blackJack/domain/CardNumberTest.java +++ b/src/test/java/blackJack/domain/CardNumberTest.java @@ -1,6 +1,7 @@ package blackJack.domain; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; @@ -11,10 +12,20 @@ class CardNumberTest { @DisplayName("주어진 정수로 CardNumber 생성 후 getCardNumber() 호출시, 주어진 정수와 동일하다.") @ParameterizedTest @ValueSource(strings = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}) - void givenNumberWithInt_WhenGetCardNumber_ThenEqualToGivenNumber(String number) { + void givenNumberWithString_WhenGetCardNumber_ThenEqualToGivenNumber(String number) { CardNumber cardNumber = CardNumber.from(number); assertThat(cardNumber.getCardNumber()) .isEqualTo(number); } + + @DisplayName("유효하지 않는 CarNumber 범위로 인스턴스가 생성될때, RuntimeException 발생한다.") + @ParameterizedTest + @ValueSource(strings = {"1", "11", "12", "13", "B"}) + void givenInValidCardNumberRange_WhenCreateInstance_ThenThrowRuntimeException( + String number) { + assertThatThrownBy(() -> CardNumber.from(number)) + .isInstanceOf(RuntimeException.class); + + } } \ No newline at end of file From 66493b8ba3ddc90fc70949489a54b7e9adfa63c0 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 18:14:20 +0900 Subject: [PATCH 049/115] =?UTF-8?q?feat:=20=EC=9C=A0=ED=9A=A8=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20CarNumber=20=EB=B2=94=EC=9C=84?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=EC=8A=A4=ED=84=B4=EC=8A=A4=EA=B0=80=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EB=90=A0=EB=95=8C,=20RuntimeException=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/CardNumber.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/blackJack/domain/CardNumber.java b/src/main/java/blackJack/domain/CardNumber.java index 717492c6..617a1223 100644 --- a/src/main/java/blackJack/domain/CardNumber.java +++ b/src/main/java/blackJack/domain/CardNumber.java @@ -1,11 +1,18 @@ package blackJack.domain; +import java.util.Arrays; +import java.util.List; + public class CardNumber { + private static final List CARD_NUMBER_LIST = Arrays.asList("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"); + private String cardNumber; private CardNumber(String cardNumber) { this.cardNumber = cardNumber; + + validateCardNumberRange(); } public static CardNumber from(String cardNumber) { @@ -15,4 +22,10 @@ public static CardNumber from(String cardNumber) { public String getCardNumber() { return cardNumber; } + + private void validateCardNumberRange () { + if (!CARD_NUMBER_LIST.contains(cardNumber)) { + throw new RuntimeException("[ERROR] CardNumber 범위인 String을 입력해주세요."); + } + } } From f7b945efa0dc3a04fbb7d1815996c9f0d47fc784 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 18:19:25 +0900 Subject: [PATCH 050/115] test: int to string Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/blackJack/domain/CardNumberTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/blackJack/domain/CardNumberTest.java b/src/test/java/blackJack/domain/CardNumberTest.java index 212e53c0..a10108cf 100644 --- a/src/test/java/blackJack/domain/CardNumberTest.java +++ b/src/test/java/blackJack/domain/CardNumberTest.java @@ -9,7 +9,7 @@ class CardNumberTest { - @DisplayName("주어진 정수로 CardNumber 생성 후 getCardNumber() 호출시, 주어진 정수와 동일하다.") + @DisplayName("주어진 String으로 CardNumber 생성 후 getCardNumber() 호출시, 주어진 정수와 동일하다.") @ParameterizedTest @ValueSource(strings = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}) void givenNumberWithString_WhenGetCardNumber_ThenEqualToGivenNumber(String number) { From 0015e6517cb8cab1c894843dc824a19ad82ab6b8 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 18:23:43 +0900 Subject: [PATCH 051/115] =?UTF-8?q?test:=20=EC=A3=BC=EC=96=B4=EC=A7=84=20S?= =?UTF-8?q?tring=20type=20=EC=9C=BC=EB=A1=9C=20CardType=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=ED=9B=84=20getCardType()=20=ED=98=B8=EC=B6=9C?= =?UTF-8?q?=EC=8B=9C,=20=EC=A3=BC=EC=96=B4=EC=A7=84=20type=EA=B3=BC=20?= =?UTF-8?q?=EB=8F=99=EC=9D=BC=ED=95=98=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/blackJack/domain/CardTypeTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/test/java/blackJack/domain/CardTypeTest.java diff --git a/src/test/java/blackJack/domain/CardTypeTest.java b/src/test/java/blackJack/domain/CardTypeTest.java new file mode 100644 index 00000000..158d28b2 --- /dev/null +++ b/src/test/java/blackJack/domain/CardTypeTest.java @@ -0,0 +1,20 @@ +package blackJack.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class CardTypeTest { + @DisplayName("주어진 String type 으로 CardType 생성 후 getCardType() 호출시, 주어진 type과 동일하다.") + @ParameterizedTest + @ValueSource(strings = {"다이아몬드", "하트", "스페이드", "클로버"}) + void givenCardTypeWithString_WhenGetCardType_ThenEqualToGivenCardType(String type) { + CardType cardType = CardType.from(type); + + assertThat(cardType.getCardType()) + .isEqualTo(type); + } +} \ No newline at end of file From 9c12086c91a35eea9171b9414586d1c838c876e8 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 18:23:54 +0900 Subject: [PATCH 052/115] =?UTF-8?q?feat:=20=EC=A3=BC=EC=96=B4=EC=A7=84=20S?= =?UTF-8?q?tring=20type=20=EC=9C=BC=EB=A1=9C=20CardType=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=ED=9B=84=20getCardType()=20=ED=98=B8=EC=B6=9C?= =?UTF-8?q?=EC=8B=9C,=20=EC=A3=BC=EC=96=B4=EC=A7=84=20type=EA=B3=BC=20?= =?UTF-8?q?=EB=8F=99=EC=9D=BC=ED=95=98=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/CardType.java | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/blackJack/domain/CardType.java diff --git a/src/main/java/blackJack/domain/CardType.java b/src/main/java/blackJack/domain/CardType.java new file mode 100644 index 00000000..7e1d640a --- /dev/null +++ b/src/main/java/blackJack/domain/CardType.java @@ -0,0 +1,31 @@ +package blackJack.domain; + +import java.util.Arrays; +import java.util.List; + +public class CardType { + + private static final List CARD_TYPE_LIST = Arrays.asList("다이아몬드", "하트", "클로버", "스페이드"); + + private String cardType; + + private CardType(String cardType) { + this.cardType = cardType; + + validateCardNumberRange(); + } + + public static CardType from(String cardType) { + return new CardType(cardType); + } + + public String getCardType() { + return cardType; + } + + private void validateCardNumberRange() { + if (!CARD_TYPE_LIST.contains(cardType)) { + throw new RuntimeException("[ERROR] CardType 범위인 String을 입력해주세요."); + } + } +} From ec1bb3d36130a085168decd171ddb147aa75a8ec Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 18:25:28 +0900 Subject: [PATCH 053/115] =?UTF-8?q?test:=20=EC=9C=A0=ED=9A=A8=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20CardType=20=EB=B2=94=EC=9C=84?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=EC=8A=A4=ED=84=B4=EC=8A=A4=EA=B0=80=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EB=90=A0=EB=95=8C,=20RuntimeException=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/blackJack/domain/CardTypeTest.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/test/java/blackJack/domain/CardTypeTest.java b/src/test/java/blackJack/domain/CardTypeTest.java index 158d28b2..f26be7f4 100644 --- a/src/test/java/blackJack/domain/CardTypeTest.java +++ b/src/test/java/blackJack/domain/CardTypeTest.java @@ -1,13 +1,14 @@ package blackJack.domain; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; class CardTypeTest { + @DisplayName("주어진 String type 으로 CardType 생성 후 getCardType() 호출시, 주어진 type과 동일하다.") @ParameterizedTest @ValueSource(strings = {"다이아몬드", "하트", "스페이드", "클로버"}) @@ -17,4 +18,14 @@ void givenCardTypeWithString_WhenGetCardType_ThenEqualToGivenCardType(String typ assertThat(cardType.getCardType()) .isEqualTo(type); } + + @DisplayName("유효하지 않는 CardType 범위로 인스턴스가 생성될때, RuntimeException 발생한다.") + @ParameterizedTest + @ValueSource(strings = {"네모", "세모", "동그라미"}) + void givenInValidCardTypeRange_WhenCreateInstance_ThenThrowRuntimeException( + String type) { + assertThatThrownBy(() -> CardType.from(type)) + .isInstanceOf(RuntimeException.class); + + } } \ No newline at end of file From 093f6a0408c2986f3ed67e7de24e4879cd2588e6 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 18:25:47 +0900 Subject: [PATCH 054/115] =?UTF-8?q?test:=20typo=20err=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/blackJack/domain/CardNumberTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/blackJack/domain/CardNumberTest.java b/src/test/java/blackJack/domain/CardNumberTest.java index a10108cf..d57690d0 100644 --- a/src/test/java/blackJack/domain/CardNumberTest.java +++ b/src/test/java/blackJack/domain/CardNumberTest.java @@ -19,7 +19,7 @@ void givenNumberWithString_WhenGetCardNumber_ThenEqualToGivenNumber(String numbe .isEqualTo(number); } - @DisplayName("유효하지 않는 CarNumber 범위로 인스턴스가 생성될때, RuntimeException 발생한다.") + @DisplayName("유효하지 않는 CardNumber 범위로 인스턴스가 생성될때, RuntimeException 발생한다.") @ParameterizedTest @ValueSource(strings = {"1", "11", "12", "13", "B"}) void givenInValidCardNumberRange_WhenCreateInstance_ThenThrowRuntimeException( From efe97821c80ab449bcd8106b3b73b446f4ef153d Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 18:26:22 +0900 Subject: [PATCH 055/115] =?UTF-8?q?docs:=20CardType,=20CardNumber=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6f28ec40..564f2d6b 100644 --- a/README.md +++ b/README.md @@ -73,8 +73,9 @@ - [] 현재 가진 Card 중에서 Ace가 있는 경우, 해당 Card에 대한 Score를 1 또는 11로 계산할 수 있다. - [] 21을 초과하지 않으면서, 21에 가깝게 계산할 수 있다. - [] Card - Game에서 사용할 카드의 객체 - - [] CardType type을 가지고 있다. (e.g 다이아몬드, 클로버, 스페이드, 하트 ...) - - [] CardNumber number을 가지고 있다. (e.g 1, 2, 3, A, K, Q ...) + - [x] CardType type을 가지고 있다. (e.g 다이아몬드, 클로버, 스페이드, 하트 ...) + - [x] CardNumber _String을_ 가지고 있다. (e.g 2, 3, A, K, Q, J ...) + - [x] CardNumber는 `"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"` 이 범위안에 반드시 있어야한다. - [] CardType - Card의 타입 - [] CardNumber - Card의 숫자 - [] 해당 카드의 점수인 score를 가지고 있다. From 9dc87ff0e15ba12c526c5d4738f1178a4534b6cf Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 18:28:02 +0900 Subject: [PATCH 056/115] =?UTF-8?q?docs:=20CardType=EC=9D=80=20`"=EB=8B=A4?= =?UTF-8?q?=EC=9D=B4=EC=95=84=EB=AA=AC=EB=93=9C",=20"=ED=95=98=ED=8A=B8",?= =?UTF-8?q?=20"=ED=81=B4=EB=A1=9C=EB=B2=84",=20"=EC=8A=A4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EB=93=9C"`=20=EC=9D=B4=20=EB=B2=94=EC=9C=84=EC=95=88?= =?UTF-8?q?=EC=97=90=20=EB=B0=98=EB=93=9C=EC=8B=9C=20=EC=9E=88=EC=96=B4?= =?UTF-8?q?=EC=95=BC=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 564f2d6b..4d97f237 100644 --- a/README.md +++ b/README.md @@ -75,9 +75,10 @@ - [] Card - Game에서 사용할 카드의 객체 - [x] CardType type을 가지고 있다. (e.g 다이아몬드, 클로버, 스페이드, 하트 ...) - [x] CardNumber _String을_ 가지고 있다. (e.g 2, 3, A, K, Q, J ...) - - [x] CardNumber는 `"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"` 이 범위안에 반드시 있어야한다. - [] CardType - Card의 타입 + - [x] CardType은 `"다이아몬드", "하트", "클로버", "스페이드"` 이 범위안에 반드시 있어야한다. - [] CardNumber - Card의 숫자 + - [x] CardNumber는 `"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"` 이 범위안에 반드시 있어야한다. - [] 해당 카드의 점수인 score를 가지고 있다. - [] GameCard - 게임에서 사용될 모든 Card의 집합 - [] 모든 Card는 중복이 없어야한다. From a5f917fc1fd2362ead222a723ca21d5ff65ba72f Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 21:24:29 +0900 Subject: [PATCH 057/115] =?UTF-8?q?test:=20=EC=B9=B4=EB=93=9C=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=EC=99=80=20=EC=B9=B4=EB=93=9C=20=ED=83=80=EC=9E=85?= =?UTF-8?q?=EC=9D=84=20=EC=9E=85=EB=A0=A5=ED=95=A0=EB=95=8C,=20=EC=A3=BC?= =?UTF-8?q?=EC=96=B4=EC=A7=84=20=EC=88=AB=EC=9E=90=EC=99=80=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=EC=9C=BC=EB=A1=9C=20=EC=B9=B4=EB=93=9C=EA=B0=80=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EB=90=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/blackJack/domain/CardTest.java | 37 ++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/test/java/blackJack/domain/CardTest.java diff --git a/src/test/java/blackJack/domain/CardTest.java b/src/test/java/blackJack/domain/CardTest.java new file mode 100644 index 00000000..d3d18a14 --- /dev/null +++ b/src/test/java/blackJack/domain/CardTest.java @@ -0,0 +1,37 @@ +package blackJack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class CardTest { + + static Stream generateCardTypeAndCardNumber() { + return Stream.of( + Arguments.of(Arrays.asList("다이아몬드", "2")), + Arguments.of(Arrays.asList("하트", "3")), + Arguments.of(Arrays.asList("클로버", "4")), + Arguments.of(Arrays.asList("스페이드", "5")), + Arguments.of(Arrays.asList("다이아몬드", "6")), + Arguments.of(Arrays.asList("클로버", "J")) + ); + } + + @DisplayName("카드 숫자와 카드 타입을 입력할때, 주어진 숫자와 타입으로 카드가 생성된다.") + @ParameterizedTest + @MethodSource("generateCardTypeAndCardNumber") + void givenNumberWithStringAndTypeWithString_WhenGetCardNumberAndGetCardType_ThenEqualToGivenNumberAndType( + List cardParameter) { + Card card = Card.of(cardParameter.get(0), cardParameter.get(1)); + + assertThat( + Arrays.asList(card.getCardType().getCardType(), card.getCardNumber().getCardNumber())) + .isEqualTo(cardParameter); + } +} \ No newline at end of file From c53265079b5190b63ea47f8845eb5f748782e2a3 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 21:24:40 +0900 Subject: [PATCH 058/115] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=EC=99=80=20=EC=B9=B4=EB=93=9C=20=ED=83=80=EC=9E=85?= =?UTF-8?q?=EC=9D=84=20=EC=9E=85=EB=A0=A5=ED=95=A0=EB=95=8C,=20=EC=A3=BC?= =?UTF-8?q?=EC=96=B4=EC=A7=84=20=EC=88=AB=EC=9E=90=EC=99=80=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=EC=9C=BC=EB=A1=9C=20=EC=B9=B4=EB=93=9C=EA=B0=80=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EB=90=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/Card.java | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/blackJack/domain/Card.java diff --git a/src/main/java/blackJack/domain/Card.java b/src/main/java/blackJack/domain/Card.java new file mode 100644 index 00000000..b228865b --- /dev/null +++ b/src/main/java/blackJack/domain/Card.java @@ -0,0 +1,25 @@ +package blackJack.domain; + +public class Card { + + private CardType cardType; + private CardNumber cardNumber; + + private Card(String cardType, String cardNumber) { + this.cardType = CardType.from(cardType); + this.cardNumber = CardNumber.from(cardNumber); + } + + public static Card of(String cardType, String cardNumber) { + return new Card(cardType, cardNumber); + } + + public CardType getCardType() { + return cardType; + } + + public CardNumber getCardNumber() { + return cardNumber; + } +} + From 99a30dc0547c189d1a3e02475b219667eb8495aa Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 21:26:01 +0900 Subject: [PATCH 059/115] =?UTF-8?q?refactor:=20card=20getter=20=EB=84=A4?= =?UTF-8?q?=EC=9D=B4=EB=B0=8D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/blackJack/domain/CardNumberTest.java | 2 +- src/test/java/blackJack/domain/CardTest.java | 2 +- src/test/java/blackJack/domain/CardTypeTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/blackJack/domain/CardNumberTest.java b/src/test/java/blackJack/domain/CardNumberTest.java index d57690d0..4c000fc1 100644 --- a/src/test/java/blackJack/domain/CardNumberTest.java +++ b/src/test/java/blackJack/domain/CardNumberTest.java @@ -15,7 +15,7 @@ class CardNumberTest { void givenNumberWithString_WhenGetCardNumber_ThenEqualToGivenNumber(String number) { CardNumber cardNumber = CardNumber.from(number); - assertThat(cardNumber.getCardNumber()) + assertThat(cardNumber.getNumber()) .isEqualTo(number); } diff --git a/src/test/java/blackJack/domain/CardTest.java b/src/test/java/blackJack/domain/CardTest.java index d3d18a14..554e85a8 100644 --- a/src/test/java/blackJack/domain/CardTest.java +++ b/src/test/java/blackJack/domain/CardTest.java @@ -31,7 +31,7 @@ void givenNumberWithStringAndTypeWithString_WhenGetCardNumberAndGetCardType_Then Card card = Card.of(cardParameter.get(0), cardParameter.get(1)); assertThat( - Arrays.asList(card.getCardType().getCardType(), card.getCardNumber().getCardNumber())) + Arrays.asList(card.getCardType().getType(), card.getCardNumber().getNumber())) .isEqualTo(cardParameter); } } \ No newline at end of file diff --git a/src/test/java/blackJack/domain/CardTypeTest.java b/src/test/java/blackJack/domain/CardTypeTest.java index f26be7f4..42278f7d 100644 --- a/src/test/java/blackJack/domain/CardTypeTest.java +++ b/src/test/java/blackJack/domain/CardTypeTest.java @@ -15,7 +15,7 @@ class CardTypeTest { void givenCardTypeWithString_WhenGetCardType_ThenEqualToGivenCardType(String type) { CardType cardType = CardType.from(type); - assertThat(cardType.getCardType()) + assertThat(cardType.getType()) .isEqualTo(type); } From 8f38840a87f2ec5596c2e547b390f32a16edd053 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 21:26:26 +0900 Subject: [PATCH 060/115] =?UTF-8?q?refactor:=20card=20getter=20=EB=84=A4?= =?UTF-8?q?=EC=9D=B4=EB=B0=8D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/CardNumber.java | 7 ++++--- src/main/java/blackJack/domain/CardType.java | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/blackJack/domain/CardNumber.java b/src/main/java/blackJack/domain/CardNumber.java index 617a1223..860e60b3 100644 --- a/src/main/java/blackJack/domain/CardNumber.java +++ b/src/main/java/blackJack/domain/CardNumber.java @@ -5,7 +5,8 @@ public class CardNumber { - private static final List CARD_NUMBER_LIST = Arrays.asList("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"); + private static final List CARD_NUMBER_LIST = Arrays.asList("A", "2", "3", "4", "5", "6", + "7", "8", "9", "10", "J", "Q", "K"); private String cardNumber; @@ -19,11 +20,11 @@ public static CardNumber from(String cardNumber) { return new CardNumber(cardNumber); } - public String getCardNumber() { + public String getNumber() { return cardNumber; } - private void validateCardNumberRange () { + private void validateCardNumberRange() { if (!CARD_NUMBER_LIST.contains(cardNumber)) { throw new RuntimeException("[ERROR] CardNumber 범위인 String을 입력해주세요."); } diff --git a/src/main/java/blackJack/domain/CardType.java b/src/main/java/blackJack/domain/CardType.java index 7e1d640a..6f816bff 100644 --- a/src/main/java/blackJack/domain/CardType.java +++ b/src/main/java/blackJack/domain/CardType.java @@ -19,7 +19,7 @@ public static CardType from(String cardType) { return new CardType(cardType); } - public String getCardType() { + public String getType() { return cardType; } From 3a1128660315c6b8f71a44077b5814bfc4faae69 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 21:26:52 +0900 Subject: [PATCH 061/115] feat: Deck, User Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/Deck.java | 5 +++++ src/main/java/blackJack/domain/User.java | 13 +++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/main/java/blackJack/domain/Deck.java create mode 100644 src/main/java/blackJack/domain/User.java diff --git a/src/main/java/blackJack/domain/Deck.java b/src/main/java/blackJack/domain/Deck.java new file mode 100644 index 00000000..b3d4ee6b --- /dev/null +++ b/src/main/java/blackJack/domain/Deck.java @@ -0,0 +1,5 @@ +//package blackJack.domain; +// +//public class Deck { +// +//} diff --git a/src/main/java/blackJack/domain/User.java b/src/main/java/blackJack/domain/User.java new file mode 100644 index 00000000..fbd74268 --- /dev/null +++ b/src/main/java/blackJack/domain/User.java @@ -0,0 +1,13 @@ +//package blackJack.domain; +// +//public interface User { +// +// private final Deck deck; +// private final UserName userName; +// +// private void addDeck () {} +// +// private boolean isScoreOver21 (){ +// +// } +//} From b4fcda34d518a220200977ef5e4ec7bb38222e31 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 21:27:15 +0900 Subject: [PATCH 062/115] =?UTF-8?q?docs:=20Card=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 4d97f237..899df62c 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ - [] UserName을 가지고 있다. - [] Deck에 카드를 추가할 수 있다. - [] Deck의 현재 score가 21을 넘는지에 대한 boolean 계산을 할 수 있다. + - [] 해당 카드의 점수인 score를 계산 할 수 있다. - [] Dealer - [] 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. - [] Player @@ -72,14 +73,14 @@ - [] 현재 List의 총 score를 계산할 수 있다. - [] 현재 가진 Card 중에서 Ace가 있는 경우, 해당 Card에 대한 Score를 1 또는 11로 계산할 수 있다. - [] 21을 초과하지 않으면서, 21에 가깝게 계산할 수 있다. -- [] Card - Game에서 사용할 카드의 객체 +- [x] Card - Game에서 사용할 카드의 객체 - [x] CardType type을 가지고 있다. (e.g 다이아몬드, 클로버, 스페이드, 하트 ...) - [x] CardNumber _String을_ 가지고 있다. (e.g 2, 3, A, K, Q, J ...) -- [] CardType - Card의 타입 + - [x] 카드 숫자와 카드 타입을 입력할때, 주어진 숫자와 타입으로 카드가 생성된다. +- [x] CardType - Card의 타입 - [x] CardType은 `"다이아몬드", "하트", "클로버", "스페이드"` 이 범위안에 반드시 있어야한다. -- [] CardNumber - Card의 숫자 - - [x] CardNumber는 `"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"` 이 범위안에 반드시 있어야한다. - - [] 해당 카드의 점수인 score를 가지고 있다. +- [x] CardNumber - Card의 숫자 + - [x] CardNumber는 `"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"` 이 범위안에 반드시 있어야한다. - [] GameCard - 게임에서 사용될 모든 Card의 집합 - [] 모든 Card는 중복이 없어야한다. - [] GameUser - BlackJack을 수행한는 User의 집합 From 9866a4849bc2e49e1c2adc2824b2c93162f327d3 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Tue, 15 Feb 2022 23:26:07 +0900 Subject: [PATCH 063/115] =?UTF-8?q?feat=20:=20Deck=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - List를 가지고 있다. - 현재 List의 총 score를 계산할 수 있다. - 현재 가진 Card 중에서 Ace가 있는 경우, 해당 Card에 대한 Score를 1 또는 11로 계산할 수 있다. - 21을 초과하지 않으면서, 21에 가깝게 계산할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/Deck.java | 73 ++++++++++++++-- src/main/java/blackJack/util/Util.java | 13 +++ src/test/java/blackJack/domain/DeckTest.java | 92 ++++++++++++++++++++ 3 files changed, 173 insertions(+), 5 deletions(-) create mode 100644 src/main/java/blackJack/util/Util.java create mode 100644 src/test/java/blackJack/domain/DeckTest.java diff --git a/src/main/java/blackJack/domain/Deck.java b/src/main/java/blackJack/domain/Deck.java index b3d4ee6b..e5a540da 100644 --- a/src/main/java/blackJack/domain/Deck.java +++ b/src/main/java/blackJack/domain/Deck.java @@ -1,5 +1,68 @@ -//package blackJack.domain; -// -//public class Deck { -// -//} +package blackJack.domain; + +import blackJack.util.Util; +import java.util.ArrayList; +import java.util.List; + +public class Deck { + + private final List deck; + private static final String JQK_REGEX = "[JQK]"; + private static final int JQK_SCORE = 10; + private static final int ACE_BONUS_SCORE = 11; + private static final int MATCH_SCORE = 21; + + private Deck() { + this.deck = new ArrayList<>(); + } + + private Deck(List deck) { + this.deck = deck; + } + + public static Deck create() { + return new Deck(); + } + + public static Deck from(List deck) { + return new Deck(deck); + } + + public void append(Card card) { + deck.add(card); + } + + public List getDeck() { + return deck; + } + + public int getScore() { + int score = 0; + int count = 0; + for (Card card : deck) { + String number = card.getCardNumber().getNumber(); + if (Util.isNumber(number)) { + score += Integer.parseInt(number); + } + if (number.matches(JQK_REGEX)) { + score += JQK_SCORE; + } + if (number.equals("A")) { + score += 1; + count += 1; + } + } + return calculateAceScore(score, count); + } + + private int calculateAceScore(int score, int count) { + int resultScore = score; + for (int i = 0; i < count; i++) { + if (resultScore + (ACE_BONUS_SCORE - 1) > MATCH_SCORE) { + break; + } + resultScore += (ACE_BONUS_SCORE - 1); + } + return resultScore; + } +} diff --git a/src/main/java/blackJack/util/Util.java b/src/main/java/blackJack/util/Util.java new file mode 100644 index 00000000..411a9d69 --- /dev/null +++ b/src/main/java/blackJack/util/Util.java @@ -0,0 +1,13 @@ +package blackJack.util; + +public class Util { + + public static boolean isNumber(String number) { + try { + Integer.parseInt(number); + } catch (NumberFormatException e) { + return false; + } + return true; + } +} diff --git a/src/test/java/blackJack/domain/DeckTest.java b/src/test/java/blackJack/domain/DeckTest.java new file mode 100644 index 00000000..1d4a42f9 --- /dev/null +++ b/src/test/java/blackJack/domain/DeckTest.java @@ -0,0 +1,92 @@ +package blackJack.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.params.provider.Arguments.arguments; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class DeckTest { + + @DisplayName("Deck은 Card의 배열을 가지고 있다.") + @Test + void Card의_배열을_가지고_있다() { + Deck deck = Deck.create(); + Card card = Card.of("스페이드", "3"); + deck.append(card); + assertThat(deck.getDeck()).isEqualTo(Arrays.asList(card)); + } + + + static Stream generateNormalDeck() { + return Stream.of( + arguments(Arrays.asList(Card.of("다이아몬드", "3")), 3), + arguments(Arrays.asList(Card.of("다이아몬드", "9")), 9), + arguments(Arrays.asList(Card.of("스페이드", "10")), 10) + ); + } + + @DisplayName("일반적인 Deck의 score를 계산할 수 있다.") + @ParameterizedTest + @MethodSource("generateNormalDeck") + void 일반적인_deck의_score를_계산할_수_있다(List cards, int score) { + Deck deck = Deck.from(cards); + assertThat(deck.getScore()).isEqualTo(score); + } + + + static Stream generateCharTypeDeck() { + return Stream.of( + arguments(Arrays.asList(Card.of("다이아몬드", "J")), 10), + arguments(Arrays.asList(Card.of("스페이드", "Q")), 10), + arguments(Arrays.asList(Card.of("하트", "K")), 10) + ); + } + + @DisplayName("JQK 카드를 가진 덱의 score를 계산할 수 있다.") + @ParameterizedTest + @MethodSource("generateCharTypeDeck") + void JQK의_score는_10이다(List cards, int score) { + Deck deck = Deck.from(cards); + assertThat(deck.getScore()).isEqualTo(score); + } + + + static Stream generateAceDeck() { + return Stream.of( + arguments(Arrays.asList(Card.of("다이아몬드", "3")), 3), + arguments(Arrays.asList( + Card.of("하트", "3"), + Card.of("스페이드", "A"), + Card.of("클로버", "9") + ), 13), + arguments(Arrays.asList( + Card.of("하트", "10"), + Card.of("스페이드", "A") + ), 21), + arguments(Arrays.asList( + Card.of("하트", "A"), + Card.of("스페이드", "A") + ), 12), + arguments(Arrays.asList( + Card.of("하트", "A"), + Card.of("스페이드", "A"), + Card.of("클로버", "A") + ), 13) + ); + } + + @DisplayName("ACE의 score를 계산할 수 있다.") + @ParameterizedTest + @MethodSource("generateAceDeck") + void A_score를_계산할_수_있다(List cards, int score) { + Deck deck = Deck.from(cards); + assertThat(deck.getScore()).isEqualTo(score); + } +} From 7647b1408f9662429e449a4069f89144755e543b Mon Sep 17 00:00:00 2001 From: chanu94 Date: Tue, 15 Feb 2022 23:26:24 +0900 Subject: [PATCH 064/115] =?UTF-8?q?docs=20:=20Deck=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - List를 가지고 있다. - 현재 List의 총 score를 계산할 수 있다. - 현재 가진 Card 중에서 Ace가 있는 경우, 해당 Card에 대한 Score를 1 또는 11로 계산할 수 있다. - 21을 초과하지 않으면서, 21에 가깝게 계산할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 899df62c..3c93a12a 100644 --- a/README.md +++ b/README.md @@ -64,15 +64,15 @@ - [] UserName을 가지고 있다. - [] Deck에 카드를 추가할 수 있다. - [] Deck의 현재 score가 21을 넘는지에 대한 boolean 계산을 할 수 있다. - - [] 해당 카드의 점수인 score를 계산 할 수 있다. + - [] 해당 카드의 점수인 score를 반환할 수 있다. - [] Dealer - [] 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. - [] Player -- [] Deck - 딜러 또는 플레이어가 가진 Card의 집합 - - [] List를 가지고 있다. - - [] 현재 List의 총 score를 계산할 수 있다. - - [] 현재 가진 Card 중에서 Ace가 있는 경우, 해당 Card에 대한 Score를 1 또는 11로 계산할 수 있다. - - [] 21을 초과하지 않으면서, 21에 가깝게 계산할 수 있다. +- [x] Deck - 딜러 또는 플레이어가 가진 Card의 집합 + - [x] List를 가지고 있다. + - [x] 현재 List의 총 score를 계산할 수 있다. + - [x] 현재 가진 Card 중에서 Ace가 있는 경우, 해당 Card에 대한 Score를 1 또는 11로 계산할 수 있다. + - [x] 21을 초과하지 않으면서, 21에 가깝게 계산할 수 있다. - [x] Card - Game에서 사용할 카드의 객체 - [x] CardType type을 가지고 있다. (e.g 다이아몬드, 클로버, 스페이드, 하트 ...) - [x] CardNumber _String을_ 가지고 있다. (e.g 2, 3, A, K, Q, J ...) From 3f16e2fce73a9cf46eabc3bfa336f96e7e89b808 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 23:33:28 +0900 Subject: [PATCH 065/115] =?UTF-8?q?refactor:=20=EC=9B=90=EC=8B=9C=20?= =?UTF-8?q?=EC=9E=90=EB=A3=8C=20=EB=9E=98=ED=95=91=20=EC=B6=94=EC=83=81?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CardNumber - CardType Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/Card.java | 8 ++++---- src/main/java/blackJack/domain/Deck.java | 2 +- src/test/java/blackJack/domain/CardTest.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/blackJack/domain/Card.java b/src/main/java/blackJack/domain/Card.java index b228865b..0842fd41 100644 --- a/src/main/java/blackJack/domain/Card.java +++ b/src/main/java/blackJack/domain/Card.java @@ -14,12 +14,12 @@ public static Card of(String cardType, String cardNumber) { return new Card(cardType, cardNumber); } - public CardType getCardType() { - return cardType; + public String getCardType() { + return cardType.getType(); } - public CardNumber getCardNumber() { - return cardNumber; + public String getCardNumber() { + return cardNumber.getNumber(); } } diff --git a/src/main/java/blackJack/domain/Deck.java b/src/main/java/blackJack/domain/Deck.java index e5a540da..a71af865 100644 --- a/src/main/java/blackJack/domain/Deck.java +++ b/src/main/java/blackJack/domain/Deck.java @@ -40,7 +40,7 @@ public int getScore() { int score = 0; int count = 0; for (Card card : deck) { - String number = card.getCardNumber().getNumber(); + String number = card.getCardNumber(); if (Util.isNumber(number)) { score += Integer.parseInt(number); } diff --git a/src/test/java/blackJack/domain/CardTest.java b/src/test/java/blackJack/domain/CardTest.java index 554e85a8..fb827ad5 100644 --- a/src/test/java/blackJack/domain/CardTest.java +++ b/src/test/java/blackJack/domain/CardTest.java @@ -31,7 +31,7 @@ void givenNumberWithStringAndTypeWithString_WhenGetCardNumberAndGetCardType_Then Card card = Card.of(cardParameter.get(0), cardParameter.get(1)); assertThat( - Arrays.asList(card.getCardType().getType(), card.getCardNumber().getNumber())) + Arrays.asList(card.getCardType(), card.getCardNumber())) .isEqualTo(cardParameter); } } \ No newline at end of file From 7293f4e0952f6bd7f486984ea775c76b2be288fb Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 23:50:33 +0900 Subject: [PATCH 066/115] =?UTF-8?q?feat:=20GameCard=20=EC=97=90=EB=8A=94?= =?UTF-8?q?=2052=EC=9E=A5=EC=9D=98=20=EC=84=9C=EB=A1=9C=20=EB=8B=A4?= =?UTF-8?q?=EB=A5=B8=20=EC=B9=B4=EB=93=9C=EA=B0=80=20=EC=A1=B4=EC=9E=AC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/blackJack/domain/CardNumber.java | 2 +- src/main/java/blackJack/domain/CardType.java | 2 +- src/main/java/blackJack/domain/GameCard.java | 34 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/main/java/blackJack/domain/GameCard.java diff --git a/src/main/java/blackJack/domain/CardNumber.java b/src/main/java/blackJack/domain/CardNumber.java index 860e60b3..e830ec97 100644 --- a/src/main/java/blackJack/domain/CardNumber.java +++ b/src/main/java/blackJack/domain/CardNumber.java @@ -5,7 +5,7 @@ public class CardNumber { - private static final List CARD_NUMBER_LIST = Arrays.asList("A", "2", "3", "4", "5", "6", + public static final List CARD_NUMBER_LIST = Arrays.asList("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"); private String cardNumber; diff --git a/src/main/java/blackJack/domain/CardType.java b/src/main/java/blackJack/domain/CardType.java index 6f816bff..3bb4edad 100644 --- a/src/main/java/blackJack/domain/CardType.java +++ b/src/main/java/blackJack/domain/CardType.java @@ -5,7 +5,7 @@ public class CardType { - private static final List CARD_TYPE_LIST = Arrays.asList("다이아몬드", "하트", "클로버", "스페이드"); + public static final List CARD_TYPE_LIST = Arrays.asList("다이아몬드", "하트", "클로버", "스페이드"); private String cardType; diff --git a/src/main/java/blackJack/domain/GameCard.java b/src/main/java/blackJack/domain/GameCard.java new file mode 100644 index 00000000..8320af33 --- /dev/null +++ b/src/main/java/blackJack/domain/GameCard.java @@ -0,0 +1,34 @@ +package blackJack.domain; + +import static blackJack.domain.CardNumber.CARD_NUMBER_LIST; +import static blackJack.domain.CardType.CARD_TYPE_LIST; + +import java.util.ArrayList; +import java.util.List; + +public class GameCard { + + private final List gameCard; + + private GameCard() { + this.gameCard = new ArrayList<>(); + + generateGameCard(); + } + + public static GameCard create() { + return new GameCard(); + } + + public List getGameCard() { + return gameCard; + } + + private void generateGameCard() { + CARD_TYPE_LIST.forEach(type -> { + CARD_NUMBER_LIST.forEach(number -> { + gameCard.add(Card.of(type, number)); + }); + }); + } +} From 359e1fa3504499684aa163836e246ecc9f958ff2 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 23:50:43 +0900 Subject: [PATCH 067/115] =?UTF-8?q?test:=20GameCard=20=EC=97=90=EB=8A=94?= =?UTF-8?q?=2052=EC=9E=A5=EC=9D=98=20=EC=84=9C=EB=A1=9C=20=EB=8B=A4?= =?UTF-8?q?=EB=A5=B8=20=EC=B9=B4=EB=93=9C=EA=B0=80=20=EC=A1=B4=EC=9E=AC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/blackJack/domain/GameCardTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/test/java/blackJack/domain/GameCardTest.java diff --git a/src/test/java/blackJack/domain/GameCardTest.java b/src/test/java/blackJack/domain/GameCardTest.java new file mode 100644 index 00000000..4d0e624b --- /dev/null +++ b/src/test/java/blackJack/domain/GameCardTest.java @@ -0,0 +1,22 @@ +package blackJack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.HashSet; +import java.util.Set; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class GameCardTest { + + @DisplayName("GameCard 에는 52장의 서로 다른 카드가 존재한다.") + @Test + void givenNumberWithString_WhenGetCardNumber_ThenEqualToGivenNumber() { + GameCard gameCard = GameCard.create(); + + Set removedDuplicateGameCard = new HashSet<>(gameCard.getGameCard()); + + assertThat(removedDuplicateGameCard.size()) + .isEqualTo(52); + } +} \ No newline at end of file From 175b6e0f0ab87c5f1d3e91a1b0130cb00d1739af Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 23:50:53 +0900 Subject: [PATCH 068/115] =?UTF-8?q?docs:=20GameCard=20=EC=97=90=EB=8A=94?= =?UTF-8?q?=2052=EC=9E=A5=EC=9D=98=20=EC=84=9C=EB=A1=9C=20=EB=8B=A4?= =?UTF-8?q?=EB=A5=B8=20=EC=B9=B4=EB=93=9C=EA=B0=80=20=EC=A1=B4=EC=9E=AC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3c93a12a..feb35e25 100644 --- a/README.md +++ b/README.md @@ -81,8 +81,9 @@ - [x] CardType은 `"다이아몬드", "하트", "클로버", "스페이드"` 이 범위안에 반드시 있어야한다. - [x] CardNumber - Card의 숫자 - [x] CardNumber는 `"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"` 이 범위안에 반드시 있어야한다. -- [] GameCard - 게임에서 사용될 모든 Card의 집합 - - [] 모든 Card는 중복이 없어야한다. +- [x] GameCard - 게임에서 사용될 모든 Card의 집합 + - [x] 모든 Card는 중복이 없어야한다. + - [x] 총 52 장이 있어야한다. - [] GameUser - BlackJack을 수행한는 User의 집합 - [] List를 가지고 있다. - [] User를 추가할 수 있다. From 17fbe9c04846a2be40739a3da801bbb97b242af2 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 23:56:57 +0900 Subject: [PATCH 069/115] =?UTF-8?q?test:=20String=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9D=B4=20=EC=A3=BC=EC=96=B4=EC=A7=88=EB=95=8C,=20getUserName?= =?UTF-8?q?=20=EB=A9=94=EC=86=8C=EB=93=9C=EC=9D=98=20=EA=B0=92=EC=9D=80=20?= =?UTF-8?q?=EC=A3=BC=EC=96=B4=EC=A7=84=20=EC=9D=B4=EB=A6=84=EA=B3=BC=20?= =?UTF-8?q?=EB=8F=99=EC=9D=BC=ED=95=98=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/blackJack/domain/UserNameTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/test/java/blackJack/domain/UserNameTest.java diff --git a/src/test/java/blackJack/domain/UserNameTest.java b/src/test/java/blackJack/domain/UserNameTest.java new file mode 100644 index 00000000..49684b1d --- /dev/null +++ b/src/test/java/blackJack/domain/UserNameTest.java @@ -0,0 +1,20 @@ +package blackJack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class UserNameTest { + + @DisplayName("String 이름이 주어질때, getUserName 메소드의 값은 주어진 이름과 동일하다.") + @ParameterizedTest + @ValueSource(strings = {"이호찬", "박찬우", "holee", "12345"}) + void givenNameWithString_WhenGetUserName_ThenEqualToGivenName(String name) { + UserName userName = UserName.from(name); + + assertThat(userName.getUserName()) + .isEqualTo(name); + } +} \ No newline at end of file From ff529d12b3dfbc89d9c694999efe548c006272f2 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 23:57:07 +0900 Subject: [PATCH 070/115] =?UTF-8?q?feat:=20String=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9D=B4=20=EC=A3=BC=EC=96=B4=EC=A7=88=EB=95=8C,=20getUserName?= =?UTF-8?q?=20=EB=A9=94=EC=86=8C=EB=93=9C=EC=9D=98=20=EA=B0=92=EC=9D=80=20?= =?UTF-8?q?=EC=A3=BC=EC=96=B4=EC=A7=84=20=EC=9D=B4=EB=A6=84=EA=B3=BC=20?= =?UTF-8?q?=EB=8F=99=EC=9D=BC=ED=95=98=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/UserName.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/blackJack/domain/UserName.java diff --git a/src/main/java/blackJack/domain/UserName.java b/src/main/java/blackJack/domain/UserName.java new file mode 100644 index 00000000..fa46759b --- /dev/null +++ b/src/main/java/blackJack/domain/UserName.java @@ -0,0 +1,18 @@ +package blackJack.domain; + +public class UserName { + + private final String userName; + + private UserName(String userName) { + this.userName = userName; + } + + public static UserName from(String userName) { + return new UserName(userName); + } + + public String getUserName() { + return userName; + } +} From f8aa8fba4253e9bc2b3f3215fe2ba5d0f1820780 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Tue, 15 Feb 2022 23:57:13 +0900 Subject: [PATCH 071/115] =?UTF-8?q?docs:=20String=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9D=B4=20=EC=A3=BC=EC=96=B4=EC=A7=88=EB=95=8C,=20getUserName?= =?UTF-8?q?=20=EB=A9=94=EC=86=8C=EB=93=9C=EC=9D=98=20=EA=B0=92=EC=9D=80=20?= =?UTF-8?q?=EC=A3=BC=EC=96=B4=EC=A7=84=20=EC=9D=B4=EB=A6=84=EA=B3=BC=20?= =?UTF-8?q?=EB=8F=99=EC=9D=BC=ED=95=98=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index feb35e25..89b6b7a3 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ - [] GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. - [] GameController - 전체적인 게임을 진행할 Controller - [] 이름의 배열을 BlackJack에 전달한다. -- [] UserName - 게임 참여자의 이름 +- [x] UserName - 게임 참여자의 이름 - [] InputParser - String -> List의 이름의 배열로 반환한다. - [] 이름의 중복을 확인한다. - [] 이름의 공백을 확인한다. From 70929bf593674b693cd81ad155590a2094e8defe Mon Sep 17 00:00:00 2001 From: hochan222 Date: Wed, 16 Feb 2022 00:08:21 +0900 Subject: [PATCH 072/115] =?UTF-8?q?feat:=20User=20Interface=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/User.java | 32 ++++++++++++++---------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/main/java/blackJack/domain/User.java b/src/main/java/blackJack/domain/User.java index fbd74268..4280af9f 100644 --- a/src/main/java/blackJack/domain/User.java +++ b/src/main/java/blackJack/domain/User.java @@ -1,13 +1,19 @@ -//package blackJack.domain; -// -//public interface User { -// -// private final Deck deck; -// private final UserName userName; -// -// private void addDeck () {} -// -// private boolean isScoreOver21 (){ -// -// } -//} +package blackJack.domain; + +public interface User { + + final Deck deck = Deck.create(); + final UserName userName = UserName.from(""); + + public default Deck getDeck() { + return deck; + }; + + public default UserName getUserName() { + return userName; + }; + + public default void appendToDeck(Card card) { + deck.append(card); + }; +} From 53bccc6afe1ffb5a530b0f7ef23b1524555674bb Mon Sep 17 00:00:00 2001 From: hochan222 Date: Wed, 16 Feb 2022 00:08:33 +0900 Subject: [PATCH 073/115] =?UTF-8?q?docs:=20User=20Interface=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 89b6b7a3..7e90e408 100644 --- a/README.md +++ b/README.md @@ -59,18 +59,18 @@ ## TDD 기능 구현 사항 -- [] User - - [] Deck을 가지고 있다. - - [] UserName을 가지고 있다. - - [] Deck에 카드를 추가할 수 있다. - - [] Deck의 현재 score가 21을 넘는지에 대한 boolean 계산을 할 수 있다. - - [] 해당 카드의 점수인 score를 반환할 수 있다. +- [x] User + - [x] Deck을 가지고 있다. + - [x] UserName을 가지고 있다. + - [x] Deck에 카드를 추가할 수 있다. + - [x] 해당 카드의 점수인 score를 반환할 수 있다. - [] Dealer - [] 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. - [] Player - [x] Deck - 딜러 또는 플레이어가 가진 Card의 집합 - [x] List를 가지고 있다. - [x] 현재 List의 총 score를 계산할 수 있다. + - [x] Deck의 현재 score가 21을 넘는지에 대한 boolean 계산을 할 수 있다. - [x] 현재 가진 Card 중에서 Ace가 있는 경우, 해당 Card에 대한 Score를 1 또는 11로 계산할 수 있다. - [x] 21을 초과하지 않으면서, 21에 가깝게 계산할 수 있다. - [x] Card - Game에서 사용할 카드의 객체 From f3bc3afc17450727b72530bf152ca7152da9b8e2 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Wed, 16 Feb 2022 00:08:49 +0900 Subject: [PATCH 074/115] =?UTF-8?q?feat:=20deck=20isScoreOver21=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/Deck.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/blackJack/domain/Deck.java b/src/main/java/blackJack/domain/Deck.java index a71af865..4c13e193 100644 --- a/src/main/java/blackJack/domain/Deck.java +++ b/src/main/java/blackJack/domain/Deck.java @@ -36,6 +36,10 @@ public List getDeck() { return deck; } + public boolean isScoreOver21() { + return getScore() > MATCH_SCORE; + } + public int getScore() { int score = 0; int count = 0; From e8617a6905d6fb22f95205bc1af8f718beea0545 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Wed, 16 Feb 2022 00:25:46 +0900 Subject: [PATCH 075/115] =?UTF-8?q?test:=20player=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - String 이름이 주어질때, getName 메소드의 값은 주어진 이름과 동일하다 - String 이름과 Card가 주어질때 appendToDeck 메소드를 실행시, Card로 만든 리스트와 일치한다 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/blackJack/domain/PlayerTest.java | 34 +++++++++++++++++++ .../java/blackJack/domain/UserNameTest.java | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/test/java/blackJack/domain/PlayerTest.java diff --git a/src/test/java/blackJack/domain/PlayerTest.java b/src/test/java/blackJack/domain/PlayerTest.java new file mode 100644 index 00000000..8540f814 --- /dev/null +++ b/src/test/java/blackJack/domain/PlayerTest.java @@ -0,0 +1,34 @@ +package blackJack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class PlayerTest { + + @DisplayName("String 이름이 주어질때, getName 메소드의 값은 주어진 이름과 동일하다.") + @ParameterizedTest + @ValueSource(strings = {"이호찬", "박찬우", "holee", "12345"}) + void givenNameWithString_WhenGetName_ThenEqualToGivenName(String name) { + Player player = Player.of(name); + + assertThat(player.getName()) + .isEqualTo(name); + } + + @DisplayName("String 이름과 Card가 주어질때 appendToDeck 메소드를 실행시, Card로 만든 리스트와 일치한다.") + @Test + void givenPlayerParameter_WhenAppendToDeck_ThenEqualToCardList() { + Player player = Player.of("제이슨"); + Card card = Card.of("다이아몬드", "2"); + + player.appendToDeck(card); + + assertThat(player.getDeck()) + .isEqualTo(Arrays.asList(card)); + } +} \ No newline at end of file diff --git a/src/test/java/blackJack/domain/UserNameTest.java b/src/test/java/blackJack/domain/UserNameTest.java index 49684b1d..d714d6c5 100644 --- a/src/test/java/blackJack/domain/UserNameTest.java +++ b/src/test/java/blackJack/domain/UserNameTest.java @@ -14,7 +14,7 @@ class UserNameTest { void givenNameWithString_WhenGetUserName_ThenEqualToGivenName(String name) { UserName userName = UserName.from(name); - assertThat(userName.getUserName()) + assertThat(userName.getName()) .isEqualTo(name); } } \ No newline at end of file From 8165393954b6a87a4365ffd944d6dfe13817f2b9 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Wed, 16 Feb 2022 00:25:59 +0900 Subject: [PATCH 076/115] =?UTF-8?q?feat:=20player=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - String 이름이 주어질때, getName 메소드의 값은 주어진 이름과 동일하다 - String 이름과 Card가 주어질때 appendToDeck 메소드를 실행시, Card로 만든 리스트와 일치한다 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/Player.java | 30 ++++++++++++++++++++ src/main/java/blackJack/domain/User.java | 17 ++++------- src/main/java/blackJack/domain/UserName.java | 2 +- 3 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 src/main/java/blackJack/domain/Player.java diff --git a/src/main/java/blackJack/domain/Player.java b/src/main/java/blackJack/domain/Player.java new file mode 100644 index 00000000..7f263ad1 --- /dev/null +++ b/src/main/java/blackJack/domain/Player.java @@ -0,0 +1,30 @@ +package blackJack.domain; + +import java.util.List; + +public class Player implements User { + + private final Deck deck; + private final UserName userName; + + private Player(String userName) { + this.deck = Deck.create(); + this.userName = UserName.from(userName); + } + + public static Player of(String userName) { + return new Player(userName); + } + + public List getDeck() { + return deck.getDeck(); + } + + public String getName() { + return userName.getName(); + } + + public void appendToDeck(Card card) { + deck.append(card); + } +} diff --git a/src/main/java/blackJack/domain/User.java b/src/main/java/blackJack/domain/User.java index 4280af9f..e41f0ccd 100644 --- a/src/main/java/blackJack/domain/User.java +++ b/src/main/java/blackJack/domain/User.java @@ -1,19 +1,12 @@ package blackJack.domain; -public interface User { +import java.util.List; - final Deck deck = Deck.create(); - final UserName userName = UserName.from(""); +public interface User { - public default Deck getDeck() { - return deck; - }; + List getDeck(); - public default UserName getUserName() { - return userName; - }; + String getName(); - public default void appendToDeck(Card card) { - deck.append(card); - }; + void appendToDeck(Card card); } diff --git a/src/main/java/blackJack/domain/UserName.java b/src/main/java/blackJack/domain/UserName.java index fa46759b..1daab7c2 100644 --- a/src/main/java/blackJack/domain/UserName.java +++ b/src/main/java/blackJack/domain/UserName.java @@ -12,7 +12,7 @@ public static UserName from(String userName) { return new UserName(userName); } - public String getUserName() { + public String getName() { return userName; } } From 5e682f82532d037e1fda725f286ead8b7f0b8e1b Mon Sep 17 00:00:00 2001 From: hochan222 Date: Wed, 16 Feb 2022 00:26:07 +0900 Subject: [PATCH 077/115] =?UTF-8?q?docs:=20player=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - String 이름이 주어질때, getName 메소드의 값은 주어진 이름과 동일하다 - String 이름과 Card가 주어질때 appendToDeck 메소드를 실행시, Card로 만든 리스트와 일치한다 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7e90e408..7b86b5a1 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,9 @@ - [x] 해당 카드의 점수인 score를 반환할 수 있다. - [] Dealer - [] 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. -- [] Player +- [x] Player + - [x] Deck + - [x] name - [x] Deck - 딜러 또는 플레이어가 가진 Card의 집합 - [x] List를 가지고 있다. - [x] 현재 List의 총 score를 계산할 수 있다. From 2c0ee938c65cc0bc6a91a5553972e11ef1c7093b Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 17:06:58 +0900 Subject: [PATCH 078/115] =?UTF-8?q?test=20:=20Dealer=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=9D=98=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Deck을 가지고 있다. - UserName을 가지고 있다. - name은 `dealer`라는 기본 이름을 가진다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/blackJack/domain/DealerTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/test/java/blackJack/domain/DealerTest.java diff --git a/src/test/java/blackJack/domain/DealerTest.java b/src/test/java/blackJack/domain/DealerTest.java new file mode 100644 index 00000000..bb687f3c --- /dev/null +++ b/src/test/java/blackJack/domain/DealerTest.java @@ -0,0 +1,31 @@ +package blackJack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class DealerTest { + + @DisplayName("Dealer의 기본 이름은 dealer 이다.") + @Test + void givenDefaultName_WhenGetName_ThenEqualToGivenName() { + Dealer dealer = Dealer.create(); + + assertThat(dealer.getName()) + .isEqualTo("dealer"); + } + + @DisplayName("String 이름과 Card가 주어질때 appendToDeck 메소드를 실행시, Card로 만든 리스트와 일치한다.") + @Test + void givenDealerParameter_WhenAppendToDeck_ThenEqualToCardList() { + Dealer dealer = Dealer.create(); + Card card = Card.of("다이아몬드", "2"); + + dealer.appendToDeck(card); + + assertThat(dealer.getDeck()) + .isEqualTo(Arrays.asList(card)); + } +} From 6d6cb04ee13ecb1b6bdba4794fc7478e2c2c2405 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 17:07:16 +0900 Subject: [PATCH 079/115] =?UTF-8?q?feat=20:=20Dealer=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Deck을 가지고 있다. - UserName을 가지고 있다. - name은 `dealer`라는 기본 이름을 가진다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/Dealer.java | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/blackJack/domain/Dealer.java diff --git a/src/main/java/blackJack/domain/Dealer.java b/src/main/java/blackJack/domain/Dealer.java new file mode 100644 index 00000000..bf7ee5bd --- /dev/null +++ b/src/main/java/blackJack/domain/Dealer.java @@ -0,0 +1,31 @@ +package blackJack.domain; + +import java.util.List; + +public class Dealer implements User { + + private final Deck deck; + private final UserName userName; + private static final String DEALER_NAME = "dealer"; + + private Dealer() { + this.deck = Deck.create(); + this.userName = UserName.from(DEALER_NAME); + } + + public static Dealer create() { + return new Dealer(); + } + + public List getDeck() { + return deck.getDeck(); + } + + public String getName() { + return userName.getName(); + } + + public void appendToDeck(Card card) { + deck.append(card); + } +} From 35ca7124867ad98956ca12b2e57f27dc3cdeda95 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 17:07:29 +0900 Subject: [PATCH 080/115] =?UTF-8?q?docs=20:=20Dealer=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Deck을 가지고 있다. - UserName을 가지고 있다. - name은 `dealer`라는 기본 이름을 가진다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7b86b5a1..f13a5cbd 100644 --- a/README.md +++ b/README.md @@ -65,10 +65,11 @@ - [x] Deck에 카드를 추가할 수 있다. - [x] 해당 카드의 점수인 score를 반환할 수 있다. - [] Dealer - - [] 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. + - [x] Deck을 가지고 있다. + - [x] UserName을 가지고 있다. - name은 `dealer`라는 기본 이름을 가진다. - [x] Player - - [x] Deck - - [x] name + - [x] Deck을 가지고 있다. + - [x] UserName을 가지고 있다. - [x] Deck - 딜러 또는 플레이어가 가진 Card의 집합 - [x] List를 가지고 있다. - [x] 현재 List의 총 score를 계산할 수 있다. @@ -86,11 +87,12 @@ - [x] GameCard - 게임에서 사용될 모든 Card의 집합 - [x] 모든 Card는 중복이 없어야한다. - [x] 총 52 장이 있어야한다. -- [] GameUser - BlackJack을 수행한는 User의 집합 +- [] GameUser - BlackJack을 수행하는 User의 집합 - [] List를 가지고 있다. - [] User를 추가할 수 있다. - [] List를 반환할 수 있다. - [] BlackJack - 게임 로직 수행 + - [] Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. - [] GameUser를 가지고 있다. - [] GameCard를 가지고 있다. - [] 게임 진행시 최초로 GameCard를 셔플할 수 있다. From 64ce0e820a3834098d86f1b6d48fde8b31617db8 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 17:08:11 +0900 Subject: [PATCH 081/115] =?UTF-8?q?docs=20:=20Dealer=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B5=AC=ED=98=84=20checkbox=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f13a5cbd..1f8aeacd 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ - [x] UserName을 가지고 있다. - [x] Deck에 카드를 추가할 수 있다. - [x] 해당 카드의 점수인 score를 반환할 수 있다. -- [] Dealer +- [x] Dealer - [x] Deck을 가지고 있다. - [x] UserName을 가지고 있다. - name은 `dealer`라는 기본 이름을 가진다. - [x] Player From bb07a41550c606a6221f6b3380170c0d1bec44e9 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 17:20:49 +0900 Subject: [PATCH 082/115] =?UTF-8?q?test=20:=20GameUser=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GameUser - BlackJack을 수행하는 User의 집합 - List를 가지고 있다. - User를 추가할 수 있다. - List를 반환할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- .../java/blackJack/domain/GameUserTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/test/java/blackJack/domain/GameUserTest.java diff --git a/src/test/java/blackJack/domain/GameUserTest.java b/src/test/java/blackJack/domain/GameUserTest.java new file mode 100644 index 00000000..387fa702 --- /dev/null +++ b/src/test/java/blackJack/domain/GameUserTest.java @@ -0,0 +1,24 @@ +package blackJack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import org.junit.jupiter.api.Test; + +class GameUserTest { + + @Test + void 유저_리스트를_가진다() { + GameUser gameUser = GameUser.create(); + Dealer dealer = Dealer.create(); + Player p1 = Player.of("제이슨"); + Player p2 = Player.of("박찬우"); + + gameUser.append(dealer) + .append(p1) + .append(p2); + + assertThat(gameUser.getGameUsers()) + .isEqualTo(Arrays.asList(dealer, p1, p2)); + } +} From d93d497bd887560671a425dc30a3c7b14ec3e883 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 17:21:52 +0900 Subject: [PATCH 083/115] =?UTF-8?q?feat=20:=20GameUser=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GameUser - BlackJack을 수행하는 User의 집합 - List를 가지고 있다. - User를 추가할 수 있다. - List를 반환할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/GameUser.java | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/blackJack/domain/GameUser.java diff --git a/src/main/java/blackJack/domain/GameUser.java b/src/main/java/blackJack/domain/GameUser.java new file mode 100644 index 00000000..4fa58a84 --- /dev/null +++ b/src/main/java/blackJack/domain/GameUser.java @@ -0,0 +1,26 @@ +package blackJack.domain; + +import java.util.ArrayList; +import java.util.List; + +public class GameUser { + + private final List gameUsers; + + private GameUser() { + this.gameUsers = new ArrayList<>(); + } + + public static GameUser create() { + return new GameUser(); + } + + public List getGameUsers() { + return gameUsers; + } + + public GameUser append(User user) { + gameUsers.add(user); + return this; + } +} From 78af8ab44f2d51bd66890d9775c06d7f2e9ac099 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 17:21:59 +0900 Subject: [PATCH 084/115] =?UTF-8?q?docs=20:=20GameUser=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GameUser - BlackJack을 수행하는 User의 집합 - List를 가지고 있다. - User를 추가할 수 있다. - List를 반환할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1f8aeacd..e7abc7f2 100644 --- a/README.md +++ b/README.md @@ -87,10 +87,10 @@ - [x] GameCard - 게임에서 사용될 모든 Card의 집합 - [x] 모든 Card는 중복이 없어야한다. - [x] 총 52 장이 있어야한다. -- [] GameUser - BlackJack을 수행하는 User의 집합 - - [] List를 가지고 있다. - - [] User를 추가할 수 있다. - - [] List를 반환할 수 있다. +- [x] GameUser - BlackJack을 수행하는 User의 집합 + - [x] List를 가지고 있다. + - [x] User를 추가할 수 있다. + - [x] List를 반환할 수 있다. - [] BlackJack - 게임 로직 수행 - [] Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. - [] GameUser를 가지고 있다. From 19f4ef35e86d5303763136cf3f7c67d54564d331 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 18:36:06 +0900 Subject: [PATCH 085/115] =?UTF-8?q?refactor=20:=20GameUser=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GameUser 인스턴스 생성방식 변경 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/GameUser.java | 9 ++++-- .../java/blackJack/domain/GameUserTest.java | 30 +++++++++++++++---- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/main/java/blackJack/domain/GameUser.java b/src/main/java/blackJack/domain/GameUser.java index 4fa58a84..2ffe84dc 100644 --- a/src/main/java/blackJack/domain/GameUser.java +++ b/src/main/java/blackJack/domain/GameUser.java @@ -7,12 +7,15 @@ public class GameUser { private final List gameUsers; - private GameUser() { + private GameUser(List userNames) { this.gameUsers = new ArrayList<>(); + + this.append(Dealer.create()); + userNames.forEach(userName -> this.append(Player.of(userName))); } - public static GameUser create() { - return new GameUser(); + public static GameUser from(List userNames) { + return new GameUser(userNames); } public List getGameUsers() { diff --git a/src/test/java/blackJack/domain/GameUserTest.java b/src/test/java/blackJack/domain/GameUserTest.java index 387fa702..cd9bef8a 100644 --- a/src/test/java/blackJack/domain/GameUserTest.java +++ b/src/test/java/blackJack/domain/GameUserTest.java @@ -3,22 +3,40 @@ import static org.assertj.core.api.Assertions.assertThat; import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; import org.junit.jupiter.api.Test; class GameUserTest { + private static final String DEALER_DEFAULT_NAME = "dealer"; + + @Test + void 유저_리스트는_기본적으로_dealer를_가진다() { + GameUser gameUser = GameUser.from(Arrays.asList()); + + List gameUserNames = gameUser.getGameUsers().stream() + .map(user -> user.getName()) + .collect(Collectors.toList()); + + assertThat(gameUserNames.get(0)) + .isEqualTo(DEALER_DEFAULT_NAME); + } + @Test void 유저_리스트를_가진다() { - GameUser gameUser = GameUser.create(); + List userNames = Arrays.asList("제이슨", "박찬우"); + + GameUser gameUser = GameUser.from(userNames); Dealer dealer = Dealer.create(); Player p1 = Player.of("제이슨"); Player p2 = Player.of("박찬우"); - gameUser.append(dealer) - .append(p1) - .append(p2); + List gameUserNames = gameUser.getGameUsers().stream() + .map(user -> user.getName()) + .collect(Collectors.toList()); - assertThat(gameUser.getGameUsers()) - .isEqualTo(Arrays.asList(dealer, p1, p2)); + assertThat(userNames) + .isSubsetOf(gameUserNames); } } From cd83748665273165d9257d35fedc801d9d3970c1 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 18:36:45 +0900 Subject: [PATCH 086/115] =?UTF-8?q?refactor=20:=20Dealer=20=EC=A0=95?= =?UTF-8?q?=EC=A0=81=20=EC=83=81=ED=83=9C=20=EB=B3=80=EC=88=98=EB=AA=85=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/Dealer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackJack/domain/Dealer.java b/src/main/java/blackJack/domain/Dealer.java index bf7ee5bd..e62b6597 100644 --- a/src/main/java/blackJack/domain/Dealer.java +++ b/src/main/java/blackJack/domain/Dealer.java @@ -6,11 +6,11 @@ public class Dealer implements User { private final Deck deck; private final UserName userName; - private static final String DEALER_NAME = "dealer"; + private static final String DEALER_DEFAULT_NAME = "dealer"; private Dealer() { this.deck = Deck.create(); - this.userName = UserName.from(DEALER_NAME); + this.userName = UserName.from(DEALER_DEFAULT_NAME); } public static Dealer create() { From a761d7ce7b0697c5788e8008b540d04574fa173f Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 18:37:16 +0900 Subject: [PATCH 087/115] =?UTF-8?q?feat=20:=20GameCard=20shuffle=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/GameCard.java | 6 +++++- src/test/java/blackJack/domain/GameCardTest.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackJack/domain/GameCard.java b/src/main/java/blackJack/domain/GameCard.java index 8320af33..4c3e74d1 100644 --- a/src/main/java/blackJack/domain/GameCard.java +++ b/src/main/java/blackJack/domain/GameCard.java @@ -4,6 +4,7 @@ import static blackJack.domain.CardType.CARD_TYPE_LIST; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class GameCard { @@ -12,7 +13,6 @@ public class GameCard { private GameCard() { this.gameCard = new ArrayList<>(); - generateGameCard(); } @@ -31,4 +31,8 @@ private void generateGameCard() { }); }); } + + public void shuffle() { + Collections.shuffle(gameCard); + } } diff --git a/src/test/java/blackJack/domain/GameCardTest.java b/src/test/java/blackJack/domain/GameCardTest.java index 4d0e624b..f72def86 100644 --- a/src/test/java/blackJack/domain/GameCardTest.java +++ b/src/test/java/blackJack/domain/GameCardTest.java @@ -19,4 +19,4 @@ void givenNumberWithString_WhenGetCardNumber_ThenEqualToGivenNumber() { assertThat(removedDuplicateGameCard.size()) .isEqualTo(52); } -} \ No newline at end of file +} From c5a791deb2de52483cd3ab398c1da84f730ee235 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 18:38:28 +0900 Subject: [PATCH 088/115] =?UTF-8?q?feat=20:=20BlackJack=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GameUser를 가지고 있다. - GameCard를 가지고 있다. - 게임 진행시 최초로 GameCard를 셔플할 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 7 +-- src/main/java/blackJack/domain/BlackJack.java | 35 ++++++++++++ .../java/blackJack/domain/BlackJackTest.java | 53 +++++++++++++++++++ 3 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 src/main/java/blackJack/domain/BlackJack.java create mode 100644 src/test/java/blackJack/domain/BlackJackTest.java diff --git a/README.md b/README.md index e7abc7f2..e4926ef8 100644 --- a/README.md +++ b/README.md @@ -87,15 +87,16 @@ - [x] GameCard - 게임에서 사용될 모든 Card의 집합 - [x] 모든 Card는 중복이 없어야한다. - [x] 총 52 장이 있어야한다. + - [] 모든 Card를 셔플할 수 있다. - [x] GameUser - BlackJack을 수행하는 User의 집합 - [x] List를 가지고 있다. - [x] User를 추가할 수 있다. - [x] List를 반환할 수 있다. - [] BlackJack - 게임 로직 수행 + - [x] GameUser를 가지고 있다. + - [x] GameCard를 가지고 있다. + - [x] 게임 진행시 최초로 GameCard를 셔플할 수 있다. - [] Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. - - [] GameUser를 가지고 있다. - - [] GameCard를 가지고 있다. - - [] 게임 진행시 최초로 GameCard를 셔플할 수 있다. - [] User별로 턴을 진행할 수 있게 한다. - [] GameCard에서 Card를 하나 뽑을 수 있다. - [] User에 카드를 전달할 수 있다. diff --git a/src/main/java/blackJack/domain/BlackJack.java b/src/main/java/blackJack/domain/BlackJack.java new file mode 100644 index 00000000..d1c1e5bf --- /dev/null +++ b/src/main/java/blackJack/domain/BlackJack.java @@ -0,0 +1,35 @@ +package blackJack.domain; + +import java.util.List; + +public class BlackJack { + + private final GameUser gameUser; + private final GameCard gameCard; + + private BlackJack(List userNames) { + this.gameUser = GameUser.from(userNames); + this.gameCard = GameCard.create(); + cardShuffle(); + } + + public static BlackJack from(List userNames) { + return new BlackJack(userNames); + } + + public List getGameUsers() { + return gameUser.getGameUsers(); + } + + public List getGameCard() { + return gameCard.getGameCard(); + } + + private void cardShuffle() { + gameCard.shuffle(); + } + + public void gameStart() { + // 유저별 카드 나눠주기 + } +} diff --git a/src/test/java/blackJack/domain/BlackJackTest.java b/src/test/java/blackJack/domain/BlackJackTest.java new file mode 100644 index 00000000..da86aaf6 --- /dev/null +++ b/src/test/java/blackJack/domain/BlackJackTest.java @@ -0,0 +1,53 @@ +package blackJack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class BlackJackTest { + + public static final int GAME_CARD_SIZE = 52; + + @Test + void GameUser를_가진다() { + List userNames = Arrays.asList("박찬우", "제이슨"); + BlackJack blackJack = BlackJack.from(userNames); + GameUser gameUser = GameUser.from(userNames); + + List blackJackUserNames = blackJack.getGameUsers().stream() + .map(user -> user.getName()) + .collect(Collectors.toList()); + + List gameUserNames = gameUser.getGameUsers().stream() + .map(user -> user.getName()) + .collect(Collectors.toList()); + + assertThat(blackJackUserNames) + .isEqualTo(gameUserNames); + } + + @Test + void GameCard를_가진다() { + BlackJack blackJack = BlackJack.from(Arrays.asList()); + + assertThat(blackJack.getGameCard().size()).isEqualTo(GAME_CARD_SIZE); + } + + @Test + void GameCard를_섞을_수_있다() { + BlackJack blackJack = BlackJack.from(Arrays.asList()); + GameCard gameCard = GameCard.create(); + + assertThat(blackJack.getGameCard()).isNotEqualTo(gameCard.getGameCard()); + } + + @DisplayName("Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다.") + @Test + void Dealer는_Score가_16이상일떄_1장을_더_받는다() { + + } +} From 5feebd234d575229d2a98f8fc133a0872e42524d Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 21:56:50 +0900 Subject: [PATCH 089/115] =?UTF-8?q?feat=20:=20BlackJack=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 게임 진행시 최초로 GameCard를 셔플할 수 있다. - User별로 초기 카드를 나눠준다. - GameCard에서 Card를 두 장 뽑기 - User에게 Card 전달하기 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/BlackJack.java | 15 +++++++++++++-- src/main/java/blackJack/domain/Dealer.java | 4 ++++ src/main/java/blackJack/domain/GameCard.java | 18 +++++++++++++----- src/main/java/blackJack/domain/Player.java | 4 ++++ .../java/blackJack/domain/GameUserTest.java | 9 ++------- 5 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/main/java/blackJack/domain/BlackJack.java b/src/main/java/blackJack/domain/BlackJack.java index d1c1e5bf..d6214e0d 100644 --- a/src/main/java/blackJack/domain/BlackJack.java +++ b/src/main/java/blackJack/domain/BlackJack.java @@ -4,6 +4,8 @@ public class BlackJack { + private static final int INITIAL_DRAW_CARD_COUNT = 2; + private final GameUser gameUser; private final GameCard gameCard; @@ -29,7 +31,16 @@ private void cardShuffle() { gameCard.shuffle(); } - public void gameStart() { - // 유저별 카드 나눠주기 + public void run() { + initCardDraw(); + + } + + public void initCardDraw() { + gameUser.getGameUsers() + .forEach(user -> user.appendToDeck(gameCard.drawCard(INITIAL_DRAW_CARD_COUNT))); + // Dealer의 score가 16이하일떄 한 장 더 받기 } + + } diff --git a/src/main/java/blackJack/domain/Dealer.java b/src/main/java/blackJack/domain/Dealer.java index e62b6597..224b4152 100644 --- a/src/main/java/blackJack/domain/Dealer.java +++ b/src/main/java/blackJack/domain/Dealer.java @@ -28,4 +28,8 @@ public String getName() { public void appendToDeck(Card card) { deck.append(card); } + + public void appendToDeck(List cards) { + cards.forEach(deck::append); + } } diff --git a/src/main/java/blackJack/domain/GameCard.java b/src/main/java/blackJack/domain/GameCard.java index 4c3e74d1..fee1d337 100644 --- a/src/main/java/blackJack/domain/GameCard.java +++ b/src/main/java/blackJack/domain/GameCard.java @@ -24,12 +24,20 @@ public List getGameCard() { return gameCard; } + public List drawCard(int count) { + final List cards = new ArrayList<>(); + for (int i = 0; i < count; i++) { + cards.add(gameCard.remove(0)); + } + return cards; + } + private void generateGameCard() { - CARD_TYPE_LIST.forEach(type -> { - CARD_NUMBER_LIST.forEach(number -> { - gameCard.add(Card.of(type, number)); - }); - }); + CARD_TYPE_LIST.forEach( + type -> CARD_NUMBER_LIST.forEach( + number -> gameCard.add(Card.of(type, number)) + ) + ); } public void shuffle() { diff --git a/src/main/java/blackJack/domain/Player.java b/src/main/java/blackJack/domain/Player.java index 7f263ad1..5d0ce1c4 100644 --- a/src/main/java/blackJack/domain/Player.java +++ b/src/main/java/blackJack/domain/Player.java @@ -27,4 +27,8 @@ public String getName() { public void appendToDeck(Card card) { deck.append(card); } + + public void appendToDeck(List cards) { + cards.forEach(deck::append); + } } diff --git a/src/test/java/blackJack/domain/GameUserTest.java b/src/test/java/blackJack/domain/GameUserTest.java index cd9bef8a..96716072 100644 --- a/src/test/java/blackJack/domain/GameUserTest.java +++ b/src/test/java/blackJack/domain/GameUserTest.java @@ -16,7 +16,7 @@ class GameUserTest { GameUser gameUser = GameUser.from(Arrays.asList()); List gameUserNames = gameUser.getGameUsers().stream() - .map(user -> user.getName()) + .map(User::getName) .collect(Collectors.toList()); assertThat(gameUserNames.get(0)) @@ -26,14 +26,9 @@ class GameUserTest { @Test void 유저_리스트를_가진다() { List userNames = Arrays.asList("제이슨", "박찬우"); - GameUser gameUser = GameUser.from(userNames); - Dealer dealer = Dealer.create(); - Player p1 = Player.of("제이슨"); - Player p2 = Player.of("박찬우"); - List gameUserNames = gameUser.getGameUsers().stream() - .map(user -> user.getName()) + .map(User::getName) .collect(Collectors.toList()); assertThat(userNames) From 7ad8fe2a2fd47f78ef2de3df1c40233be61ae1e1 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 21:57:09 +0900 Subject: [PATCH 090/115] =?UTF-8?q?feat=20:=20BlackJack=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 게임 진행시 최초로 GameCard를 셔플할 수 있다. - User별로 초기 카드를 나눠준다. - GameCard에서 Card를 두 장 뽑기 - User에게 Card 전달하기 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/User.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/blackJack/domain/User.java b/src/main/java/blackJack/domain/User.java index e41f0ccd..ba3b4bf8 100644 --- a/src/main/java/blackJack/domain/User.java +++ b/src/main/java/blackJack/domain/User.java @@ -9,4 +9,6 @@ public interface User { String getName(); void appendToDeck(Card card); + + void appendToDeck(List cards); } From 4b81f6b48457f38a54822b64e70e5e0b35e51ef3 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 21:57:16 +0900 Subject: [PATCH 091/115] =?UTF-8?q?docs=20:=20BlackJack=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 게임 진행시 최초로 GameCard를 셔플할 수 있다. - User별로 초기 카드를 나눠준다. - GameCard에서 Card를 두 장 뽑기 - User에게 Card 전달하기 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e4926ef8..0827bd44 100644 --- a/README.md +++ b/README.md @@ -96,11 +96,14 @@ - [x] GameUser를 가지고 있다. - [x] GameCard를 가지고 있다. - [x] 게임 진행시 최초로 GameCard를 셔플할 수 있다. - - [] Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. + - [x] User별로 초기 카드를 나눠준다. + - [x] GameCard에서 Card를 두 장 뽑기 + - [x] User에게 Card 전달하기 + - [] Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. - [] User별로 턴을 진행할 수 있게 한다. - - [] GameCard에서 Card를 하나 뽑을 수 있다. - - [] User에 카드를 전달할 수 있다. - - [] 21을 넘지 않는 경우, User에게 카드를 지속적으로 전달할 수 있다. + - [] GameCard에서 Card를 한 장 뽑기 + - [] User에게 Card 전달하기 + - [] 21을 넘지 않는 경우를 판단할 수 있다. - [] UserStats - User별 승/패에 대한 정보 - [] GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. - [] GameController - 전체적인 게임을 진행할 Controller From 452aa4c91362d735f97a95f769d1e01e49927afb Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 22:08:27 +0900 Subject: [PATCH 092/115] =?UTF-8?q?refactor=20:=20GameUser=EC=9D=98=20Play?= =?UTF-8?q?ter,=20Dealer=20=EC=B1=85=EC=9E=84=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/BlackJack.java | 8 ++++---- src/main/java/blackJack/domain/GameUser.java | 19 ++++++++++++------- .../java/blackJack/domain/BlackJackTest.java | 10 +++++----- .../java/blackJack/domain/GameUserTest.java | 15 ++++++--------- 4 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/main/java/blackJack/domain/BlackJack.java b/src/main/java/blackJack/domain/BlackJack.java index d6214e0d..3bd648a9 100644 --- a/src/main/java/blackJack/domain/BlackJack.java +++ b/src/main/java/blackJack/domain/BlackJack.java @@ -19,8 +19,8 @@ public static BlackJack from(List userNames) { return new BlackJack(userNames); } - public List getGameUsers() { - return gameUser.getGameUsers(); + public List getPlayers() { + return gameUser.getPlayers(); } public List getGameCard() { @@ -37,8 +37,8 @@ public void run() { } public void initCardDraw() { - gameUser.getGameUsers() - .forEach(user -> user.appendToDeck(gameCard.drawCard(INITIAL_DRAW_CARD_COUNT))); + gameUser.getPlayers() + .forEach(player -> player.appendToDeck(gameCard.drawCard(INITIAL_DRAW_CARD_COUNT))); // Dealer의 score가 16이하일떄 한 장 더 받기 } diff --git a/src/main/java/blackJack/domain/GameUser.java b/src/main/java/blackJack/domain/GameUser.java index 2ffe84dc..75d5df56 100644 --- a/src/main/java/blackJack/domain/GameUser.java +++ b/src/main/java/blackJack/domain/GameUser.java @@ -5,12 +5,13 @@ public class GameUser { - private final List gameUsers; + private final Dealer dealer; + private final List players; private GameUser(List userNames) { - this.gameUsers = new ArrayList<>(); + this.dealer = Dealer.create(); + this.players = new ArrayList<>(); - this.append(Dealer.create()); userNames.forEach(userName -> this.append(Player.of(userName))); } @@ -18,12 +19,16 @@ public static GameUser from(List userNames) { return new GameUser(userNames); } - public List getGameUsers() { - return gameUsers; + public List getPlayers() { + return players; } - public GameUser append(User user) { - gameUsers.add(user); + public Dealer getDealer() { + return dealer; + } + + public GameUser append(Player user) { + players.add(user); return this; } } diff --git a/src/test/java/blackJack/domain/BlackJackTest.java b/src/test/java/blackJack/domain/BlackJackTest.java index da86aaf6..39794e89 100644 --- a/src/test/java/blackJack/domain/BlackJackTest.java +++ b/src/test/java/blackJack/domain/BlackJackTest.java @@ -13,17 +13,17 @@ class BlackJackTest { public static final int GAME_CARD_SIZE = 52; @Test - void GameUser를_가진다() { + void GamePlayer를_가진다() { List userNames = Arrays.asList("박찬우", "제이슨"); BlackJack blackJack = BlackJack.from(userNames); GameUser gameUser = GameUser.from(userNames); - List blackJackUserNames = blackJack.getGameUsers().stream() - .map(user -> user.getName()) + List blackJackUserNames = blackJack.getPlayers().stream() + .map(player -> player.getName()) .collect(Collectors.toList()); - List gameUserNames = gameUser.getGameUsers().stream() - .map(user -> user.getName()) + List gameUserNames = gameUser.getPlayers().stream() + .map(player -> player.getName()) .collect(Collectors.toList()); assertThat(blackJackUserNames) diff --git a/src/test/java/blackJack/domain/GameUserTest.java b/src/test/java/blackJack/domain/GameUserTest.java index 96716072..90c66ef7 100644 --- a/src/test/java/blackJack/domain/GameUserTest.java +++ b/src/test/java/blackJack/domain/GameUserTest.java @@ -12,26 +12,23 @@ class GameUserTest { private static final String DEALER_DEFAULT_NAME = "dealer"; @Test - void 유저_리스트는_기본적으로_dealer를_가진다() { + void GameUser의_Dealer의_이름은_dealer이다() { GameUser gameUser = GameUser.from(Arrays.asList()); + String dealerName = gameUser.getDealer().getName(); - List gameUserNames = gameUser.getGameUsers().stream() - .map(User::getName) - .collect(Collectors.toList()); - - assertThat(gameUserNames.get(0)) + assertThat(dealerName) .isEqualTo(DEALER_DEFAULT_NAME); } @Test - void 유저_리스트를_가진다() { + void GameUser는_Player_리스트를_가진다() { List userNames = Arrays.asList("제이슨", "박찬우"); GameUser gameUser = GameUser.from(userNames); - List gameUserNames = gameUser.getGameUsers().stream() + List gameUserNames = gameUser.getPlayers().stream() .map(User::getName) .collect(Collectors.toList()); assertThat(userNames) - .isSubsetOf(gameUserNames); + .isEqualTo(gameUserNames); } } From 359ff2f8f6e218aae97bbb805c39b236a9a9f2e5 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 22:11:01 +0900 Subject: [PATCH 093/115] =?UTF-8?q?refactor=20:=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=B0=B8=EC=A1=B0=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 Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/blackJack/domain/BlackJackTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/blackJack/domain/BlackJackTest.java b/src/test/java/blackJack/domain/BlackJackTest.java index 39794e89..85b656ad 100644 --- a/src/test/java/blackJack/domain/BlackJackTest.java +++ b/src/test/java/blackJack/domain/BlackJackTest.java @@ -19,11 +19,11 @@ class BlackJackTest { GameUser gameUser = GameUser.from(userNames); List blackJackUserNames = blackJack.getPlayers().stream() - .map(player -> player.getName()) + .map(Player::getName) .collect(Collectors.toList()); List gameUserNames = gameUser.getPlayers().stream() - .map(player -> player.getName()) + .map(Player::getName) .collect(Collectors.toList()); assertThat(blackJackUserNames) From d8f4f2067e9e492da0aa6275f3c5fdf6fa4bacd2 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 23:26:27 +0900 Subject: [PATCH 094/115] =?UTF-8?q?feat=20:=20BlackJack=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BlackJack - 게임 로직 수행 - GameUser를 가지고 있다. - GameCard를 가지고 있다. - 게임 진행시 최초로 GameCard를 셔플할 수 있다. - User별로 초기 카드를 나눠준다. - GameCard에서 Card를 두 장 뽑기 - User에게 Card 전달하기 - Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. - User별로 턴을 진행할 수 있게 한다. - GameCard에서 Card를 한 장 뽑기 - User에게 Card 전달하기 - Player는 총 score가 21이하일 경우, 1장의 카드를 추가로 받을 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/Application.java | 8 +++- src/main/java/blackJack/domain/BlackJack.java | 36 ++++++++++++++++- src/main/java/blackJack/domain/Dealer.java | 12 +++++- src/main/java/blackJack/domain/GameCard.java | 4 ++ src/main/java/blackJack/domain/Player.java | 6 +++ src/main/java/blackJack/util/Console.java | 39 +++++++++++++++++++ src/main/java/blackJack/view/InputView.java | 17 ++++++++ .../java/blackJack/domain/BlackJackTest.java | 7 ---- 8 files changed, 118 insertions(+), 11 deletions(-) create mode 100644 src/main/java/blackJack/util/Console.java create mode 100644 src/main/java/blackJack/view/InputView.java diff --git a/src/main/java/blackJack/Application.java b/src/main/java/blackJack/Application.java index 60bfb57f..f78bb629 100644 --- a/src/main/java/blackJack/Application.java +++ b/src/main/java/blackJack/Application.java @@ -1,8 +1,14 @@ package blackJack; +import blackJack.domain.BlackJack; +import java.util.Arrays; +import java.util.List; + public class Application { public static void main(String[] args) { - + List userNames = Arrays.asList("박찬우", "제이슨"); + BlackJack blackJack = BlackJack.from(userNames); + blackJack.run(); } } diff --git a/src/main/java/blackJack/domain/BlackJack.java b/src/main/java/blackJack/domain/BlackJack.java index 3bd648a9..4ea448f7 100644 --- a/src/main/java/blackJack/domain/BlackJack.java +++ b/src/main/java/blackJack/domain/BlackJack.java @@ -1,5 +1,6 @@ package blackJack.domain; +import blackJack.view.InputView; import java.util.List; public class BlackJack { @@ -33,14 +34,45 @@ private void cardShuffle() { public void run() { initCardDraw(); + dealerPhase(); + playerPhase(); + } + + private void initCardDraw() { + initDealerDraw(); + initPlayerDraw(); + } + private void initDealerDraw() { + gameUser.getDealer().appendToDeck(gameCard.drawCard(INITIAL_DRAW_CARD_COUNT)); } - public void initCardDraw() { + private void initPlayerDraw() { gameUser.getPlayers() .forEach(player -> player.appendToDeck(gameCard.drawCard(INITIAL_DRAW_CARD_COUNT))); - // Dealer의 score가 16이하일떄 한 장 더 받기 } + private void dealerPhase() { + if (gameUser.getDealer().isCardDraw()) { + gameUser.getDealer().additionalCardDraw(gameCard.drawCard()); + } + } + private void playerPhase() { + for (Player player : gameUser.getPlayers()) { + useTurn(player); + } + } + + private void useTurn(Player player) { + while (player.isCardDraw()) { + if (InputView.readYN(player.getName())) { + player.appendToDeck(gameCard.drawCard()); + } + } + player.getDeck().forEach(card -> { + System.out.println(card.getCardNumber() + card.getCardType()); + }); + System.out.println("--------------------"); + } } diff --git a/src/main/java/blackJack/domain/Dealer.java b/src/main/java/blackJack/domain/Dealer.java index 224b4152..38dfb510 100644 --- a/src/main/java/blackJack/domain/Dealer.java +++ b/src/main/java/blackJack/domain/Dealer.java @@ -4,9 +4,11 @@ public class Dealer implements User { + private static final String DEALER_DEFAULT_NAME = "dealer"; + private static final int ADDITIONAL_CARD_DRAW_SCORE_THRESHOLD = 16; + private final Deck deck; private final UserName userName; - private static final String DEALER_DEFAULT_NAME = "dealer"; private Dealer() { this.deck = Deck.create(); @@ -32,4 +34,12 @@ public void appendToDeck(Card card) { public void appendToDeck(List cards) { cards.forEach(deck::append); } + + public boolean isCardDraw() { + return deck.getScore() <= ADDITIONAL_CARD_DRAW_SCORE_THRESHOLD; + } + + public void additionalCardDraw(Card card) { + appendToDeck(card); + } } diff --git a/src/main/java/blackJack/domain/GameCard.java b/src/main/java/blackJack/domain/GameCard.java index fee1d337..f374a908 100644 --- a/src/main/java/blackJack/domain/GameCard.java +++ b/src/main/java/blackJack/domain/GameCard.java @@ -32,6 +32,10 @@ public List drawCard(int count) { return cards; } + public Card drawCard() { + return gameCard.remove(0); + } + private void generateGameCard() { CARD_TYPE_LIST.forEach( type -> CARD_NUMBER_LIST.forEach( diff --git a/src/main/java/blackJack/domain/Player.java b/src/main/java/blackJack/domain/Player.java index 5d0ce1c4..0479e86a 100644 --- a/src/main/java/blackJack/domain/Player.java +++ b/src/main/java/blackJack/domain/Player.java @@ -4,6 +4,8 @@ public class Player implements User { + private static final int ADDITIONAL_CARD_DRAW_SCORE_THRESHOLD = 21; + private final Deck deck; private final UserName userName; @@ -31,4 +33,8 @@ public void appendToDeck(Card card) { public void appendToDeck(List cards) { cards.forEach(deck::append); } + + public boolean isCardDraw() { + return deck.getScore() <= ADDITIONAL_CARD_DRAW_SCORE_THRESHOLD; + } } diff --git a/src/main/java/blackJack/util/Console.java b/src/main/java/blackJack/util/Console.java new file mode 100644 index 00000000..6e53aa6e --- /dev/null +++ b/src/main/java/blackJack/util/Console.java @@ -0,0 +1,39 @@ +package blackJack.util; + +import java.lang.reflect.Field; +import java.util.Objects; +import java.util.Scanner; + +public class Console { + + private static Scanner scanner = getScanner(); + + private Console() { + } + + public static String readLine() { + makeNewScannerIfScannerIsClosed(); + return scanner.nextLine().replace("\\n", "\n"); + } + + private static void makeNewScannerIfScannerIsClosed() { + if (Objects.isNull(scanner) || scannerIsClosed()) { + scanner = getScanner(); + } + } + + private static boolean scannerIsClosed() { + try { + Field sourceClosedField = Scanner.class.getDeclaredField("sourceClosed"); + sourceClosedField.setAccessible(true); + return sourceClosedField.getBoolean(scanner); + } catch (NoSuchFieldException | IllegalAccessException e) { + System.out.println("리플렉션 중 에러 발생"); + } + return true; + } + + private static Scanner getScanner() { + return new Scanner(System.in); + } +} diff --git a/src/main/java/blackJack/view/InputView.java b/src/main/java/blackJack/view/InputView.java new file mode 100644 index 00000000..31d5e388 --- /dev/null +++ b/src/main/java/blackJack/view/InputView.java @@ -0,0 +1,17 @@ +package blackJack.view; + +import blackJack.util.Console; + +public class InputView { + + public static boolean readYN(String name) { + String yn = ""; + try { + System.out.print(name + "는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n) "); + yn = Console.readLine(); + } catch (IllegalArgumentException exception) { + System.err.println(exception.getMessage()); + } + return yn.equals("y"); + } +} diff --git a/src/test/java/blackJack/domain/BlackJackTest.java b/src/test/java/blackJack/domain/BlackJackTest.java index 85b656ad..3af26976 100644 --- a/src/test/java/blackJack/domain/BlackJackTest.java +++ b/src/test/java/blackJack/domain/BlackJackTest.java @@ -5,7 +5,6 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; -import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; class BlackJackTest { @@ -44,10 +43,4 @@ class BlackJackTest { assertThat(blackJack.getGameCard()).isNotEqualTo(gameCard.getGameCard()); } - - @DisplayName("Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다.") - @Test - void Dealer는_Score가_16이상일떄_1장을_더_받는다() { - - } } From 3e33b793481e99eb8a79f1a8915d2968bf0d6664 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Wed, 16 Feb 2022 23:26:35 +0900 Subject: [PATCH 095/115] =?UTF-8?q?docs=20:=20BlackJack=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BlackJack - 게임 로직 수행 - GameUser를 가지고 있다. - GameCard를 가지고 있다. - 게임 진행시 최초로 GameCard를 셔플할 수 있다. - User별로 초기 카드를 나눠준다. - GameCard에서 Card를 두 장 뽑기 - User에게 Card 전달하기 - Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. - User별로 턴을 진행할 수 있게 한다. - GameCard에서 Card를 한 장 뽑기 - User에게 Card 전달하기 - Player는 총 score가 21이하일 경우, 1장의 카드를 추가로 받을 수 있다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0827bd44..b28daa37 100644 --- a/README.md +++ b/README.md @@ -67,9 +67,12 @@ - [x] Dealer - [x] Deck을 가지고 있다. - [x] UserName을 가지고 있다. - name은 `dealer`라는 기본 이름을 가진다. + - [x] 현재 score가 16이하 인지를 판단하여 반환할 수 있다. + - [x] 1장의 카드를 추가로 받을 수 있다. - [x] Player - [x] Deck을 가지고 있다. - [x] UserName을 가지고 있다. + - [x] 현재 score가 21을 넘지 않는지를 판단하여 반환할 수 있다. - [x] Deck - 딜러 또는 플레이어가 가진 Card의 집합 - [x] List를 가지고 있다. - [x] 현재 List의 총 score를 계산할 수 있다. @@ -92,18 +95,18 @@ - [x] List를 가지고 있다. - [x] User를 추가할 수 있다. - [x] List를 반환할 수 있다. -- [] BlackJack - 게임 로직 수행 +- [x] BlackJack - 게임 로직 수행 - [x] GameUser를 가지고 있다. - [x] GameCard를 가지고 있다. - [x] 게임 진행시 최초로 GameCard를 셔플할 수 있다. - [x] User별로 초기 카드를 나눠준다. - [x] GameCard에서 Card를 두 장 뽑기 - [x] User에게 Card 전달하기 - - [] Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. - - [] User별로 턴을 진행할 수 있게 한다. - - [] GameCard에서 Card를 한 장 뽑기 - - [] User에게 Card 전달하기 - - [] 21을 넘지 않는 경우를 판단할 수 있다. + - [x] Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다. + - [x] User별로 턴을 진행할 수 있게 한다. + - [x] GameCard에서 Card를 한 장 뽑기 + - [x] User에게 Card 전달하기 + - [x] Player는 총 score가 21이하일 경우, 1장의 카드를 추가로 받을 수 있다. - [] UserStats - User별 승/패에 대한 정보 - [] GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. - [] GameController - 전체적인 게임을 진행할 Controller From 2c71cbf49b6c006e61aab377b0ef4a27f799229c Mon Sep 17 00:00:00 2001 From: hochan222 Date: Thu, 17 Feb 2022 00:30:17 +0900 Subject: [PATCH 096/115] =?UTF-8?q?feat:=20Game=20-=20=EC=A0=84=EC=B2=B4?= =?UTF-8?q?=EC=A0=81=EC=9D=B8=20=EA=B2=8C=EC=9E=84=EC=9D=84=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=ED=95=A0=20Controller=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EB=B0=8F=20InputView,=20OutputView=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/Application.java | 9 ++-- src/main/java/blackJack/controller/Game.java | 39 +++++++++++++++++ src/main/java/blackJack/domain/BlackJack.java | 20 ++++----- src/main/java/blackJack/domain/Dealer.java | 4 ++ src/main/java/blackJack/domain/Deck.java | 11 +++-- src/main/java/blackJack/domain/Player.java | 4 ++ src/main/java/blackJack/domain/User.java | 2 + src/main/java/blackJack/util/Util.java | 7 +++ src/main/java/blackJack/view/InputView.java | 7 ++- src/main/java/blackJack/view/OutputView.java | 43 +++++++++++++++++++ 10 files changed, 124 insertions(+), 22 deletions(-) create mode 100644 src/main/java/blackJack/controller/Game.java create mode 100644 src/main/java/blackJack/view/OutputView.java diff --git a/src/main/java/blackJack/Application.java b/src/main/java/blackJack/Application.java index f78bb629..c42aea68 100644 --- a/src/main/java/blackJack/Application.java +++ b/src/main/java/blackJack/Application.java @@ -1,14 +1,11 @@ package blackJack; -import blackJack.domain.BlackJack; -import java.util.Arrays; -import java.util.List; +import blackJack.controller.Game; public class Application { public static void main(String[] args) { - List userNames = Arrays.asList("박찬우", "제이슨"); - BlackJack blackJack = BlackJack.from(userNames); - blackJack.run(); + Game game = Game.getInstance(); + game.run(); } } diff --git a/src/main/java/blackJack/controller/Game.java b/src/main/java/blackJack/controller/Game.java new file mode 100644 index 00000000..cf95931a --- /dev/null +++ b/src/main/java/blackJack/controller/Game.java @@ -0,0 +1,39 @@ +package blackJack.controller; + +import blackJack.domain.BlackJack; +import blackJack.util.Util; +import blackJack.view.InputView; +import blackJack.view.OutputView; +import java.util.List; + +public class Game { + + private static Game game = null; + + private Game() { + } + + public static Game getInstance() { + if (game == null) { + game = new Game(); + } + return game; + } + + public void run() { + List playerNames = getPlayerName(); + BlackJack blackJack = BlackJack.from(playerNames); + + blackJack.initCardDraw(); + OutputView.printInitCardDrawFormat(playerNames); + OutputView.printUserStatus(blackJack.getGameUser()); + + blackJack.playerPhase(); + blackJack.dealerPhase(); + } + + private List getPlayerName() { + OutputView.printRequestPlayerNames(); + return Util.stringToStringList(InputView.readPlayerName()); + } +} diff --git a/src/main/java/blackJack/domain/BlackJack.java b/src/main/java/blackJack/domain/BlackJack.java index 4ea448f7..3f8b2fe6 100644 --- a/src/main/java/blackJack/domain/BlackJack.java +++ b/src/main/java/blackJack/domain/BlackJack.java @@ -1,6 +1,7 @@ package blackJack.domain; import blackJack.view.InputView; +import blackJack.view.OutputView; import java.util.List; public class BlackJack { @@ -20,6 +21,10 @@ public static BlackJack from(List userNames) { return new BlackJack(userNames); } + public GameUser getGameUser() { + return gameUser; + } + public List getPlayers() { return gameUser.getPlayers(); } @@ -32,13 +37,7 @@ private void cardShuffle() { gameCard.shuffle(); } - public void run() { - initCardDraw(); - dealerPhase(); - playerPhase(); - } - - private void initCardDraw() { + public void initCardDraw() { initDealerDraw(); initPlayerDraw(); } @@ -52,13 +51,13 @@ private void initPlayerDraw() { .forEach(player -> player.appendToDeck(gameCard.drawCard(INITIAL_DRAW_CARD_COUNT))); } - private void dealerPhase() { + public void dealerPhase() { if (gameUser.getDealer().isCardDraw()) { gameUser.getDealer().additionalCardDraw(gameCard.drawCard()); } } - private void playerPhase() { + public void playerPhase() { for (Player player : gameUser.getPlayers()) { useTurn(player); } @@ -66,7 +65,8 @@ private void playerPhase() { private void useTurn(Player player) { while (player.isCardDraw()) { - if (InputView.readYN(player.getName())) { + OutputView.printRequestAdditionalCardDrawFormat(player); + if (InputView.readYN()) { player.appendToDeck(gameCard.drawCard()); } } diff --git a/src/main/java/blackJack/domain/Dealer.java b/src/main/java/blackJack/domain/Dealer.java index 38dfb510..ed4b87d7 100644 --- a/src/main/java/blackJack/domain/Dealer.java +++ b/src/main/java/blackJack/domain/Dealer.java @@ -42,4 +42,8 @@ public boolean isCardDraw() { public void additionalCardDraw(Card card) { appendToDeck(card); } + + public String convertStatus() { + return String.format("%s: %s", userName.getName(), deck.convertDeckFormat()); + } } diff --git a/src/main/java/blackJack/domain/Deck.java b/src/main/java/blackJack/domain/Deck.java index 4c13e193..4b56bb7f 100644 --- a/src/main/java/blackJack/domain/Deck.java +++ b/src/main/java/blackJack/domain/Deck.java @@ -3,6 +3,7 @@ import blackJack.util.Util; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class Deck { @@ -36,10 +37,6 @@ public List getDeck() { return deck; } - public boolean isScoreOver21() { - return getScore() > MATCH_SCORE; - } - public int getScore() { int score = 0; int count = 0; @@ -59,6 +56,12 @@ public int getScore() { return calculateAceScore(score, count); } + public String convertDeckFormat() { + return deck.stream() + .map(card -> String.format("%s%s", card.getCardNumber(), card.getCardType())) + .collect(Collectors.joining(", ")); + } + private int calculateAceScore(int score, int count) { int resultScore = score; for (int i = 0; i < count; i++) { diff --git a/src/main/java/blackJack/domain/Player.java b/src/main/java/blackJack/domain/Player.java index 0479e86a..7ae542f7 100644 --- a/src/main/java/blackJack/domain/Player.java +++ b/src/main/java/blackJack/domain/Player.java @@ -37,4 +37,8 @@ public void appendToDeck(List cards) { public boolean isCardDraw() { return deck.getScore() <= ADDITIONAL_CARD_DRAW_SCORE_THRESHOLD; } + + public String convertStatus() { + return String.format("%s카드: %s", userName.getName(), deck.convertDeckFormat()); + } } diff --git a/src/main/java/blackJack/domain/User.java b/src/main/java/blackJack/domain/User.java index ba3b4bf8..fc76c708 100644 --- a/src/main/java/blackJack/domain/User.java +++ b/src/main/java/blackJack/domain/User.java @@ -11,4 +11,6 @@ public interface User { void appendToDeck(Card card); void appendToDeck(List cards); + + String convertStatus(); } diff --git a/src/main/java/blackJack/util/Util.java b/src/main/java/blackJack/util/Util.java index 411a9d69..6c8f3cd7 100644 --- a/src/main/java/blackJack/util/Util.java +++ b/src/main/java/blackJack/util/Util.java @@ -1,5 +1,8 @@ package blackJack.util; +import java.util.Arrays; +import java.util.List; + public class Util { public static boolean isNumber(String number) { @@ -10,4 +13,8 @@ public static boolean isNumber(String number) { } return true; } + + public static List stringToStringList(String unrefinedString) { + return Arrays.asList(unrefinedString.split(", ")); + } } diff --git a/src/main/java/blackJack/view/InputView.java b/src/main/java/blackJack/view/InputView.java index 31d5e388..13650df6 100644 --- a/src/main/java/blackJack/view/InputView.java +++ b/src/main/java/blackJack/view/InputView.java @@ -4,14 +4,17 @@ public class InputView { - public static boolean readYN(String name) { + public static boolean readYN() { String yn = ""; try { - System.out.print(name + "는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n) "); yn = Console.readLine(); } catch (IllegalArgumentException exception) { System.err.println(exception.getMessage()); } return yn.equals("y"); } + + public static String readPlayerName() { + return Console.readLine(); + } } diff --git a/src/main/java/blackJack/view/OutputView.java b/src/main/java/blackJack/view/OutputView.java new file mode 100644 index 00000000..c1f9d17c --- /dev/null +++ b/src/main/java/blackJack/view/OutputView.java @@ -0,0 +1,43 @@ +package blackJack.view; + +import blackJack.domain.Dealer; +import blackJack.domain.GameUser; +import blackJack.domain.Player; +import java.util.List; + +public class OutputView { + + private static final String PRINT_REQUEST_PLAYER_NAMES = "게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)"; + private static final String PRINT_INIT_CARD_DRAW_FORMAT = "%n딜러와 %s에게 2장의 나누었습니다.%n"; + private static final String PRINT_REQUEST_ADDITIONAL_CARD_DRAW_FORMAT = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)%n"; + + public static void printRequestPlayerNames() { + System.out.println(PRINT_REQUEST_PLAYER_NAMES); + } + + public static void printInitCardDrawFormat(List playerNames) { + System.out.printf(PRINT_INIT_CARD_DRAW_FORMAT, String.join(", ", playerNames)); + } + + public static void printUserStatus(GameUser gameUser) { + printDealerStatus(gameUser.getDealer()); + printPlayersStatus(gameUser.getPlayers()); + System.out.println(); + } + + public static void printDealerStatus(Dealer dealer) { + System.out.println(dealer.convertStatus()); + } + + public static void printPlayersStatus(List players) { + players.forEach(OutputView::printPlayerStatus); + } + + public static void printPlayerStatus(Player player) { + System.out.println(player.convertStatus()); + } + + public static void printRequestAdditionalCardDrawFormat(Player player) { + System.out.printf(PRINT_REQUEST_ADDITIONAL_CARD_DRAW_FORMAT, player.getName()); + } +} From d0e97acdd56e4a6b1cf048f4f7c0a02640e22187 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Thu, 17 Feb 2022 00:30:27 +0900 Subject: [PATCH 097/115] =?UTF-8?q?docs:=20Game=20-=20=EC=A0=84=EC=B2=B4?= =?UTF-8?q?=EC=A0=81=EC=9D=B8=20=EA=B2=8C=EC=9E=84=EC=9D=84=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=ED=95=A0=20Controller=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EB=B0=8F=20InputView,=20OutputView=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b28daa37..4ced1232 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ - [x] GameCard - 게임에서 사용될 모든 Card의 집합 - [x] 모든 Card는 중복이 없어야한다. - [x] 총 52 장이 있어야한다. - - [] 모든 Card를 셔플할 수 있다. + - [x] 모든 Card를 셔플할 수 있다. - [x] GameUser - BlackJack을 수행하는 User의 집합 - [x] List를 가지고 있다. - [x] User를 추가할 수 있다. @@ -109,15 +109,16 @@ - [x] Player는 총 score가 21이하일 경우, 1장의 카드를 추가로 받을 수 있다. - [] UserStats - User별 승/패에 대한 정보 - [] GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. -- [] GameController - 전체적인 게임을 진행할 Controller - - [] 이름의 배열을 BlackJack에 전달한다. +- [x] Game - 전체적인 게임을 진행할 Controller + - [x] 이름의 배열을 BlackJack에 전달한다. + - [x] 싱글턴 패턴 적용 - [x] UserName - 게임 참여자의 이름 - [] InputParser - String -> List의 이름의 배열로 반환한다. - [] 이름의 중복을 확인한다. - [] 이름의 공백을 확인한다. -- [] InputView - - [] 게임에 참여할 이름을 입력받는다. -- [] OutputView +- [x] InputView + - [x] 게임에 참여할 이름을 입력받는다. +- [x] OutputView ## 최초 PR 마감 기한 From 03ea0d5f4ac55c914f646f4d5e82c811df1eebdd Mon Sep 17 00:00:00 2001 From: hochan222 Date: Thu, 17 Feb 2022 00:39:22 +0900 Subject: [PATCH 098/115] =?UTF-8?q?feat:=20phase=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/controller/Game.java | 2 ++ src/main/java/blackJack/domain/BlackJack.java | 6 ++---- src/main/java/blackJack/view/OutputView.java | 5 +++++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/blackJack/controller/Game.java b/src/main/java/blackJack/controller/Game.java index cf95931a..74538c84 100644 --- a/src/main/java/blackJack/controller/Game.java +++ b/src/main/java/blackJack/controller/Game.java @@ -30,6 +30,8 @@ public void run() { blackJack.playerPhase(); blackJack.dealerPhase(); + + } private List getPlayerName() { diff --git a/src/main/java/blackJack/domain/BlackJack.java b/src/main/java/blackJack/domain/BlackJack.java index 3f8b2fe6..fcc1a075 100644 --- a/src/main/java/blackJack/domain/BlackJack.java +++ b/src/main/java/blackJack/domain/BlackJack.java @@ -54,6 +54,7 @@ private void initPlayerDraw() { public void dealerPhase() { if (gameUser.getDealer().isCardDraw()) { gameUser.getDealer().additionalCardDraw(gameCard.drawCard()); + OutputView.printDealerAdditionalCardDraw(); } } @@ -69,10 +70,7 @@ private void useTurn(Player player) { if (InputView.readYN()) { player.appendToDeck(gameCard.drawCard()); } + OutputView.printPlayerStatus(player); } - player.getDeck().forEach(card -> { - System.out.println(card.getCardNumber() + card.getCardType()); - }); - System.out.println("--------------------"); } } diff --git a/src/main/java/blackJack/view/OutputView.java b/src/main/java/blackJack/view/OutputView.java index c1f9d17c..89f1ef23 100644 --- a/src/main/java/blackJack/view/OutputView.java +++ b/src/main/java/blackJack/view/OutputView.java @@ -10,6 +10,7 @@ public class OutputView { private static final String PRINT_REQUEST_PLAYER_NAMES = "게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)"; private static final String PRINT_INIT_CARD_DRAW_FORMAT = "%n딜러와 %s에게 2장의 나누었습니다.%n"; private static final String PRINT_REQUEST_ADDITIONAL_CARD_DRAW_FORMAT = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)%n"; + private static final String PRINT_DEALER_ADDITIONAL_CARD_DRAW = "\n딜러는 16이하라 한장의 카드를 더 받았습니다.\n"; public static void printRequestPlayerNames() { System.out.println(PRINT_REQUEST_PLAYER_NAMES); @@ -40,4 +41,8 @@ public static void printPlayerStatus(Player player) { public static void printRequestAdditionalCardDrawFormat(Player player) { System.out.printf(PRINT_REQUEST_ADDITIONAL_CARD_DRAW_FORMAT, player.getName()); } + + public static void printDealerAdditionalCardDraw() { + System.out.println(PRINT_DEALER_ADDITIONAL_CARD_DRAW); + } } From 7908ef9adf55d409a7da6bc62ffde93094e63bb4 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Thu, 17 Feb 2022 17:32:20 +0900 Subject: [PATCH 099/115] =?UTF-8?q?feat:=20convertTotalScore=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84,=20UserStats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserStats - User별 승/패에 대한 정보 - GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/controller/Game.java | 3 ++ src/main/java/blackJack/domain/Dealer.java | 8 +++- src/main/java/blackJack/domain/GameUser.java | 8 ++++ src/main/java/blackJack/domain/Player.java | 4 ++ src/main/java/blackJack/domain/Score.java | 42 ++++++++++++++++++++ src/main/java/blackJack/domain/User.java | 2 + src/main/java/blackJack/view/OutputView.java | 4 ++ 7 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 src/main/java/blackJack/domain/Score.java diff --git a/src/main/java/blackJack/controller/Game.java b/src/main/java/blackJack/controller/Game.java index 74538c84..90ecddbe 100644 --- a/src/main/java/blackJack/controller/Game.java +++ b/src/main/java/blackJack/controller/Game.java @@ -1,6 +1,7 @@ package blackJack.controller; import blackJack.domain.BlackJack; +import blackJack.domain.UserStats; import blackJack.util.Util; import blackJack.view.InputView; import blackJack.view.OutputView; @@ -31,7 +32,9 @@ public void run() { blackJack.playerPhase(); blackJack.dealerPhase(); + UserStats userStats = UserStats.of(blackJack.getGameUser()); + OutputView.printTotalScore(userStats.convertTotalScore()); } private List getPlayerName() { diff --git a/src/main/java/blackJack/domain/Dealer.java b/src/main/java/blackJack/domain/Dealer.java index ed4b87d7..10afd1fb 100644 --- a/src/main/java/blackJack/domain/Dealer.java +++ b/src/main/java/blackJack/domain/Dealer.java @@ -4,7 +4,7 @@ public class Dealer implements User { - private static final String DEALER_DEFAULT_NAME = "dealer"; + private static final String DEALER_DEFAULT_NAME = "딜러"; private static final int ADDITIONAL_CARD_DRAW_SCORE_THRESHOLD = 16; private final Deck deck; @@ -44,6 +44,10 @@ public void additionalCardDraw(Card card) { } public String convertStatus() { - return String.format("%s: %s", userName.getName(), deck.convertDeckFormat()); + return String.format("%s 카드: %s", userName.getName(), deck.convertDeckFormat()); + } + + public int getScore() { + return deck.getScore(); } } diff --git a/src/main/java/blackJack/domain/GameUser.java b/src/main/java/blackJack/domain/GameUser.java index 75d5df56..1d4374f0 100644 --- a/src/main/java/blackJack/domain/GameUser.java +++ b/src/main/java/blackJack/domain/GameUser.java @@ -31,4 +31,12 @@ public GameUser append(Player user) { players.add(user); return this; } + + public List getUsers() { + List user = new ArrayList<>(); + user.add(dealer); + user.addAll(players); + + return user; + } } diff --git a/src/main/java/blackJack/domain/Player.java b/src/main/java/blackJack/domain/Player.java index 7ae542f7..26507d10 100644 --- a/src/main/java/blackJack/domain/Player.java +++ b/src/main/java/blackJack/domain/Player.java @@ -41,4 +41,8 @@ public boolean isCardDraw() { public String convertStatus() { return String.format("%s카드: %s", userName.getName(), deck.convertDeckFormat()); } + + public int getScore() { + return deck.getScore(); + } } diff --git a/src/main/java/blackJack/domain/Score.java b/src/main/java/blackJack/domain/Score.java new file mode 100644 index 00000000..60bdc3c2 --- /dev/null +++ b/src/main/java/blackJack/domain/Score.java @@ -0,0 +1,42 @@ +package blackJack.domain; + +public class Score { + + private final int win; + private final int lose; + private final int draw; + + private Score() { + this(0, 0, 0); + } + + private Score(int win, int lose, int draw) { + this.win = win; + this.lose = lose; + this.draw = draw; + } + + public static Score create() { + return new Score(); + } + + public static Score of(int win, int lose, int draw) { + return new Score(win, lose, draw); + } + + public int total() { + return win + lose + draw; + } + + public Score win() { + return Score.of(win + 1, lose, draw); + } + + public Score lose() { + return Score.of(win, lose + 1, draw); + } + + public Score draw() { + return Score.of(win, lose, draw + 1); + } +} diff --git a/src/main/java/blackJack/domain/User.java b/src/main/java/blackJack/domain/User.java index fc76c708..b20c110c 100644 --- a/src/main/java/blackJack/domain/User.java +++ b/src/main/java/blackJack/domain/User.java @@ -13,4 +13,6 @@ public interface User { void appendToDeck(List cards); String convertStatus(); + + int getScore(); } diff --git a/src/main/java/blackJack/view/OutputView.java b/src/main/java/blackJack/view/OutputView.java index 89f1ef23..ddcea273 100644 --- a/src/main/java/blackJack/view/OutputView.java +++ b/src/main/java/blackJack/view/OutputView.java @@ -45,4 +45,8 @@ public static void printRequestAdditionalCardDrawFormat(Player player) { public static void printDealerAdditionalCardDraw() { System.out.println(PRINT_DEALER_ADDITIONAL_CARD_DRAW); } + + public static void printTotalScore(String totalScore) { + System.out.println(totalScore); + } } From d7a5c8779225f3900f869cfde6c6c1680535864f Mon Sep 17 00:00:00 2001 From: hochan222 Date: Thu, 17 Feb 2022 17:32:52 +0900 Subject: [PATCH 100/115] =?UTF-8?q?test:=20convertTotalScore=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=A5=B8=20dealer=EC=9D=B4=EB=A6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserStats - User별 승/패에 대한 정보 - GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/test/java/blackJack/domain/DealerTest.java | 2 +- src/test/java/blackJack/domain/GameUserTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/blackJack/domain/DealerTest.java b/src/test/java/blackJack/domain/DealerTest.java index bb687f3c..327c0897 100644 --- a/src/test/java/blackJack/domain/DealerTest.java +++ b/src/test/java/blackJack/domain/DealerTest.java @@ -14,7 +14,7 @@ void givenDefaultName_WhenGetName_ThenEqualToGivenName() { Dealer dealer = Dealer.create(); assertThat(dealer.getName()) - .isEqualTo("dealer"); + .isEqualTo("딜러"); } @DisplayName("String 이름과 Card가 주어질때 appendToDeck 메소드를 실행시, Card로 만든 리스트와 일치한다.") diff --git a/src/test/java/blackJack/domain/GameUserTest.java b/src/test/java/blackJack/domain/GameUserTest.java index 90c66ef7..191cce8e 100644 --- a/src/test/java/blackJack/domain/GameUserTest.java +++ b/src/test/java/blackJack/domain/GameUserTest.java @@ -9,7 +9,7 @@ class GameUserTest { - private static final String DEALER_DEFAULT_NAME = "dealer"; + private static final String DEALER_DEFAULT_NAME = "딜러"; @Test void GameUser의_Dealer의_이름은_dealer이다() { From 37c524e9f5eea672ae20ab45e934b9222d49dc32 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Thu, 17 Feb 2022 17:33:50 +0900 Subject: [PATCH 101/115] =?UTF-8?q?docs:=20convertTotalScore=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserStats - User별 승/패에 대한 정보 - GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/UserStats.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/main/java/blackJack/domain/UserStats.java diff --git a/src/main/java/blackJack/domain/UserStats.java b/src/main/java/blackJack/domain/UserStats.java new file mode 100644 index 00000000..015a4c6a --- /dev/null +++ b/src/main/java/blackJack/domain/UserStats.java @@ -0,0 +1,38 @@ +package blackJack.domain; + +import java.util.List; +import java.util.stream.Collectors; + +public class UserStats { + + private final GameUser gameUser; + + private UserStats(GameUser gameUser) { + this.gameUser = gameUser; + } + + public static UserStats of(GameUser gameUser) { + return new UserStats(gameUser); + } + + public GameUser getGameUser() { + return gameUser; + } + + public String convertTotalScore() { + List users = gameUser.getUsers(); + + return users.stream().map( + user -> String.format( + "%s - 결과: %d\n", + user.convertStatus(), + user.getScore() + ) + ).collect(Collectors.joining()); + } + + public String convertTotalResult() { + + return ""; + } +} \ No newline at end of file From 44216e4a0e0842cddf1cb9a9801e878f289b2b17 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Thu, 17 Feb 2022 17:34:06 +0900 Subject: [PATCH 102/115] =?UTF-8?q?docs:=20convertTotalScore=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserStats - User별 승/패에 대한 정보 - GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4ced1232..605f937c 100644 --- a/README.md +++ b/README.md @@ -107,8 +107,14 @@ - [x] GameCard에서 Card를 한 장 뽑기 - [x] User에게 Card 전달하기 - [x] Player는 총 score가 21이하일 경우, 1장의 카드를 추가로 받을 수 있다. -- [] UserStats - User별 승/패에 대한 정보 +- [x] UserStats - User별 승/패에 대한 정보 - [] GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. + - [x] convertTotalScore() + - [ ] convertTotalResult() +- [ ] Score + - [ ] 승 횟수 + - [ ] 패배 횟수 + - [ ] 전체 경기 횟수 - [x] Game - 전체적인 게임을 진행할 Controller - [x] 이름의 배열을 BlackJack에 전달한다. - [x] 싱글턴 패턴 적용 @@ -124,6 +130,11 @@ 2월 17일 목요일까지 +### test + +```bash +./gradlew clean check +``` ### git pull pair From 2589dfca1cf63954c6dbcb5b4eff425e3b31ad70 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Thu, 17 Feb 2022 20:50:40 +0900 Subject: [PATCH 103/115] =?UTF-8?q?feat=20:=20UserStats=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserStats - User별 승/패에 대한 정보 - GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. - User별 Deck의 score를 출력하기 위한 String을 반환할 수 있다. convertTotalScore() - User별 최종 승/패를 출력하기 위한 String을 반환할 수 있다. convertTotalResult() - User별 Deck의 score가 21을 초과할 경우, 승/패를 계산할 수 있다. - Dealer의 score가 21을 초과할 경우, Player가 승리한다. - Dealer의 score가 21을 초과하지 않고, Player의 score가 21을 초과하는 경우, Dealer가 승리한다. Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- README.md | 16 +++---- src/main/java/blackJack/controller/Game.java | 2 +- src/main/java/blackJack/domain/BlackJack.java | 3 ++ src/main/java/blackJack/domain/Deck.java | 2 +- src/main/java/blackJack/domain/UserStats.java | 48 ++++++++++++++++--- src/main/java/blackJack/view/OutputView.java | 10 +++- 6 files changed, 60 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 605f937c..5da5317e 100644 --- a/README.md +++ b/README.md @@ -108,20 +108,16 @@ - [x] User에게 Card 전달하기 - [x] Player는 총 score가 21이하일 경우, 1장의 카드를 추가로 받을 수 있다. - [x] UserStats - User별 승/패에 대한 정보 - - [] GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. - - [x] convertTotalScore() - - [ ] convertTotalResult() -- [ ] Score - - [ ] 승 횟수 - - [ ] 패배 횟수 - - [ ] 전체 경기 횟수 + - [x] GameUser를 인자로 받아 User별, 승/패 정보를 계산한다. + - [x] User별 Deck의 score를 출력하기 위한 String을 반환할 수 있다. convertTotalScore() + - [x] User별 최종 승/패를 출력하기 위한 String을 반환할 수 있다. convertTotalResult() + - [x] User별 Deck의 score가 21을 초과할 경우, 승/패를 계산할 수 있다. + - [x] Dealer의 score가 21을 초과할 경우, Player가 승리한다. + - [x] Dealer의 score가 21을 초과하지 않고, Player의 score가 21을 초과하는 경우, Dealer가 승리한다. - [x] Game - 전체적인 게임을 진행할 Controller - [x] 이름의 배열을 BlackJack에 전달한다. - [x] 싱글턴 패턴 적용 - [x] UserName - 게임 참여자의 이름 -- [] InputParser - String -> List의 이름의 배열로 반환한다. - - [] 이름의 중복을 확인한다. - - [] 이름의 공백을 확인한다. - [x] InputView - [x] 게임에 참여할 이름을 입력받는다. - [x] OutputView diff --git a/src/main/java/blackJack/controller/Game.java b/src/main/java/blackJack/controller/Game.java index 90ecddbe..a8251428 100644 --- a/src/main/java/blackJack/controller/Game.java +++ b/src/main/java/blackJack/controller/Game.java @@ -33,8 +33,8 @@ public void run() { blackJack.dealerPhase(); UserStats userStats = UserStats.of(blackJack.getGameUser()); - OutputView.printTotalScore(userStats.convertTotalScore()); + OutputView.printTotalResult(userStats.convertTotalResult()); } private List getPlayerName() { diff --git a/src/main/java/blackJack/domain/BlackJack.java b/src/main/java/blackJack/domain/BlackJack.java index fcc1a075..5f457e1c 100644 --- a/src/main/java/blackJack/domain/BlackJack.java +++ b/src/main/java/blackJack/domain/BlackJack.java @@ -69,8 +69,11 @@ private void useTurn(Player player) { OutputView.printRequestAdditionalCardDrawFormat(player); if (InputView.readYN()) { player.appendToDeck(gameCard.drawCard()); + OutputView.printPlayerStatus(player); + continue; } OutputView.printPlayerStatus(player); + break; } } } diff --git a/src/main/java/blackJack/domain/Deck.java b/src/main/java/blackJack/domain/Deck.java index 4b56bb7f..d186662d 100644 --- a/src/main/java/blackJack/domain/Deck.java +++ b/src/main/java/blackJack/domain/Deck.java @@ -11,7 +11,7 @@ public class Deck { private static final String JQK_REGEX = "[JQK]"; private static final int JQK_SCORE = 10; private static final int ACE_BONUS_SCORE = 11; - private static final int MATCH_SCORE = 21; + public static final int MATCH_SCORE = 21; private Deck() { this.deck = new ArrayList<>(); diff --git a/src/main/java/blackJack/domain/UserStats.java b/src/main/java/blackJack/domain/UserStats.java index 015a4c6a..8e66779e 100644 --- a/src/main/java/blackJack/domain/UserStats.java +++ b/src/main/java/blackJack/domain/UserStats.java @@ -5,6 +5,11 @@ public class UserStats { + public static final String TOTAL_SCORE_FORMAT = "%s - 결과: %d\n"; + public static final String DEALER_TOTAL_FORMAT = "%s: %d승 %d패\n"; + public static final String PLAYER_WIN_FORMAT = "%s: 승\n"; + public static final String PLAYER_LOSE_FORMAT = "%s: 패\n"; + private final GameUser gameUser; private UserStats(GameUser gameUser) { @@ -15,16 +20,12 @@ public static UserStats of(GameUser gameUser) { return new UserStats(gameUser); } - public GameUser getGameUser() { - return gameUser; - } - public String convertTotalScore() { List users = gameUser.getUsers(); return users.stream().map( user -> String.format( - "%s - 결과: %d\n", + TOTAL_SCORE_FORMAT, user.convertStatus(), user.getScore() ) @@ -32,7 +33,40 @@ public String convertTotalScore() { } public String convertTotalResult() { + return convertDealerTotalResult() + convertPlayersTotalResult(); + } + + public String convertDealerTotalResult() { + int win = (int) gameUser.getPlayers().stream() + .filter(this::isDealerWin) + .count(); + int total = gameUser.getPlayers().size(); + return String.format( + DEALER_TOTAL_FORMAT, + gameUser.getDealer().getName(), + win, + (total - win) + ); + } + + public String convertPlayersTotalResult() { + return gameUser.getPlayers().stream() + .map(player -> { + if (!isDealerWin(player)) { + return String.format(PLAYER_WIN_FORMAT, player.getName()); + } + return String.format(PLAYER_LOSE_FORMAT, player.getName()); + }).collect(Collectors.joining()); + } + + private boolean isDealerWin(Player player) { + if (gameUser.getDealer().getScore() > Deck.MATCH_SCORE) { + return false; + } + if (player.getScore() > Deck.MATCH_SCORE) { + return true; + } - return ""; + return player.getScore() < gameUser.getDealer().getScore(); } -} \ No newline at end of file +} diff --git a/src/main/java/blackJack/view/OutputView.java b/src/main/java/blackJack/view/OutputView.java index ddcea273..3fbb0bbf 100644 --- a/src/main/java/blackJack/view/OutputView.java +++ b/src/main/java/blackJack/view/OutputView.java @@ -10,7 +10,9 @@ public class OutputView { private static final String PRINT_REQUEST_PLAYER_NAMES = "게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)"; private static final String PRINT_INIT_CARD_DRAW_FORMAT = "%n딜러와 %s에게 2장의 나누었습니다.%n"; private static final String PRINT_REQUEST_ADDITIONAL_CARD_DRAW_FORMAT = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)%n"; - private static final String PRINT_DEALER_ADDITIONAL_CARD_DRAW = "\n딜러는 16이하라 한장의 카드를 더 받았습니다.\n"; + private static final String PRINT_DEALER_ADDITIONAL_CARD_DRAW = "\n딜러는 16이하라 한장의 카드를 더 받았습니다."; + private static final String PRINT_TOTAL_SCORE_FORMAT = "\n%s"; + private static final String PRINT_TOTAL_RESULT_FORMAT = "\n## 최종 승패\n%s"; public static void printRequestPlayerNames() { System.out.println(PRINT_REQUEST_PLAYER_NAMES); @@ -47,6 +49,10 @@ public static void printDealerAdditionalCardDraw() { } public static void printTotalScore(String totalScore) { - System.out.println(totalScore); + System.out.printf(PRINT_TOTAL_SCORE_FORMAT, totalScore); + } + + public static void printTotalResult(String totalResult) { + System.out.printf(PRINT_TOTAL_RESULT_FORMAT, totalResult); } } From 352de297632fafe0c7c5dacbcf4ace4fe7eafd63 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Thu, 17 Feb 2022 21:10:30 +0900 Subject: [PATCH 104/115] =?UTF-8?q?refactor=20:=20User=20=EC=B6=94?= =?UTF-8?q?=EC=83=81=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/Dealer.java | 34 ++---------------- src/main/java/blackJack/domain/Player.java | 34 ++---------------- src/main/java/blackJack/domain/User.java | 36 +++++++++++++++---- src/main/java/blackJack/domain/UserStats.java | 1 - 4 files changed, 33 insertions(+), 72 deletions(-) diff --git a/src/main/java/blackJack/domain/Dealer.java b/src/main/java/blackJack/domain/Dealer.java index 10afd1fb..5a6ac5c7 100644 --- a/src/main/java/blackJack/domain/Dealer.java +++ b/src/main/java/blackJack/domain/Dealer.java @@ -1,40 +1,18 @@ package blackJack.domain; -import java.util.List; - -public class Dealer implements User { +public class Dealer extends User { private static final String DEALER_DEFAULT_NAME = "딜러"; private static final int ADDITIONAL_CARD_DRAW_SCORE_THRESHOLD = 16; - private final Deck deck; - private final UserName userName; - private Dealer() { - this.deck = Deck.create(); - this.userName = UserName.from(DEALER_DEFAULT_NAME); + super(Deck.create(), UserName.from(DEALER_DEFAULT_NAME)); } public static Dealer create() { return new Dealer(); } - public List getDeck() { - return deck.getDeck(); - } - - public String getName() { - return userName.getName(); - } - - public void appendToDeck(Card card) { - deck.append(card); - } - - public void appendToDeck(List cards) { - cards.forEach(deck::append); - } - public boolean isCardDraw() { return deck.getScore() <= ADDITIONAL_CARD_DRAW_SCORE_THRESHOLD; } @@ -42,12 +20,4 @@ public boolean isCardDraw() { public void additionalCardDraw(Card card) { appendToDeck(card); } - - public String convertStatus() { - return String.format("%s 카드: %s", userName.getName(), deck.convertDeckFormat()); - } - - public int getScore() { - return deck.getScore(); - } } diff --git a/src/main/java/blackJack/domain/Player.java b/src/main/java/blackJack/domain/Player.java index 26507d10..6ba58746 100644 --- a/src/main/java/blackJack/domain/Player.java +++ b/src/main/java/blackJack/domain/Player.java @@ -1,48 +1,18 @@ package blackJack.domain; -import java.util.List; - -public class Player implements User { +public class Player extends User { private static final int ADDITIONAL_CARD_DRAW_SCORE_THRESHOLD = 21; - private final Deck deck; - private final UserName userName; - private Player(String userName) { - this.deck = Deck.create(); - this.userName = UserName.from(userName); + super(Deck.create(), UserName.from(userName)); } public static Player of(String userName) { return new Player(userName); } - public List getDeck() { - return deck.getDeck(); - } - - public String getName() { - return userName.getName(); - } - - public void appendToDeck(Card card) { - deck.append(card); - } - - public void appendToDeck(List cards) { - cards.forEach(deck::append); - } - public boolean isCardDraw() { return deck.getScore() <= ADDITIONAL_CARD_DRAW_SCORE_THRESHOLD; } - - public String convertStatus() { - return String.format("%s카드: %s", userName.getName(), deck.convertDeckFormat()); - } - - public int getScore() { - return deck.getScore(); - } } diff --git a/src/main/java/blackJack/domain/User.java b/src/main/java/blackJack/domain/User.java index b20c110c..e17fa7e8 100644 --- a/src/main/java/blackJack/domain/User.java +++ b/src/main/java/blackJack/domain/User.java @@ -2,17 +2,39 @@ import java.util.List; -public interface User { +public abstract class User { - List getDeck(); + protected final Deck deck; + protected final UserName userName; - String getName(); + protected User(Deck deck, UserName userName) { + this.deck = deck; + this.userName = userName; + } - void appendToDeck(Card card); + public List getDeck() { + return deck.getDeck(); + } - void appendToDeck(List cards); + public String getName() { + return userName.getName(); + } - String convertStatus(); + public void appendToDeck(Card card) { + deck.append(card); + } - int getScore(); + public void appendToDeck(List cards) { + cards.forEach(deck::append); + } + + public String convertStatus() { + return String.format("%s 카드: %s", userName.getName(), deck.convertDeckFormat()); + } + + public int getScore() { + return deck.getScore(); + } + + public abstract boolean isCardDraw(); } diff --git a/src/main/java/blackJack/domain/UserStats.java b/src/main/java/blackJack/domain/UserStats.java index 8e66779e..29a8b448 100644 --- a/src/main/java/blackJack/domain/UserStats.java +++ b/src/main/java/blackJack/domain/UserStats.java @@ -66,7 +66,6 @@ private boolean isDealerWin(Player player) { if (player.getScore() > Deck.MATCH_SCORE) { return true; } - return player.getScore() < gameUser.getDealer().getScore(); } } From 83bcacb4bc5f8baba53982bd03860424845bb0d5 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 18 Feb 2022 17:01:17 +0900 Subject: [PATCH 105/115] refactor: getScore within 10 line Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/Card.java | 24 +++++++++++-- .../java/blackJack/domain/CardNumber.java | 4 ++- src/main/java/blackJack/domain/Deck.java | 35 +++++++++---------- 3 files changed, 41 insertions(+), 22 deletions(-) diff --git a/src/main/java/blackJack/domain/Card.java b/src/main/java/blackJack/domain/Card.java index 0842fd41..4fc521b6 100644 --- a/src/main/java/blackJack/domain/Card.java +++ b/src/main/java/blackJack/domain/Card.java @@ -1,9 +1,16 @@ package blackJack.domain; +import static blackJack.domain.CardNumber.ACE_INDEX; +import static blackJack.domain.CardNumber.CARD_NUMBER_LIST; + public class Card { - private CardType cardType; - private CardNumber cardNumber; + private static final String JQK_REGEX = "[JQK]"; + private static final int JQK_SCORE = 10; + private static final int ACE_SCORE = 1; + + private final CardType cardType; + private final CardNumber cardNumber; private Card(String cardType, String cardNumber) { this.cardType = CardType.from(cardType); @@ -21,5 +28,18 @@ public String getCardType() { public String getCardNumber() { return cardNumber.getNumber(); } + + public int calculateCardScore() { + String number = cardNumber.getNumber(); + + if (number.matches(JQK_REGEX)) { + return JQK_SCORE; + } + if (number.equals(CARD_NUMBER_LIST.get(ACE_INDEX))) { + return ACE_SCORE; + } + + return Integer.parseInt(number); + } } diff --git a/src/main/java/blackJack/domain/CardNumber.java b/src/main/java/blackJack/domain/CardNumber.java index e830ec97..d34226d8 100644 --- a/src/main/java/blackJack/domain/CardNumber.java +++ b/src/main/java/blackJack/domain/CardNumber.java @@ -5,10 +5,12 @@ public class CardNumber { + public static final int ACE_INDEX = 0; + public static final List CARD_NUMBER_LIST = Arrays.asList("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"); - private String cardNumber; + private final String cardNumber; private CardNumber(String cardNumber) { this.cardNumber = cardNumber; diff --git a/src/main/java/blackJack/domain/Deck.java b/src/main/java/blackJack/domain/Deck.java index d186662d..f115c4cd 100644 --- a/src/main/java/blackJack/domain/Deck.java +++ b/src/main/java/blackJack/domain/Deck.java @@ -1,6 +1,5 @@ package blackJack.domain; -import blackJack.util.Util; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -8,8 +7,6 @@ public class Deck { private final List deck; - private static final String JQK_REGEX = "[JQK]"; - private static final int JQK_SCORE = 10; private static final int ACE_BONUS_SCORE = 11; public static final int MATCH_SCORE = 21; @@ -38,22 +35,10 @@ public List getDeck() { } public int getScore() { - int score = 0; - int count = 0; - for (Card card : deck) { - String number = card.getCardNumber(); - if (Util.isNumber(number)) { - score += Integer.parseInt(number); - } - if (number.matches(JQK_REGEX)) { - score += JQK_SCORE; - } - if (number.equals("A")) { - score += 1; - count += 1; - } - } - return calculateAceScore(score, count); + int aceCount = calculateAceCount(); + int score = calculateDefaultScore(); + + return calculateAceScore(score, aceCount); } public String convertDeckFormat() { @@ -62,6 +47,18 @@ public String convertDeckFormat() { .collect(Collectors.joining(", ")); } + private int calculateDefaultScore() { + return deck.stream() + .mapToInt(Card::calculateCardScore) + .sum(); + } + + private int calculateAceCount() { + return (int) deck.stream() + .filter(card -> "A".equals(card.getCardNumber())) + .count(); + } + private int calculateAceScore(int score, int count) { int resultScore = score; for (int i = 0; i < count; i++) { From 52fe5e1f02737bc770b9672b6125ec1941adcd87 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 18 Feb 2022 17:02:27 +0900 Subject: [PATCH 106/115] refactor: remove not use Score Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/Score.java | 42 ----------------------- 1 file changed, 42 deletions(-) delete mode 100644 src/main/java/blackJack/domain/Score.java diff --git a/src/main/java/blackJack/domain/Score.java b/src/main/java/blackJack/domain/Score.java deleted file mode 100644 index 60bdc3c2..00000000 --- a/src/main/java/blackJack/domain/Score.java +++ /dev/null @@ -1,42 +0,0 @@ -package blackJack.domain; - -public class Score { - - private final int win; - private final int lose; - private final int draw; - - private Score() { - this(0, 0, 0); - } - - private Score(int win, int lose, int draw) { - this.win = win; - this.lose = lose; - this.draw = draw; - } - - public static Score create() { - return new Score(); - } - - public static Score of(int win, int lose, int draw) { - return new Score(win, lose, draw); - } - - public int total() { - return win + lose + draw; - } - - public Score win() { - return Score.of(win + 1, lose, draw); - } - - public Score lose() { - return Score.of(win, lose + 1, draw); - } - - public Score draw() { - return Score.of(win, lose, draw + 1); - } -} From 0f7ea390f759b1dfd2e1c8bdad0b207ada09c7d2 Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 18 Feb 2022 17:03:15 +0900 Subject: [PATCH 107/115] style: UserStats Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/domain/UserStats.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/blackJack/domain/UserStats.java b/src/main/java/blackJack/domain/UserStats.java index 29a8b448..3462e31e 100644 --- a/src/main/java/blackJack/domain/UserStats.java +++ b/src/main/java/blackJack/domain/UserStats.java @@ -22,7 +22,6 @@ public static UserStats of(GameUser gameUser) { public String convertTotalScore() { List users = gameUser.getUsers(); - return users.stream().map( user -> String.format( TOTAL_SCORE_FORMAT, From 4e5dc51ecc925f10123b35b205377f6caa402edb Mon Sep 17 00:00:00 2001 From: hochan222 Date: Fri, 18 Feb 2022 17:17:42 +0900 Subject: [PATCH 108/115] refactor: Game's function within 10 lines Co-authored-by: hochan222 Co-authored-by: chanuuuuu --- src/main/java/blackJack/controller/Game.java | 21 ++++++++++++++------ src/main/java/blackJack/domain/GameUser.java | 5 +++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/blackJack/controller/Game.java b/src/main/java/blackJack/controller/Game.java index a8251428..02a6f593 100644 --- a/src/main/java/blackJack/controller/Game.java +++ b/src/main/java/blackJack/controller/Game.java @@ -10,34 +10,43 @@ public class Game { private static Game game = null; + private final BlackJack blackJack; - private Game() { + private Game(List playerNames) { + blackJack = BlackJack.from(playerNames); } public static Game getInstance() { if (game == null) { - game = new Game(); + game = new Game(getPlayerName()); } return game; } public void run() { - List playerNames = getPlayerName(); - BlackJack blackJack = BlackJack.from(playerNames); + init(); + goPhase(); + summarize(); + } + private void init() { blackJack.initCardDraw(); - OutputView.printInitCardDrawFormat(playerNames); + OutputView.printInitCardDrawFormat(blackJack.getGameUser().convertPlayersName()); OutputView.printUserStatus(blackJack.getGameUser()); + } + private void goPhase() { blackJack.playerPhase(); blackJack.dealerPhase(); + } + private void summarize() { UserStats userStats = UserStats.of(blackJack.getGameUser()); OutputView.printTotalScore(userStats.convertTotalScore()); OutputView.printTotalResult(userStats.convertTotalResult()); } - private List getPlayerName() { + private static List getPlayerName() { OutputView.printRequestPlayerNames(); return Util.stringToStringList(InputView.readPlayerName()); } diff --git a/src/main/java/blackJack/domain/GameUser.java b/src/main/java/blackJack/domain/GameUser.java index 1d4374f0..34ddaf39 100644 --- a/src/main/java/blackJack/domain/GameUser.java +++ b/src/main/java/blackJack/domain/GameUser.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class GameUser { @@ -39,4 +40,8 @@ public List getUsers() { return user; } + + public List convertPlayersName () { + return players.stream().map(User::getName).collect(Collectors.toList()); + } } From 981ae7d87dbb0b6465a857f23b3a7cc64615160c Mon Sep 17 00:00:00 2001 From: chanu94 Date: Mon, 21 Feb 2022 18:28:05 +0900 Subject: [PATCH 109/115] =?UTF-8?q?refactor=20:=20RentCompanyTest=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Intellij 제안에 따라 수정 --- src/test/java/fuelInjection/RentCompanyTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/java/fuelInjection/RentCompanyTest.java b/src/test/java/fuelInjection/RentCompanyTest.java index a288cebc..a9b2f991 100644 --- a/src/test/java/fuelInjection/RentCompanyTest.java +++ b/src/test/java/fuelInjection/RentCompanyTest.java @@ -6,7 +6,7 @@ import fuelInjection.domain.Car; import fuelInjection.domain.K5; import fuelInjection.domain.Sonata; -import java.util.Arrays; +import java.util.Collections; import java.util.List; import org.junit.jupiter.api.Test; @@ -27,7 +27,7 @@ public class RentCompanyTest { void Car의_List에_Sonata를_추가할_수_있다() { RentCompany company = RentCompany.create(); Sonata sonata = new Sonata(TEMP_DISTANCE); - List cars = Arrays.asList(sonata); + List cars = Collections.singletonList(sonata); company.addCar(sonata); assertThat(company.getRentCars().equals(cars)) @@ -38,7 +38,7 @@ public class RentCompanyTest { void Car의_List에_Avante를_추가할_수_있다() { RentCompany company = RentCompany.create(); Avante avante = new Avante(TEMP_DISTANCE); - List cars = Arrays.asList(avante); + List cars = Collections.singletonList(avante); company.addCar(avante); assertThat(company.getRentCars().equals(cars)) @@ -49,7 +49,7 @@ public class RentCompanyTest { void Car의_List에_K5를_추가할_수_있다() { RentCompany company = RentCompany.create(); K5 k5 = new K5(TEMP_DISTANCE); - List cars = Arrays.asList(k5); + List cars = Collections.singletonList(k5); company.addCar(k5); assertThat(company.getRentCars().equals(cars)) @@ -57,7 +57,7 @@ public class RentCompanyTest { } @Test - public void report() throws Exception { + public void report() { RentCompany company = RentCompany.create(); // factory method를 사용해 생성 company.addCar(new Sonata(150)); company.addCar(new K5(260)); From 1d218f07c77837b14ed9739d709a1bb60d4ea4bc Mon Sep 17 00:00:00 2001 From: chanu94 Date: Mon, 21 Feb 2022 18:30:01 +0900 Subject: [PATCH 110/115] =?UTF-8?q?refactor=20:=20Enum=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 - CardType의 Suit 사용 - CardNumber의 TrumpNumber 사용 --- src/main/java/blackJack/domain/Card.java | 5 +-- .../java/blackJack/domain/CardNumber.java | 22 ++---------- src/main/java/blackJack/domain/CardType.java | 19 ++-------- src/main/java/blackJack/domain/GameCard.java | 6 ++-- src/main/java/blackJack/domain/Suit.java | 35 +++++++++++++++++++ .../java/blackJack/domain/TrumpNumber.java | 33 +++++++++++++++++ .../java/blackJack/domain/CardTypeTest.java | 6 ++-- 7 files changed, 79 insertions(+), 47 deletions(-) create mode 100644 src/main/java/blackJack/domain/Suit.java create mode 100644 src/main/java/blackJack/domain/TrumpNumber.java diff --git a/src/main/java/blackJack/domain/Card.java b/src/main/java/blackJack/domain/Card.java index 4fc521b6..eb350e27 100644 --- a/src/main/java/blackJack/domain/Card.java +++ b/src/main/java/blackJack/domain/Card.java @@ -1,8 +1,5 @@ package blackJack.domain; -import static blackJack.domain.CardNumber.ACE_INDEX; -import static blackJack.domain.CardNumber.CARD_NUMBER_LIST; - public class Card { private static final String JQK_REGEX = "[JQK]"; @@ -35,7 +32,7 @@ public int calculateCardScore() { if (number.matches(JQK_REGEX)) { return JQK_SCORE; } - if (number.equals(CARD_NUMBER_LIST.get(ACE_INDEX))) { + if (number.equals(TrumpNumber.ACE.getTrumpNumber())) { return ACE_SCORE; } diff --git a/src/main/java/blackJack/domain/CardNumber.java b/src/main/java/blackJack/domain/CardNumber.java index d34226d8..02507307 100644 --- a/src/main/java/blackJack/domain/CardNumber.java +++ b/src/main/java/blackJack/domain/CardNumber.java @@ -1,21 +1,11 @@ package blackJack.domain; -import java.util.Arrays; -import java.util.List; - public class CardNumber { - public static final int ACE_INDEX = 0; - - public static final List CARD_NUMBER_LIST = Arrays.asList("A", "2", "3", "4", "5", "6", - "7", "8", "9", "10", "J", "Q", "K"); - - private final String cardNumber; + private final TrumpNumber trumpNumber; private CardNumber(String cardNumber) { - this.cardNumber = cardNumber; - - validateCardNumberRange(); + this.trumpNumber = TrumpNumber.from(cardNumber); } public static CardNumber from(String cardNumber) { @@ -23,12 +13,6 @@ public static CardNumber from(String cardNumber) { } public String getNumber() { - return cardNumber; - } - - private void validateCardNumberRange() { - if (!CARD_NUMBER_LIST.contains(cardNumber)) { - throw new RuntimeException("[ERROR] CardNumber 범위인 String을 입력해주세요."); - } + return trumpNumber.getTrumpNumber(); } } diff --git a/src/main/java/blackJack/domain/CardType.java b/src/main/java/blackJack/domain/CardType.java index 3bb4edad..e169968e 100644 --- a/src/main/java/blackJack/domain/CardType.java +++ b/src/main/java/blackJack/domain/CardType.java @@ -1,18 +1,11 @@ package blackJack.domain; -import java.util.Arrays; -import java.util.List; - public class CardType { - public static final List CARD_TYPE_LIST = Arrays.asList("다이아몬드", "하트", "클로버", "스페이드"); - - private String cardType; + private final Suit suit; private CardType(String cardType) { - this.cardType = cardType; - - validateCardNumberRange(); + this.suit = Suit.from(cardType); } public static CardType from(String cardType) { @@ -20,12 +13,6 @@ public static CardType from(String cardType) { } public String getType() { - return cardType; - } - - private void validateCardNumberRange() { - if (!CARD_TYPE_LIST.contains(cardType)) { - throw new RuntimeException("[ERROR] CardType 범위인 String을 입력해주세요."); - } + return suit.getName(); } } diff --git a/src/main/java/blackJack/domain/GameCard.java b/src/main/java/blackJack/domain/GameCard.java index f374a908..92adf5af 100644 --- a/src/main/java/blackJack/domain/GameCard.java +++ b/src/main/java/blackJack/domain/GameCard.java @@ -1,7 +1,5 @@ package blackJack.domain; -import static blackJack.domain.CardNumber.CARD_NUMBER_LIST; -import static blackJack.domain.CardType.CARD_TYPE_LIST; import java.util.ArrayList; import java.util.Collections; @@ -37,8 +35,8 @@ public Card drawCard() { } private void generateGameCard() { - CARD_TYPE_LIST.forEach( - type -> CARD_NUMBER_LIST.forEach( + Suit.getSuits().forEach( + type -> TrumpNumber.trumpNumbers().forEach( number -> gameCard.add(Card.of(type, number)) ) ); diff --git a/src/main/java/blackJack/domain/Suit.java b/src/main/java/blackJack/domain/Suit.java new file mode 100644 index 00000000..6a9f73dc --- /dev/null +++ b/src/main/java/blackJack/domain/Suit.java @@ -0,0 +1,35 @@ +package blackJack.domain; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public enum Suit { + DIAMOND("다이아몬드"), + HEART("하트"), + SPADE("스페이드"), + CLOVER("클로버"); + + private final String name; + + Suit(String name) { + this.name = name; + } + + public static List getSuits() { + return Arrays.stream(values()) + .map(Suit::getName) + .collect(Collectors.toList()); + } + + public static Suit from(String cardType) { + return Arrays.stream(values()) + .filter(suit -> suit.getName().equals(cardType)) + .findAny() + .orElseThrow(() -> new RuntimeException("[ERROR] CardType 범위인 String을 입력해주세요.")); + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/blackJack/domain/TrumpNumber.java b/src/main/java/blackJack/domain/TrumpNumber.java new file mode 100644 index 00000000..db503739 --- /dev/null +++ b/src/main/java/blackJack/domain/TrumpNumber.java @@ -0,0 +1,33 @@ +package blackJack.domain; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public enum TrumpNumber { + ACE("A"), TWO("2"), THREE("3"), FOUR("4"), FIVE("5"), SIX("6"), SEVEN("7"), + EIGHT("8"), NINE("9"), TEN("10"), JACK("J"), QUEEN("Q"), KING("K"); + + private final String trumpNumber; + + TrumpNumber(String trumpNumber) { + this.trumpNumber = trumpNumber; + } + + public static List trumpNumbers() { + return Arrays.stream(values()) + .map(TrumpNumber::getTrumpNumber) + .collect(Collectors.toList()); + } + + public static TrumpNumber from(String cardNumber) { + return Arrays.stream(values()) + .filter(trumpNumber -> trumpNumber.getTrumpNumber().equals(cardNumber)) + .findAny() + .orElseThrow(() -> new RuntimeException("[ERROR] CardNumber 범위인 String을 입력해주세요.")); + } + + public String getTrumpNumber() { + return trumpNumber; + } +} diff --git a/src/test/java/blackJack/domain/CardTypeTest.java b/src/test/java/blackJack/domain/CardTypeTest.java index 42278f7d..90136bd9 100644 --- a/src/test/java/blackJack/domain/CardTypeTest.java +++ b/src/test/java/blackJack/domain/CardTypeTest.java @@ -22,10 +22,8 @@ void givenCardTypeWithString_WhenGetCardType_ThenEqualToGivenCardType(String typ @DisplayName("유효하지 않는 CardType 범위로 인스턴스가 생성될때, RuntimeException 발생한다.") @ParameterizedTest @ValueSource(strings = {"네모", "세모", "동그라미"}) - void givenInValidCardTypeRange_WhenCreateInstance_ThenThrowRuntimeException( - String type) { + void givenInValidCardTypeRange_WhenCreateInstance_ThenThrowRuntimeException(String type) { assertThatThrownBy(() -> CardType.from(type)) .isInstanceOf(RuntimeException.class); - } -} \ No newline at end of file +} From 08d0258fc91b927f2ee537037d10a453b2129ec8 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Mon, 21 Feb 2022 23:36:22 +0900 Subject: [PATCH 111/115] =?UTF-8?q?refactor=20:=20Deck=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Deck의 추가 메서드 삭제 - Deck 메서드 순서 변경 --- src/main/java/blackJack/domain/Deck.java | 33 +++++++++----------- src/main/java/blackJack/domain/User.java | 4 +-- src/test/java/blackJack/domain/DeckTest.java | 19 +++++------ 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/src/main/java/blackJack/domain/Deck.java b/src/main/java/blackJack/domain/Deck.java index f115c4cd..7285991c 100644 --- a/src/main/java/blackJack/domain/Deck.java +++ b/src/main/java/blackJack/domain/Deck.java @@ -6,10 +6,11 @@ public class Deck { - private final List deck; private static final int ACE_BONUS_SCORE = 11; public static final int MATCH_SCORE = 21; + private final List deck; + private Deck() { this.deck = new ArrayList<>(); } @@ -26,12 +27,10 @@ public static Deck from(List deck) { return new Deck(deck); } - public void append(Card card) { - deck.add(card); - } - - public List getDeck() { - return deck; + public String convertDeckFormat() { + return deck.stream() + .map(card -> String.format("%s%s", card.getCardNumber(), card.getCardType())) + .collect(Collectors.joining(", ")); } public int getScore() { @@ -41,24 +40,18 @@ public int getScore() { return calculateAceScore(score, aceCount); } - public String convertDeckFormat() { - return deck.stream() - .map(card -> String.format("%s%s", card.getCardNumber(), card.getCardType())) - .collect(Collectors.joining(", ")); + private int calculateAceCount() { + return (int) deck.stream() + .filter(Card::isAce) + .count(); } private int calculateDefaultScore() { return deck.stream() - .mapToInt(Card::calculateCardScore) + .mapToInt(Card::getCardScore) .sum(); } - private int calculateAceCount() { - return (int) deck.stream() - .filter(card -> "A".equals(card.getCardNumber())) - .count(); - } - private int calculateAceScore(int score, int count) { int resultScore = score; for (int i = 0; i < count; i++) { @@ -69,4 +62,8 @@ private int calculateAceScore(int score, int count) { } return resultScore; } + + public List getDeck() { + return deck; + } } diff --git a/src/main/java/blackJack/domain/User.java b/src/main/java/blackJack/domain/User.java index e17fa7e8..8c8d1fcc 100644 --- a/src/main/java/blackJack/domain/User.java +++ b/src/main/java/blackJack/domain/User.java @@ -21,11 +21,11 @@ public String getName() { } public void appendToDeck(Card card) { - deck.append(card); + deck.getDeck().add(card); } public void appendToDeck(List cards) { - cards.forEach(deck::append); + cards.forEach(card -> deck.getDeck().add(card)); } public String convertStatus() { diff --git a/src/test/java/blackJack/domain/DeckTest.java b/src/test/java/blackJack/domain/DeckTest.java index 1d4a42f9..8f83ebea 100644 --- a/src/test/java/blackJack/domain/DeckTest.java +++ b/src/test/java/blackJack/domain/DeckTest.java @@ -4,6 +4,7 @@ import static org.junit.jupiter.params.provider.Arguments.arguments; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.DisplayName; @@ -19,16 +20,16 @@ class DeckTest { void Card의_배열을_가지고_있다() { Deck deck = Deck.create(); Card card = Card.of("스페이드", "3"); - deck.append(card); - assertThat(deck.getDeck()).isEqualTo(Arrays.asList(card)); + deck.getDeck().add(card); + assertThat(deck.getDeck()).isEqualTo(Collections.singletonList(card)); } static Stream generateNormalDeck() { return Stream.of( - arguments(Arrays.asList(Card.of("다이아몬드", "3")), 3), - arguments(Arrays.asList(Card.of("다이아몬드", "9")), 9), - arguments(Arrays.asList(Card.of("스페이드", "10")), 10) + arguments(Collections.singletonList(Card.of("다이아몬드", "3")), 3), + arguments(Collections.singletonList(Card.of("다이아몬드", "9")), 9), + arguments(Collections.singletonList(Card.of("스페이드", "10")), 10) ); } @@ -43,9 +44,9 @@ static Stream generateNormalDeck() { static Stream generateCharTypeDeck() { return Stream.of( - arguments(Arrays.asList(Card.of("다이아몬드", "J")), 10), - arguments(Arrays.asList(Card.of("스페이드", "Q")), 10), - arguments(Arrays.asList(Card.of("하트", "K")), 10) + arguments(Collections.singletonList(Card.of("다이아몬드", "J")), 10), + arguments(Collections.singletonList(Card.of("스페이드", "Q")), 10), + arguments(Collections.singletonList(Card.of("하트", "K")), 10) ); } @@ -60,7 +61,7 @@ static Stream generateCharTypeDeck() { static Stream generateAceDeck() { return Stream.of( - arguments(Arrays.asList(Card.of("다이아몬드", "3")), 3), + arguments(Collections.singletonList(Card.of("다이아몬드", "3")), 3), arguments(Arrays.asList( Card.of("하트", "3"), Card.of("스페이드", "A"), From c82c962163c0a89435787ac30b0863aaaeded596 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Mon, 21 Feb 2022 23:38:26 +0900 Subject: [PATCH 112/115] =?UTF-8?q?refactor=20:=20Card=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Card의 score 계산 로직 Card로 이동 --- src/main/java/blackJack/domain/Card.java | 25 +++++---------- .../java/blackJack/domain/CardNumber.java | 17 ++++++++++ .../java/blackJack/domain/CardNumberTest.java | 31 ++++++++++++++++--- src/test/java/blackJack/domain/CardTest.java | 19 +++++++++++- 4 files changed, 69 insertions(+), 23 deletions(-) diff --git a/src/main/java/blackJack/domain/Card.java b/src/main/java/blackJack/domain/Card.java index eb350e27..214747f1 100644 --- a/src/main/java/blackJack/domain/Card.java +++ b/src/main/java/blackJack/domain/Card.java @@ -2,10 +2,6 @@ public class Card { - private static final String JQK_REGEX = "[JQK]"; - private static final int JQK_SCORE = 10; - private static final int ACE_SCORE = 1; - private final CardType cardType; private final CardNumber cardNumber; @@ -18,6 +14,14 @@ public static Card of(String cardType, String cardNumber) { return new Card(cardType, cardNumber); } + public boolean isAce() { + return cardNumber.getNumber().equals(TrumpNumber.ACE.getTrumpNumber()); + } + + public int getCardScore() { + return cardNumber.calculateScore(); + } + public String getCardType() { return cardType.getType(); } @@ -25,18 +29,5 @@ public String getCardType() { public String getCardNumber() { return cardNumber.getNumber(); } - - public int calculateCardScore() { - String number = cardNumber.getNumber(); - - if (number.matches(JQK_REGEX)) { - return JQK_SCORE; - } - if (number.equals(TrumpNumber.ACE.getTrumpNumber())) { - return ACE_SCORE; - } - - return Integer.parseInt(number); - } } diff --git a/src/main/java/blackJack/domain/CardNumber.java b/src/main/java/blackJack/domain/CardNumber.java index 02507307..bd6193b6 100644 --- a/src/main/java/blackJack/domain/CardNumber.java +++ b/src/main/java/blackJack/domain/CardNumber.java @@ -2,6 +2,10 @@ public class CardNumber { + private static final String JQK_REGEX = "[JQK]"; + private static final int JQK_SCORE = 10; + private static final int ACE_SCORE = 1; + private final TrumpNumber trumpNumber; private CardNumber(String cardNumber) { @@ -15,4 +19,17 @@ public static CardNumber from(String cardNumber) { public String getNumber() { return trumpNumber.getTrumpNumber(); } + + public int calculateScore() { + String number = trumpNumber.getTrumpNumber(); + + if (number.matches(JQK_REGEX)) { + return JQK_SCORE; + } + if (number.equals(TrumpNumber.ACE.getTrumpNumber())) { + return ACE_SCORE; + } + + return Integer.parseInt(number); + } } diff --git a/src/test/java/blackJack/domain/CardNumberTest.java b/src/test/java/blackJack/domain/CardNumberTest.java index 4c000fc1..dc246ab0 100644 --- a/src/test/java/blackJack/domain/CardNumberTest.java +++ b/src/test/java/blackJack/domain/CardNumberTest.java @@ -3,8 +3,11 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import java.util.stream.Stream; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; class CardNumberTest { @@ -15,17 +18,35 @@ class CardNumberTest { void givenNumberWithString_WhenGetCardNumber_ThenEqualToGivenNumber(String number) { CardNumber cardNumber = CardNumber.from(number); - assertThat(cardNumber.getNumber()) - .isEqualTo(number); + assertThat(cardNumber.getNumber()).isEqualTo(number); } @DisplayName("유효하지 않는 CardNumber 범위로 인스턴스가 생성될때, RuntimeException 발생한다.") @ParameterizedTest @ValueSource(strings = {"1", "11", "12", "13", "B"}) - void givenInValidCardNumberRange_WhenCreateInstance_ThenThrowRuntimeException( - String number) { + void givenInValidCardNumberRange_WhenCreateInstance_ThenThrowRuntimeException(String number) { assertThatThrownBy(() -> CardNumber.from(number)) .isInstanceOf(RuntimeException.class); + } + + static Stream generateCardTypeAndAceNumber() { + return Stream.of( + Arguments.of("A", 1), + Arguments.of("3", 3), + Arguments.of("4", 4), + Arguments.of("5", 5), + Arguments.of("6", 6), + Arguments.of("J", 10), + Arguments.of("Q", 10), + Arguments.of("K", 10) + ); + } + + @ParameterizedTest + @MethodSource("generateCardTypeAndAceNumber") + void 스코어를_계산할_수_있다(String cardType, int score) { + CardNumber cardNumber = CardNumber.from(cardType); + assertThat(cardNumber.calculateScore()).isEqualTo(score); } -} \ No newline at end of file +} diff --git a/src/test/java/blackJack/domain/CardTest.java b/src/test/java/blackJack/domain/CardTest.java index fb827ad5..edd2647c 100644 --- a/src/test/java/blackJack/domain/CardTest.java +++ b/src/test/java/blackJack/domain/CardTest.java @@ -34,4 +34,21 @@ void givenNumberWithStringAndTypeWithString_WhenGetCardNumberAndGetCardType_Then Arrays.asList(card.getCardType(), card.getCardNumber())) .isEqualTo(cardParameter); } -} \ No newline at end of file + + static Stream generateCardTypeAndAceNumber() { + return Stream.of( + Arguments.of(Arrays.asList("다이아몬드", "A")), + Arguments.of(Arrays.asList("하트", "A")), + Arguments.of(Arrays.asList("클로버", "A")), + Arguments.of(Arrays.asList("스페이드", "A")), + Arguments.of(Arrays.asList("클로버", "A")) + ); + } + + @ParameterizedTest + @MethodSource("generateCardTypeAndAceNumber") + void 에이스일결우_isAce가_참이다(List cardParameter) { + Card card = Card.of(cardParameter.get(0), cardParameter.get(1)); + assertThat(card.isAce()).isTrue(); + } +} From 2f3bfd534177ac302dd63850f6c85bae73fec6af Mon Sep 17 00:00:00 2001 From: chanu94 Date: Mon, 21 Feb 2022 23:39:42 +0900 Subject: [PATCH 113/115] =?UTF-8?q?refactor=20:=20Dealer,=20Player=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - draw 여부 로직 이동 --- .../java/blackJack/domain/DealerTest.java | 18 ++++++++++++++++ .../java/blackJack/domain/PlayerTest.java | 21 ++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/test/java/blackJack/domain/DealerTest.java b/src/test/java/blackJack/domain/DealerTest.java index 327c0897..cf20c00a 100644 --- a/src/test/java/blackJack/domain/DealerTest.java +++ b/src/test/java/blackJack/domain/DealerTest.java @@ -28,4 +28,22 @@ void givenDealerParameter_WhenAppendToDeck_ThenEqualToCardList() { assertThat(dealer.getDeck()) .isEqualTo(Arrays.asList(card)); } + + @Test + void 기준값_이하일경우_isCardDraw가_참이다() { + Dealer dealer = Dealer.create(); + dealer.appendToDeck(Card.of("다이아몬드", "10")); + dealer.appendToDeck(Card.of("하트", "5")); + + assertThat(dealer.isCardDraw()).isTrue(); + } + + @Test + void 기준값_이상일경우_isCardDraw가_거짓이다() { + Dealer dealer = Dealer.create(); + dealer.appendToDeck(Card.of("다이아몬드", "10")); + dealer.appendToDeck(Card.of("하트", "10")); + + assertThat(dealer.isCardDraw()).isFalse(); + } } diff --git a/src/test/java/blackJack/domain/PlayerTest.java b/src/test/java/blackJack/domain/PlayerTest.java index 8540f814..d720cd27 100644 --- a/src/test/java/blackJack/domain/PlayerTest.java +++ b/src/test/java/blackJack/domain/PlayerTest.java @@ -31,4 +31,23 @@ void givenPlayerParameter_WhenAppendToDeck_ThenEqualToCardList() { assertThat(player.getDeck()) .isEqualTo(Arrays.asList(card)); } -} \ No newline at end of file + + @Test + void 기준값_이하일경우_isCardDraw가_참이다() { + Dealer dealer = Dealer.create(); + dealer.appendToDeck(Card.of("다이아몬드", "10")); + dealer.appendToDeck(Card.of("하트", "5")); + + assertThat(dealer.isCardDraw()).isTrue(); + } + + @Test + void 기준값_이상일경우_isCardDraw가_거짓이다() { + Dealer dealer = Dealer.create(); + dealer.appendToDeck(Card.of("다이아몬드", "10")); + dealer.appendToDeck(Card.of("하트", "10")); + dealer.appendToDeck(Card.of("스페이드", "3")); + + assertThat(dealer.isCardDraw()).isFalse(); + } +} From d2ece34d94efb1324c8a54f6ad671bea6fbaa934 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Mon, 21 Feb 2022 23:39:59 +0900 Subject: [PATCH 114/115] =?UTF-8?q?refactor=20:=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackJack/util/Util.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main/java/blackJack/util/Util.java b/src/main/java/blackJack/util/Util.java index 6c8f3cd7..d7e9bbb3 100644 --- a/src/main/java/blackJack/util/Util.java +++ b/src/main/java/blackJack/util/Util.java @@ -5,15 +5,6 @@ public class Util { - public static boolean isNumber(String number) { - try { - Integer.parseInt(number); - } catch (NumberFormatException e) { - return false; - } - return true; - } - public static List stringToStringList(String unrefinedString) { return Arrays.asList(unrefinedString.split(", ")); } From d7e3befed384efa1cdd581d0e476ef1e82e4bec0 Mon Sep 17 00:00:00 2001 From: chanu94 Date: Tue, 22 Feb 2022 01:29:49 +0900 Subject: [PATCH 115/115] =?UTF-8?q?refactor=20:=20View=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20Controller=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 --- src/main/java/blackJack/controller/Game.java | 31 +++++++++++- src/main/java/blackJack/domain/BlackJack.java | 48 ++++++------------- .../java/blackJack/domain/BlackJackTest.java | 9 ++-- 3 files changed, 48 insertions(+), 40 deletions(-) diff --git a/src/main/java/blackJack/controller/Game.java b/src/main/java/blackJack/controller/Game.java index 02a6f593..6e176b81 100644 --- a/src/main/java/blackJack/controller/Game.java +++ b/src/main/java/blackJack/controller/Game.java @@ -1,6 +1,7 @@ package blackJack.controller; import blackJack.domain.BlackJack; +import blackJack.domain.Player; import blackJack.domain.UserStats; import blackJack.util.Util; import blackJack.view.InputView; @@ -36,8 +37,34 @@ private void init() { } private void goPhase() { - blackJack.playerPhase(); - blackJack.dealerPhase(); + playerPhase(); + dealerPhase(); + } + + private void playerPhase() { + for (Player player : blackJack.getGamePlayers()) { + useTurn(player); + } + } + + private void useTurn(Player player) { + while (player.isCardDraw()) { + OutputView.printRequestAdditionalCardDrawFormat(player); + if (InputView.readYN()) { + player.appendToDeck(blackJack.drawGameCard()); + OutputView.printPlayerStatus(player); + continue; + } + OutputView.printPlayerStatus(player); + break; + } + } + + private void dealerPhase() { + if (blackJack.getGameDealer().isCardDraw()) { + blackJack.getGameDealer().additionalCardDraw(blackJack.drawGameCard()); + OutputView.printDealerAdditionalCardDraw(); + } } private void summarize() { diff --git a/src/main/java/blackJack/domain/BlackJack.java b/src/main/java/blackJack/domain/BlackJack.java index 5f457e1c..dd5a6151 100644 --- a/src/main/java/blackJack/domain/BlackJack.java +++ b/src/main/java/blackJack/domain/BlackJack.java @@ -1,7 +1,5 @@ package blackJack.domain; -import blackJack.view.InputView; -import blackJack.view.OutputView; import java.util.List; public class BlackJack { @@ -21,18 +19,6 @@ public static BlackJack from(List userNames) { return new BlackJack(userNames); } - public GameUser getGameUser() { - return gameUser; - } - - public List getPlayers() { - return gameUser.getPlayers(); - } - - public List getGameCard() { - return gameCard.getGameCard(); - } - private void cardShuffle() { gameCard.shuffle(); } @@ -51,29 +37,23 @@ private void initPlayerDraw() { .forEach(player -> player.appendToDeck(gameCard.drawCard(INITIAL_DRAW_CARD_COUNT))); } - public void dealerPhase() { - if (gameUser.getDealer().isCardDraw()) { - gameUser.getDealer().additionalCardDraw(gameCard.drawCard()); - OutputView.printDealerAdditionalCardDraw(); - } + public GameUser getGameUser() { + return gameUser; + } + + public GameCard getGameCard() { + return gameCard; + } + + public List getGamePlayers() { + return gameUser.getPlayers(); } - public void playerPhase() { - for (Player player : gameUser.getPlayers()) { - useTurn(player); - } + public Dealer getGameDealer() { + return gameUser.getDealer(); } - private void useTurn(Player player) { - while (player.isCardDraw()) { - OutputView.printRequestAdditionalCardDrawFormat(player); - if (InputView.readYN()) { - player.appendToDeck(gameCard.drawCard()); - OutputView.printPlayerStatus(player); - continue; - } - OutputView.printPlayerStatus(player); - break; - } + public Card drawGameCard() { + return gameCard.drawCard(); } } diff --git a/src/test/java/blackJack/domain/BlackJackTest.java b/src/test/java/blackJack/domain/BlackJackTest.java index 3af26976..f532a7e9 100644 --- a/src/test/java/blackJack/domain/BlackJackTest.java +++ b/src/test/java/blackJack/domain/BlackJackTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import org.junit.jupiter.api.Test; @@ -17,7 +18,7 @@ class BlackJackTest { BlackJack blackJack = BlackJack.from(userNames); GameUser gameUser = GameUser.from(userNames); - List blackJackUserNames = blackJack.getPlayers().stream() + List blackJackUserNames = blackJack.getGamePlayers().stream() .map(Player::getName) .collect(Collectors.toList()); @@ -31,14 +32,14 @@ class BlackJackTest { @Test void GameCard를_가진다() { - BlackJack blackJack = BlackJack.from(Arrays.asList()); + BlackJack blackJack = BlackJack.from(Collections.emptyList()); - assertThat(blackJack.getGameCard().size()).isEqualTo(GAME_CARD_SIZE); + assertThat(blackJack.getGameCard().getGameCard().size()).isEqualTo(GAME_CARD_SIZE); } @Test void GameCard를_섞을_수_있다() { - BlackJack blackJack = BlackJack.from(Arrays.asList()); + BlackJack blackJack = BlackJack.from(Collections.emptyList()); GameCard gameCard = GameCard.create(); assertThat(blackJack.getGameCard()).isNotEqualTo(gameCard.getGameCard());