From b352cedec28a72f92898ecba64d6e92e963a188c Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Fri, 24 May 2024 17:47:43 +0900 Subject: [PATCH 01/24] =?UTF-8?q?feat(RentCompanyTest):=20=EC=8A=A4?= =?UTF-8?q?=EC=BC=88=EB=A0=88=ED=86=A4=20=EC=BD=94=EB=93=9C=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 --- src/main/java/fuel/RentCompany.java | 18 +++++++++++ src/main/java/fuel/domain/Car.java | 5 +++ .../java/fuel/domain/concreate/Avante.java | 9 ++++++ src/main/java/fuel/domain/concreate/K5.java | 9 ++++++ .../java/fuel/domain/concreate/Sonata.java | 8 +++++ src/test/java/fuel/RentCompanyTest.java | 31 +++++++++++++++++++ 6 files changed, 80 insertions(+) create mode 100644 src/main/java/fuel/RentCompany.java create mode 100644 src/main/java/fuel/domain/Car.java create mode 100644 src/main/java/fuel/domain/concreate/Avante.java create mode 100644 src/main/java/fuel/domain/concreate/K5.java create mode 100644 src/main/java/fuel/domain/concreate/Sonata.java create mode 100644 src/test/java/fuel/RentCompanyTest.java diff --git a/src/main/java/fuel/RentCompany.java b/src/main/java/fuel/RentCompany.java new file mode 100644 index 00000000..e4e0db62 --- /dev/null +++ b/src/main/java/fuel/RentCompany.java @@ -0,0 +1,18 @@ +package fuel; + +import fuel.domain.Car; + +public class RentCompany { + + public static RentCompany create() { + return null; + } + + public void addCar(Car car) { + + } + + public String generateReport() { + return null; + } +} diff --git a/src/main/java/fuel/domain/Car.java b/src/main/java/fuel/domain/Car.java new file mode 100644 index 00000000..519c7365 --- /dev/null +++ b/src/main/java/fuel/domain/Car.java @@ -0,0 +1,5 @@ +package fuel.domain; + +public interface Car { + +} diff --git a/src/main/java/fuel/domain/concreate/Avante.java b/src/main/java/fuel/domain/concreate/Avante.java new file mode 100644 index 00000000..195fcf6d --- /dev/null +++ b/src/main/java/fuel/domain/concreate/Avante.java @@ -0,0 +1,9 @@ +package fuel.domain.concreate; + +import fuel.domain.Car; + +public class Avante implements Car { + public Avante(int i) { + + } +} diff --git a/src/main/java/fuel/domain/concreate/K5.java b/src/main/java/fuel/domain/concreate/K5.java new file mode 100644 index 00000000..ab44821b --- /dev/null +++ b/src/main/java/fuel/domain/concreate/K5.java @@ -0,0 +1,9 @@ +package fuel.domain.concreate; + +import fuel.domain.Car; + +public class K5 implements Car { + public K5(int i) { + + } +} diff --git a/src/main/java/fuel/domain/concreate/Sonata.java b/src/main/java/fuel/domain/concreate/Sonata.java new file mode 100644 index 00000000..dbc9845c --- /dev/null +++ b/src/main/java/fuel/domain/concreate/Sonata.java @@ -0,0 +1,8 @@ +package fuel.domain.concreate; + +import fuel.domain.Car; + +public class Sonata implements Car { + public Sonata(int i) { + } +} diff --git a/src/test/java/fuel/RentCompanyTest.java b/src/test/java/fuel/RentCompanyTest.java new file mode 100644 index 00000000..b4b393df --- /dev/null +++ b/src/test/java/fuel/RentCompanyTest.java @@ -0,0 +1,31 @@ +package fuel; + +import fuel.domain.concreate.Avante; +import fuel.domain.concreate.K5; +import fuel.domain.concreate.Sonata; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +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 6d2e74800fd7455bc79fa8f9f310e5527266734f Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Sat, 25 May 2024 15:45:47 +0900 Subject: [PATCH 02/24] =?UTF-8?q?feat(RentCompany):=20Car=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EB=B0=8F=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=EC=B2=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/fuel/RentCompany.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/fuel/RentCompany.java b/src/main/java/fuel/RentCompany.java index e4e0db62..71b87c80 100644 --- a/src/main/java/fuel/RentCompany.java +++ b/src/main/java/fuel/RentCompany.java @@ -3,16 +3,20 @@ import fuel.domain.Car; public class RentCompany { + private static final String NEWLINE = "\n"; + public RentCompany(){} public static RentCompany create() { - return null; + return new RentCompany(); } - public void addCar(Car car) { } - public String generateReport() { - return null; + return "Sonata : 15리터" + NEWLINE + + "K5 : 20리터" + NEWLINE + + "Sonata : 12리터" + NEWLINE + + "Avante : 20리터" + NEWLINE + + "K5 : 30리터" + NEWLINE; } } From 6dfa8b56e80f66dc3f7ddaebfd757898faa9d1aa Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Sat, 25 May 2024 20:02:09 +0900 Subject: [PATCH 03/24] =?UTF-8?q?refactor(Car):=20Car=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=EC=B2=B4=EB=93=A4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/fuel/RentCompany.java | 6 ++++- src/main/java/fuel/domain/Car.java | 24 +++++++++++++++++-- .../java/fuel/domain/concreate/Avante.java | 23 +++++++++++++++--- src/main/java/fuel/domain/concreate/K5.java | 21 ++++++++++++++-- .../java/fuel/domain/concreate/Sonata.java | 22 +++++++++++++++-- src/test/java/fuel/RentCompanyTest.java | 2 ++ 6 files changed, 88 insertions(+), 10 deletions(-) diff --git a/src/main/java/fuel/RentCompany.java b/src/main/java/fuel/RentCompany.java index 71b87c80..bc78688e 100644 --- a/src/main/java/fuel/RentCompany.java +++ b/src/main/java/fuel/RentCompany.java @@ -2,7 +2,11 @@ import fuel.domain.Car; +import java.util.ArrayList; +import java.util.List; + public class RentCompany { + private List carList = new ArrayList<>(); private static final String NEWLINE = "\n"; public RentCompany(){} @@ -10,7 +14,7 @@ public static RentCompany create() { return new RentCompany(); } public void addCar(Car car) { - + carList.add(car); } public String generateReport() { return "Sonata : 15리터" + NEWLINE + diff --git a/src/main/java/fuel/domain/Car.java b/src/main/java/fuel/domain/Car.java index 519c7365..bc6d1ab6 100644 --- a/src/main/java/fuel/domain/Car.java +++ b/src/main/java/fuel/domain/Car.java @@ -1,5 +1,25 @@ package fuel.domain; -public interface Car { +public abstract class Car { + /** + * 리터당 이동 거리. 즉, 연비 + */ + protected abstract double getDistancePerLiter(); -} + /** + * 여행하려는 거리 + */ + protected abstract double getTripDistance(); + + /** + * 차종의 이름 + */ + protected abstract String getName(); + + /** + * 주입해야할 연료량을 구한다. + */ + double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } +} \ No newline at end of file diff --git a/src/main/java/fuel/domain/concreate/Avante.java b/src/main/java/fuel/domain/concreate/Avante.java index 195fcf6d..ff66fcfc 100644 --- a/src/main/java/fuel/domain/concreate/Avante.java +++ b/src/main/java/fuel/domain/concreate/Avante.java @@ -2,8 +2,25 @@ import fuel.domain.Car; -public class Avante implements Car { - public Avante(int i) { - +public class Avante extends Car { + private final int distance; + + public Avante(int distance) { + this.distance = distance; + } + + @Override + protected double getDistancePerLiter() { + return 0; + } + + @Override + protected double getTripDistance() { + return 0; + } + + @Override + protected String getName() { + return null; } } diff --git a/src/main/java/fuel/domain/concreate/K5.java b/src/main/java/fuel/domain/concreate/K5.java index ab44821b..34b3f4b2 100644 --- a/src/main/java/fuel/domain/concreate/K5.java +++ b/src/main/java/fuel/domain/concreate/K5.java @@ -2,8 +2,25 @@ import fuel.domain.Car; -public class K5 implements Car { - public K5(int i) { +public class K5 extends Car { + private final int distance; + public K5(int distance) { + this.distance = distance; + } + + @Override + protected double getDistancePerLiter() { + return 0; + } + + @Override + protected double getTripDistance() { + return 0; + } + + @Override + protected String getName() { + return null; } } diff --git a/src/main/java/fuel/domain/concreate/Sonata.java b/src/main/java/fuel/domain/concreate/Sonata.java index dbc9845c..da0dc52c 100644 --- a/src/main/java/fuel/domain/concreate/Sonata.java +++ b/src/main/java/fuel/domain/concreate/Sonata.java @@ -2,7 +2,25 @@ import fuel.domain.Car; -public class Sonata implements Car { - public Sonata(int i) { +public class Sonata extends Car { + private final int distance; + + public Sonata(int distance) { + this.distance = distance; + } + + @Override + protected double getDistancePerLiter() { + return 0; + } + + @Override + protected double getTripDistance() { + return 0; + } + + @Override + protected String getName() { + return null; } } diff --git a/src/test/java/fuel/RentCompanyTest.java b/src/test/java/fuel/RentCompanyTest.java index b4b393df..8019e0c6 100644 --- a/src/test/java/fuel/RentCompanyTest.java +++ b/src/test/java/fuel/RentCompanyTest.java @@ -28,4 +28,6 @@ public void report() throws Exception { "K5 : 30리터" + NEWLINE ); } + + } From 8a4064c4bd33e3fc4ddeb1573993ab475417f513 Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Mon, 27 May 2024 14:42:40 +0900 Subject: [PATCH 04/24] =?UTF-8?q?feat(RentCompany):=20=EC=B0=A8=EB=9F=89?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=97=B0=EB=A3=8C=20=EC=A3=BC?= =?UTF-8?q?=EC=9E=85=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/fuel/{ => domain}/RentCompany.java | 18 ++++++++++-------- .../java/fuel/domain/concreate/Avante.java | 14 ++++++++------ src/main/java/fuel/domain/concreate/K5.java | 14 ++++++++------ .../java/fuel/domain/concreate/Sonata.java | 14 ++++++++------ src/test/java/fuel/RentCompanyTest.java | 3 ++- 5 files changed, 36 insertions(+), 27 deletions(-) rename src/main/java/fuel/{ => domain}/RentCompany.java (55%) diff --git a/src/main/java/fuel/RentCompany.java b/src/main/java/fuel/domain/RentCompany.java similarity index 55% rename from src/main/java/fuel/RentCompany.java rename to src/main/java/fuel/domain/RentCompany.java index bc78688e..981db2e1 100644 --- a/src/main/java/fuel/RentCompany.java +++ b/src/main/java/fuel/domain/RentCompany.java @@ -1,9 +1,8 @@ -package fuel; - -import fuel.domain.Car; +package fuel.domain; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class RentCompany { private List carList = new ArrayList<>(); @@ -16,11 +15,14 @@ public static RentCompany create() { public void addCar(Car car) { carList.add(car); } + public String generateReport() { - return "Sonata : 15리터" + NEWLINE + - "K5 : 20리터" + NEWLINE + - "Sonata : 12리터" + NEWLINE + - "Avante : 20리터" + NEWLINE + - "K5 : 30리터" + NEWLINE; + return carList.stream() + .map(this::stringFormat) + .collect(Collectors.joining("\n")); + } + + private String stringFormat(Car car) { + return String.format("%s : %d리터", car.getName(), (int) car.getChargeQuantity()); } } diff --git a/src/main/java/fuel/domain/concreate/Avante.java b/src/main/java/fuel/domain/concreate/Avante.java index ff66fcfc..36a0cf01 100644 --- a/src/main/java/fuel/domain/concreate/Avante.java +++ b/src/main/java/fuel/domain/concreate/Avante.java @@ -3,24 +3,26 @@ import fuel.domain.Car; public class Avante extends Car { - private final int distance; + private final int tripDistance; + public static final String CAR_NAME = "Avante"; + public static final int DISTANCE_PER_LITER = 15; - public Avante(int distance) { - this.distance = distance; + public Avante(int tripDistance) { + this.tripDistance = tripDistance; } @Override protected double getDistancePerLiter() { - return 0; + return DISTANCE_PER_LITER; } @Override protected double getTripDistance() { - return 0; + return tripDistance; } @Override protected String getName() { - return null; + return CAR_NAME; } } diff --git a/src/main/java/fuel/domain/concreate/K5.java b/src/main/java/fuel/domain/concreate/K5.java index 34b3f4b2..f3f81b5b 100644 --- a/src/main/java/fuel/domain/concreate/K5.java +++ b/src/main/java/fuel/domain/concreate/K5.java @@ -3,24 +3,26 @@ import fuel.domain.Car; public class K5 extends Car { - private final int distance; + private final int tripDistance; + public static final int DISTANCE_PER_LITER = 13; + public static final String CAR_NAME = "K5"; - public K5(int distance) { - this.distance = distance; + public K5(int tripDistance) { + this.tripDistance = tripDistance; } @Override protected double getDistancePerLiter() { - return 0; + return DISTANCE_PER_LITER; } @Override protected double getTripDistance() { - return 0; + return tripDistance; } @Override protected String getName() { - return null; + return CAR_NAME; } } diff --git a/src/main/java/fuel/domain/concreate/Sonata.java b/src/main/java/fuel/domain/concreate/Sonata.java index da0dc52c..47522937 100644 --- a/src/main/java/fuel/domain/concreate/Sonata.java +++ b/src/main/java/fuel/domain/concreate/Sonata.java @@ -3,24 +3,26 @@ import fuel.domain.Car; public class Sonata extends Car { - private final int distance; + private final int tripDistance; + public static final int DISTANCE_PER_LITER = 10; + public static final String CAR_NAME = "Sonata"; - public Sonata(int distance) { - this.distance = distance; + public Sonata(int tripDistance) { + this.tripDistance = tripDistance; } @Override protected double getDistancePerLiter() { - return 0; + return DISTANCE_PER_LITER; } @Override protected double getTripDistance() { - return 0; + return tripDistance; } @Override protected String getName() { - return null; + return CAR_NAME; } } diff --git a/src/test/java/fuel/RentCompanyTest.java b/src/test/java/fuel/RentCompanyTest.java index 8019e0c6..81f2ac05 100644 --- a/src/test/java/fuel/RentCompanyTest.java +++ b/src/test/java/fuel/RentCompanyTest.java @@ -1,5 +1,6 @@ package fuel; +import fuel.domain.RentCompany; import fuel.domain.concreate.Avante; import fuel.domain.concreate.K5; import fuel.domain.concreate.Sonata; @@ -25,7 +26,7 @@ public void report() throws Exception { "K5 : 20리터" + NEWLINE + "Sonata : 12리터" + NEWLINE + "Avante : 20리터" + NEWLINE + - "K5 : 30리터" + NEWLINE + "K5 : 30리터" ); } From ebff611ef6f0965ded6adaf610bcb69d2197804e Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Mon, 27 May 2024 14:45:04 +0900 Subject: [PATCH 05/24] =?UTF-8?q?refactor(package):=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=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/fuel/{domain => }/Car.java | 0 src/main/java/fuel/{domain => }/RentCompany.java | 0 src/main/java/fuel/domain/{concreate => }/Avante.java | 0 src/main/java/fuel/domain/{concreate => }/K5.java | 0 src/main/java/fuel/domain/{concreate => }/Sonata.java | 2 +- 5 files changed, 1 insertion(+), 1 deletion(-) rename src/main/java/fuel/{domain => }/Car.java (100%) rename src/main/java/fuel/{domain => }/RentCompany.java (100%) rename src/main/java/fuel/domain/{concreate => }/Avante.java (100%) rename src/main/java/fuel/domain/{concreate => }/K5.java (100%) rename src/main/java/fuel/domain/{concreate => }/Sonata.java (94%) diff --git a/src/main/java/fuel/domain/Car.java b/src/main/java/fuel/Car.java similarity index 100% rename from src/main/java/fuel/domain/Car.java rename to src/main/java/fuel/Car.java diff --git a/src/main/java/fuel/domain/RentCompany.java b/src/main/java/fuel/RentCompany.java similarity index 100% rename from src/main/java/fuel/domain/RentCompany.java rename to src/main/java/fuel/RentCompany.java diff --git a/src/main/java/fuel/domain/concreate/Avante.java b/src/main/java/fuel/domain/Avante.java similarity index 100% rename from src/main/java/fuel/domain/concreate/Avante.java rename to src/main/java/fuel/domain/Avante.java diff --git a/src/main/java/fuel/domain/concreate/K5.java b/src/main/java/fuel/domain/K5.java similarity index 100% rename from src/main/java/fuel/domain/concreate/K5.java rename to src/main/java/fuel/domain/K5.java diff --git a/src/main/java/fuel/domain/concreate/Sonata.java b/src/main/java/fuel/domain/Sonata.java similarity index 94% rename from src/main/java/fuel/domain/concreate/Sonata.java rename to src/main/java/fuel/domain/Sonata.java index 47522937..1c9b12e1 100644 --- a/src/main/java/fuel/domain/concreate/Sonata.java +++ b/src/main/java/fuel/domain/Sonata.java @@ -1,4 +1,4 @@ -package fuel.domain.concreate; +package fuel; import fuel.domain.Car; From 36a3fb3c6a869e64abfd546005ec8ab8c467a847 Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Mon, 27 May 2024 14:58:41 +0900 Subject: [PATCH 06/24] =?UTF-8?q?feat(=EC=97=B0=EB=A3=8C=EC=A3=BC=EC=9E=85?= =?UTF-8?q?):=20=EC=B0=A8=EB=9F=89=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?=EC=97=B0=EB=A3=8C=20=EC=A3=BC=EC=9E=85=20=EC=8B=A4=EC=8A=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/fuel/Car.java | 2 +- src/main/java/fuel/RentCompany.java | 4 ++-- src/main/java/fuel/domain/Avante.java | 4 ++-- src/main/java/fuel/domain/K5.java | 4 ++-- src/main/java/fuel/domain/Sonata.java | 4 ++-- src/test/java/fuel/RentCompanyTest.java | 7 +++---- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main/java/fuel/Car.java b/src/main/java/fuel/Car.java index bc6d1ab6..ac74ad3b 100644 --- a/src/main/java/fuel/Car.java +++ b/src/main/java/fuel/Car.java @@ -1,4 +1,4 @@ -package fuel.domain; +package fuel; public abstract class Car { /** diff --git a/src/main/java/fuel/RentCompany.java b/src/main/java/fuel/RentCompany.java index 981db2e1..7f0d6cf7 100644 --- a/src/main/java/fuel/RentCompany.java +++ b/src/main/java/fuel/RentCompany.java @@ -1,4 +1,4 @@ -package fuel.domain; +package fuel; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ public void addCar(Car car) { public String generateReport() { return carList.stream() .map(this::stringFormat) - .collect(Collectors.joining("\n")); + .collect(Collectors.joining(NEWLINE)); } private String stringFormat(Car car) { diff --git a/src/main/java/fuel/domain/Avante.java b/src/main/java/fuel/domain/Avante.java index 36a0cf01..3839acec 100644 --- a/src/main/java/fuel/domain/Avante.java +++ b/src/main/java/fuel/domain/Avante.java @@ -1,6 +1,6 @@ -package fuel.domain.concreate; +package fuel.domain; -import fuel.domain.Car; +import fuel.Car; public class Avante extends Car { private final int tripDistance; diff --git a/src/main/java/fuel/domain/K5.java b/src/main/java/fuel/domain/K5.java index f3f81b5b..61779fff 100644 --- a/src/main/java/fuel/domain/K5.java +++ b/src/main/java/fuel/domain/K5.java @@ -1,6 +1,6 @@ -package fuel.domain.concreate; +package fuel.domain; -import fuel.domain.Car; +import fuel.Car; public class K5 extends Car { private final int tripDistance; diff --git a/src/main/java/fuel/domain/Sonata.java b/src/main/java/fuel/domain/Sonata.java index 1c9b12e1..fbc716d4 100644 --- a/src/main/java/fuel/domain/Sonata.java +++ b/src/main/java/fuel/domain/Sonata.java @@ -1,6 +1,6 @@ -package fuel; +package fuel.domain; -import fuel.domain.Car; +import fuel.Car; public class Sonata extends Car { private final int tripDistance; diff --git a/src/test/java/fuel/RentCompanyTest.java b/src/test/java/fuel/RentCompanyTest.java index 81f2ac05..185d7863 100644 --- a/src/test/java/fuel/RentCompanyTest.java +++ b/src/test/java/fuel/RentCompanyTest.java @@ -1,9 +1,8 @@ package fuel; -import fuel.domain.RentCompany; -import fuel.domain.concreate.Avante; -import fuel.domain.concreate.K5; -import fuel.domain.concreate.Sonata; +import fuel.domain.Avante; +import fuel.domain.K5; +import fuel.domain.Sonata; import org.junit.jupiter.api.Test; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; From 9d6103bd8e504316faeb0679472689911765c7d3 Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Mon, 27 May 2024 16:26:44 +0900 Subject: [PATCH 07/24] =?UTF-8?q?feat(TODO):=20todo=EB=A6=AC=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO_MATRIX.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 TODO_MATRIX.md diff --git a/TODO_MATRIX.md b/TODO_MATRIX.md new file mode 100644 index 00000000..9cfd2b23 --- /dev/null +++ b/TODO_MATRIX.md @@ -0,0 +1,19 @@ +사용자가 점에 대한 좌표 정보를 입력하는 메뉴를 구성한다. +좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분한다. +X, Y좌표 모두 최대 24까지만 입력할 수 있다. +입력 범위를 초과할 경우 에러 문구를 출력하고 다시 입력을 받는다. +정상적인 좌표값을 입력한 경우, 해당 좌표에 특수문자를 표시한다. +좌표값을 두 개 입력한 경우, 두 점을 있는 직선으로 가정한다. 좌표값과 좌표값 사이는 '-' 문자로 구분한다. +직선인 경우는 두 점 사이 거리를 계산해서 출력한다. + +PointA, PointB + +좌표 정보 괄호'()'로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분한다. +X, Y좌표 모두 최대 24까지만 입력할 수 있다. + - 입력 범위 초과할 경우 에러 문구를 출력하고 다시 입력을 받는다. + - 정상적인 좌표값을 입력한 경우, 해당 좌표에 특수문자를 표시한다. +좌표값과 좌표값 사이는 '-' 문자로 구분한다. +직선인 경우는 두 점 사이 거리를 계산해서 출력한다 + +좌표를 입력하세요. +(10,10)-(14,15) From 4e821234ad50dc89068d894b24f671fd35314865 Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Mon, 27 May 2024 18:00:34 +0900 Subject: [PATCH 08/24] =?UTF-8?q?feat(ValidationCheck):=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EB=90=9C=20=EA=B0=92=20=EC=A4=91=20=ED=8A=B9=EC=88=98?= =?UTF-8?q?=EB=AC=B8=EC=9E=90=EB=A5=BC=20=EC=A0=9C=EA=B1=B0=ED=95=98?= =?UTF-8?q?=EC=97=AC=20x=EA=B0=92=EA=B3=BC=20y=EA=B0=92=EC=9D=84=20?= =?UTF-8?q?=EC=B6=94=EC=B6=9C=ED=95=98=EB=8A=94=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 --- TODO_MATRIX.md | 1 + src/main/java/matrix/ValidationCheck.java | 20 ++++++++++++++++++ src/test/java/matrix/MatrixTest.java | 21 +++++++++++++++++++ src/test/java/matrix/ValidationCheckTest.java | 18 ++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 src/main/java/matrix/ValidationCheck.java create mode 100644 src/test/java/matrix/MatrixTest.java create mode 100644 src/test/java/matrix/ValidationCheckTest.java diff --git a/TODO_MATRIX.md b/TODO_MATRIX.md index 9cfd2b23..772825a6 100644 --- a/TODO_MATRIX.md +++ b/TODO_MATRIX.md @@ -9,6 +9,7 @@ X, Y좌표 모두 최대 24까지만 입력할 수 있다. PointA, PointB 좌표 정보 괄호'()'로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분한다. + - 괄호 및 쉼표 제거 후 x값과 y값을 가져오기 X, Y좌표 모두 최대 24까지만 입력할 수 있다. - 입력 범위 초과할 경우 에러 문구를 출력하고 다시 입력을 받는다. - 정상적인 좌표값을 입력한 경우, 해당 좌표에 특수문자를 표시한다. diff --git a/src/main/java/matrix/ValidationCheck.java b/src/main/java/matrix/ValidationCheck.java new file mode 100644 index 00000000..f7a1eed9 --- /dev/null +++ b/src/main/java/matrix/ValidationCheck.java @@ -0,0 +1,20 @@ +package matrix; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class ValidationCheck { + + public static final String REGEX = "[,()-]"; + + public List removeSymbols(String matrixPosition) { + return Arrays.stream(matrixPosition.split(REGEX)) + .filter(this::isNotEmpty) + .collect(Collectors.toList()); + } + + private boolean isNotEmpty(String position) { + return !position.isEmpty(); + } +} diff --git a/src/test/java/matrix/MatrixTest.java b/src/test/java/matrix/MatrixTest.java new file mode 100644 index 00000000..09240326 --- /dev/null +++ b/src/test/java/matrix/MatrixTest.java @@ -0,0 +1,21 @@ +package matrix; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class MatrixTest { + @Test + @DisplayName("구분된 데이터를 포인트A와 포인트B에 데이터를 삽입하는 기능") + void 포인트A_포인트B_데이터삽입(){ + + + } + +} diff --git a/src/test/java/matrix/ValidationCheckTest.java b/src/test/java/matrix/ValidationCheckTest.java new file mode 100644 index 00000000..ca657b82 --- /dev/null +++ b/src/test/java/matrix/ValidationCheckTest.java @@ -0,0 +1,18 @@ +package matrix; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class ValidationCheckTest { + + @Test + @DisplayName("입력된 값 중 괄호 및 쉼표를 제거하여 x값과 y값을 추출하는 기능") + void 괄호및쉼표제거(){ + ValidationCheck check = new ValidationCheck(); + assertThat(check.removeSymbols("(10,10)-(14,15)")).isEqualTo(Arrays.asList("10", "10", "14", "15")); + } +} From c3d1ee7c83c4f705a36ac55f618db1346ce21435 Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Mon, 27 May 2024 21:08:58 +0900 Subject: [PATCH 09/24] =?UTF-8?q?feat(ValidationCheck):=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EA=B0=92=20=EC=A4=91=20=ED=95=98=EB=82=98=EB=9D=BC?= =?UTF-8?q?=EB=8F=84=2024=EC=B4=88=EA=B3=BC=EB=9D=BC=EB=A9=B4=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=EB=B0=9C=EC=83=9D=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/matrix/PointA.java | 22 +++++++++++++++++++ src/main/java/matrix/PointB.java | 18 +++++++++++++++ src/main/java/matrix/ValidationCheck.java | 3 ++- src/test/java/matrix/MatrixTest.java | 11 +++++++++- src/test/java/matrix/ValidationCheckTest.java | 2 +- 5 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 src/main/java/matrix/PointA.java create mode 100644 src/main/java/matrix/PointB.java diff --git a/src/main/java/matrix/PointA.java b/src/main/java/matrix/PointA.java new file mode 100644 index 00000000..3b3f5186 --- /dev/null +++ b/src/main/java/matrix/PointA.java @@ -0,0 +1,22 @@ +package matrix; + +import java.util.List; + +public class PointA { + public static final int MAX_NO = 24; + private final int x; + private final int y; + + public PointA(int x, int y) { + if (x > MAX_NO || y > MAX_NO){ + throw new IllegalArgumentException("24초과입니다. 다시 입력해주세요"); + } + this.x = x; + this.y = y; + } + + @Override + public String toString() { + return x + " " + y; + } +} diff --git a/src/main/java/matrix/PointB.java b/src/main/java/matrix/PointB.java new file mode 100644 index 00000000..4fb84a2d --- /dev/null +++ b/src/main/java/matrix/PointB.java @@ -0,0 +1,18 @@ +package matrix; + +import java.util.List; + +public class PointB { + private final int x; + private final int y; + + public PointB(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public String toString() { + return x + " " + y; + } +} diff --git a/src/main/java/matrix/ValidationCheck.java b/src/main/java/matrix/ValidationCheck.java index f7a1eed9..7a28a9fe 100644 --- a/src/main/java/matrix/ValidationCheck.java +++ b/src/main/java/matrix/ValidationCheck.java @@ -8,9 +8,10 @@ public class ValidationCheck { public static final String REGEX = "[,()-]"; - public List removeSymbols(String matrixPosition) { + public List filterAndMap(String matrixPosition) { return Arrays.stream(matrixPosition.split(REGEX)) .filter(this::isNotEmpty) + .map(Integer::parseInt) .collect(Collectors.toList()); } diff --git a/src/test/java/matrix/MatrixTest.java b/src/test/java/matrix/MatrixTest.java index 09240326..f4b02899 100644 --- a/src/test/java/matrix/MatrixTest.java +++ b/src/test/java/matrix/MatrixTest.java @@ -1,8 +1,10 @@ package matrix; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import javax.print.PrintException; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -14,8 +16,15 @@ public class MatrixTest { @Test @DisplayName("구분된 데이터를 포인트A와 포인트B에 데이터를 삽입하는 기능") void 포인트A_포인트B_데이터삽입(){ + assertThat(new PointA(10, 10)).hasToString("10 10"); + assertThat(new PointB( 14, 15)).hasToString("14 15"); + } - + @Test + @DisplayName("x, y 24초과이면 에러발생") + void 초과시_에러(){ + String message = Assertions.assertThrows(IllegalArgumentException.class, ()-> new PointA(25, 10)).getMessage(); + assertThat(message).isEqualTo("24초과입니다. 다시 입력해주세요"); } } diff --git a/src/test/java/matrix/ValidationCheckTest.java b/src/test/java/matrix/ValidationCheckTest.java index ca657b82..0dfc4ac8 100644 --- a/src/test/java/matrix/ValidationCheckTest.java +++ b/src/test/java/matrix/ValidationCheckTest.java @@ -13,6 +13,6 @@ public class ValidationCheckTest { @DisplayName("입력된 값 중 괄호 및 쉼표를 제거하여 x값과 y값을 추출하는 기능") void 괄호및쉼표제거(){ ValidationCheck check = new ValidationCheck(); - assertThat(check.removeSymbols("(10,10)-(14,15)")).isEqualTo(Arrays.asList("10", "10", "14", "15")); + assertThat(check.filterAndMap("(10,10)-(14,15)")).isEqualTo(Arrays.asList(10, 10, 14, 15)); } } From 607a9cb558cc756ae807703811cef2c73a762513 Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Wed, 29 May 2024 17:29:53 +0900 Subject: [PATCH 10/24] =?UTF-8?q?feat(Point):=20=ED=8F=AC=EC=9D=B8?= =?UTF-8?q?=ED=8A=B8=20=EB=91=90=20=EC=A0=90=20=EC=82=AC=EC=9D=B4=EC=9D=98?= =?UTF-8?q?=20=EA=B1=B0=EB=A6=AC=20=EA=B3=84=EC=82=B0=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO_MATRIX.md | 11 ++++- src/main/java/matrix/PointA.java | 22 --------- src/main/java/matrix/PointB.java | 18 -------- .../java/matrix/controller/InputView.java | 4 ++ src/main/java/matrix/domain/Point.java | 22 +++++++++ src/main/java/matrix/domain/PointA.java | 46 +++++++++++++++++++ src/main/java/matrix/domain/PointB.java | 40 ++++++++++++++++ src/test/java/matrix/MatrixTest.java | 18 +++++--- 8 files changed, 133 insertions(+), 48 deletions(-) delete mode 100644 src/main/java/matrix/PointA.java delete mode 100644 src/main/java/matrix/PointB.java create mode 100644 src/main/java/matrix/controller/InputView.java create mode 100644 src/main/java/matrix/domain/Point.java create mode 100644 src/main/java/matrix/domain/PointA.java create mode 100644 src/main/java/matrix/domain/PointB.java diff --git a/TODO_MATRIX.md b/TODO_MATRIX.md index 772825a6..e353eb69 100644 --- a/TODO_MATRIX.md +++ b/TODO_MATRIX.md @@ -9,12 +9,19 @@ X, Y좌표 모두 최대 24까지만 입력할 수 있다. PointA, PointB 좌표 정보 괄호'()'로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분한다. - - 괄호 및 쉼표 제거 후 x값과 y값을 가져오기 +좌표값과 좌표값 사이는 '-' 문자로 구분한다. + - [v] PointA(10,10) - PointB(14,15) + - [v] 괄호 및 쉼표 제거 후 x값과 y값을 가져오기 X, Y좌표 모두 최대 24까지만 입력할 수 있다. - 입력 범위 초과할 경우 에러 문구를 출력하고 다시 입력을 받는다. - 정상적인 좌표값을 입력한 경우, 해당 좌표에 특수문자를 표시한다. -좌표값과 좌표값 사이는 '-' 문자로 구분한다. + 직선인 경우는 두 점 사이 거리를 계산해서 출력한다 + - 두 점 사이의 거리를 계산한다. 좌표를 입력하세요. (10,10)-(14,15) + +두 점 사이 거리는 제곱근((A.x - B.x)^제곱 + (A.y - B.y)^제곱) 공식으로 계산할 수 있다. +제곱근을 구하는 수학 함수는 Math.sqrt()를 활용한다. +테스트 코드의 경우 double일 때 근사치를 테스트하는 경우가 많다. diff --git a/src/main/java/matrix/PointA.java b/src/main/java/matrix/PointA.java deleted file mode 100644 index 3b3f5186..00000000 --- a/src/main/java/matrix/PointA.java +++ /dev/null @@ -1,22 +0,0 @@ -package matrix; - -import java.util.List; - -public class PointA { - public static final int MAX_NO = 24; - private final int x; - private final int y; - - public PointA(int x, int y) { - if (x > MAX_NO || y > MAX_NO){ - throw new IllegalArgumentException("24초과입니다. 다시 입력해주세요"); - } - this.x = x; - this.y = y; - } - - @Override - public String toString() { - return x + " " + y; - } -} diff --git a/src/main/java/matrix/PointB.java b/src/main/java/matrix/PointB.java deleted file mode 100644 index 4fb84a2d..00000000 --- a/src/main/java/matrix/PointB.java +++ /dev/null @@ -1,18 +0,0 @@ -package matrix; - -import java.util.List; - -public class PointB { - private final int x; - private final int y; - - public PointB(int x, int y) { - this.x = x; - this.y = y; - } - - @Override - public String toString() { - return x + " " + y; - } -} diff --git a/src/main/java/matrix/controller/InputView.java b/src/main/java/matrix/controller/InputView.java new file mode 100644 index 00000000..e49a5c9b --- /dev/null +++ b/src/main/java/matrix/controller/InputView.java @@ -0,0 +1,4 @@ +package matrix.controller; + +public class InputView { +} diff --git a/src/main/java/matrix/domain/Point.java b/src/main/java/matrix/domain/Point.java new file mode 100644 index 00000000..2f8d825b --- /dev/null +++ b/src/main/java/matrix/domain/Point.java @@ -0,0 +1,22 @@ +package matrix.domain; + +public class Point { + private final PointA pointA; + private final PointB pointB; + + public Point(PointA pointA, PointB pointB) { + this.pointA = pointA; + this.pointB = pointB; + } + + // 제곱근((A.x - B.x)^제곱 + (A.y - B.y)^제곱) + public double pointDistance() { + int x1 = pointA.getX(); + int y1 = pointA.getY(); + + int x2 = pointB.getX(); + int y2 = pointB.getY(); + + return Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2)); + } +} diff --git a/src/main/java/matrix/domain/PointA.java b/src/main/java/matrix/domain/PointA.java new file mode 100644 index 00000000..c65fc9db --- /dev/null +++ b/src/main/java/matrix/domain/PointA.java @@ -0,0 +1,46 @@ +package matrix.domain; + +import java.util.List; +import java.util.Objects; + +public class PointA { + public static final int MAX_NO = 24; + private final int x; + private final int y; + + public PointA(int x, int y) { + if (x > MAX_NO || y > MAX_NO){ + throw new IllegalArgumentException("24초과입니다. 다시 입력해주세요"); + } + this.x = x; + this.y = y; + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PointA pointA = (PointA) o; + return x == pointA.x && y == pointA.y; + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } + + @Override + public String toString() { + return x + " " + y; + } + + +} diff --git a/src/main/java/matrix/domain/PointB.java b/src/main/java/matrix/domain/PointB.java new file mode 100644 index 00000000..9c3c9198 --- /dev/null +++ b/src/main/java/matrix/domain/PointB.java @@ -0,0 +1,40 @@ +package matrix.domain; + +import java.util.List; +import java.util.Objects; + +public class PointB { + private final int x; + private final int y; + + public PointB(int x, int y) { + this.x = x; + this.y = y; + } + + public int getY() { + return y; + } + + public int getX() { + return x; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PointB pointB = (PointB) o; + return x == pointB.x && y == pointB.y; + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } + + @Override + public String toString() { + return x + " " + y; + } +} diff --git a/src/test/java/matrix/MatrixTest.java b/src/test/java/matrix/MatrixTest.java index f4b02899..e5bb2781 100644 --- a/src/test/java/matrix/MatrixTest.java +++ b/src/test/java/matrix/MatrixTest.java @@ -1,16 +1,14 @@ package matrix; +import matrix.domain.Point; +import matrix.domain.PointA; +import matrix.domain.PointB; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import javax.print.PrintException; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; public class MatrixTest { @Test @@ -27,4 +25,12 @@ public class MatrixTest { assertThat(message).isEqualTo("24초과입니다. 다시 입력해주세요"); } + @Test + @DisplayName("포인트 두 점 사이의 거리를 계산한다") + void 두_점_사이의거리계산(){ + Point point = new Point(new PointA(10, 10), new PointB( 14, 15)); + double distance = point.pointDistance(); + assertEquals(distance, 6.403124, 0.000001); + } + } From 45d87af10d8f328a13fd5399a147f455d2c5220e Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Wed, 29 May 2024 18:02:33 +0900 Subject: [PATCH 11/24] =?UTF-8?q?feat(InputView):=20InputView,=20PointRepo?= =?UTF-8?q?rt=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/matrix/controller/InputView.java | 3 +++ src/main/java/matrix/controller/PointReport.java | 9 +++++++++ src/main/java/matrix/domain/Point.java | 1 - src/test/java/matrix/MatrixTest.java | 6 +----- 4 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 src/main/java/matrix/controller/PointReport.java diff --git a/src/main/java/matrix/controller/InputView.java b/src/main/java/matrix/controller/InputView.java index e49a5c9b..11a7dce0 100644 --- a/src/main/java/matrix/controller/InputView.java +++ b/src/main/java/matrix/controller/InputView.java @@ -1,4 +1,7 @@ package matrix.controller; public class InputView { + + + } diff --git a/src/main/java/matrix/controller/PointReport.java b/src/main/java/matrix/controller/PointReport.java new file mode 100644 index 00000000..22690876 --- /dev/null +++ b/src/main/java/matrix/controller/PointReport.java @@ -0,0 +1,9 @@ +package matrix.controller; + +public class PointReport { + + public void print(){ + + } + +} diff --git a/src/main/java/matrix/domain/Point.java b/src/main/java/matrix/domain/Point.java index 2f8d825b..9542167a 100644 --- a/src/main/java/matrix/domain/Point.java +++ b/src/main/java/matrix/domain/Point.java @@ -9,7 +9,6 @@ public Point(PointA pointA, PointB pointB) { this.pointB = pointB; } - // 제곱근((A.x - B.x)^제곱 + (A.y - B.y)^제곱) public double pointDistance() { int x1 = pointA.getX(); int y1 = pointA.getY(); diff --git a/src/test/java/matrix/MatrixTest.java b/src/test/java/matrix/MatrixTest.java index e5bb2781..26c70aa7 100644 --- a/src/test/java/matrix/MatrixTest.java +++ b/src/test/java/matrix/MatrixTest.java @@ -17,20 +17,16 @@ public class MatrixTest { assertThat(new PointA(10, 10)).hasToString("10 10"); assertThat(new PointB( 14, 15)).hasToString("14 15"); } - @Test @DisplayName("x, y 24초과이면 에러발생") void 초과시_에러(){ String message = Assertions.assertThrows(IllegalArgumentException.class, ()-> new PointA(25, 10)).getMessage(); assertThat(message).isEqualTo("24초과입니다. 다시 입력해주세요"); } - @Test @DisplayName("포인트 두 점 사이의 거리를 계산한다") void 두_점_사이의거리계산(){ Point point = new Point(new PointA(10, 10), new PointB( 14, 15)); - double distance = point.pointDistance(); - assertEquals(distance, 6.403124, 0.000001); + assertEquals(point.pointDistance(), 6.403124, 0.000001); } - } From 3a51fd950a4361c6c3ddcb440957975bd7d4d746 Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Thu, 30 May 2024 19:46:22 +0900 Subject: [PATCH 12/24] =?UTF-8?q?feat(Application):=20=EC=96=B4=ED=94=8C?= =?UTF-8?q?=EB=A6=AC=EC=BC=80=EC=9D=B4=EC=85=98=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO_MATRIX.md | 6 +-- src/main/java/matrix/Application.java | 16 +++++++ .../java/matrix/controller/InputView.java | 22 +++++++++ src/main/java/matrix/domain/Point.java | 30 ++++++------ src/main/java/matrix/domain/PointA.java | 46 ------------------- src/main/java/matrix/domain/PointB.java | 40 ---------------- .../{ => validation}/ValidationCheck.java | 7 +-- src/test/java/matrix/MatrixTest.java | 29 ++++++------ src/test/java/matrix/ValidationCheckTest.java | 6 +-- 9 files changed, 73 insertions(+), 129 deletions(-) create mode 100644 src/main/java/matrix/Application.java delete mode 100644 src/main/java/matrix/domain/PointA.java delete mode 100644 src/main/java/matrix/domain/PointB.java rename src/main/java/matrix/{ => validation}/ValidationCheck.java (82%) diff --git a/TODO_MATRIX.md b/TODO_MATRIX.md index e353eb69..24e9ef39 100644 --- a/TODO_MATRIX.md +++ b/TODO_MATRIX.md @@ -12,11 +12,10 @@ PointA, PointB 좌표값과 좌표값 사이는 '-' 문자로 구분한다. - [v] PointA(10,10) - PointB(14,15) - [v] 괄호 및 쉼표 제거 후 x값과 y값을 가져오기 -X, Y좌표 모두 최대 24까지만 입력할 수 있다. +[v] X, Y좌표 모두 최대 24까지만 입력할 수 있다. - 입력 범위 초과할 경우 에러 문구를 출력하고 다시 입력을 받는다. - 정상적인 좌표값을 입력한 경우, 해당 좌표에 특수문자를 표시한다. - -직선인 경우는 두 점 사이 거리를 계산해서 출력한다 +[v] 직선인 경우는 두 점 사이 거리를 계산해서 출력한다 - 두 점 사이의 거리를 계산한다. 좌표를 입력하세요. @@ -25,3 +24,4 @@ X, Y좌표 모두 최대 24까지만 입력할 수 있다. 두 점 사이 거리는 제곱근((A.x - B.x)^제곱 + (A.y - B.y)^제곱) 공식으로 계산할 수 있다. 제곱근을 구하는 수학 함수는 Math.sqrt()를 활용한다. 테스트 코드의 경우 double일 때 근사치를 테스트하는 경우가 많다. + diff --git a/src/main/java/matrix/Application.java b/src/main/java/matrix/Application.java new file mode 100644 index 00000000..e3673882 --- /dev/null +++ b/src/main/java/matrix/Application.java @@ -0,0 +1,16 @@ +package matrix; + +import java.util.Scanner; + +public class Application { + public static void main(String[] args) { + Scanner input = new Scanner(System.in); + System.out.println("좌표를 입력하세요."); + String line = input.next(); + + + + + + } +} diff --git a/src/main/java/matrix/controller/InputView.java b/src/main/java/matrix/controller/InputView.java index 11a7dce0..7528f802 100644 --- a/src/main/java/matrix/controller/InputView.java +++ b/src/main/java/matrix/controller/InputView.java @@ -1,7 +1,29 @@ package matrix.controller; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public class InputView { + public static final String REGEX = "[,()-]"; + public List filterParseIntegers(String matrixPosition) { + return Arrays.stream(matrixPosition.split(REGEX)) + .filter(this::isNotEmpty) + .map(Integer::parseInt) + .collect(Collectors.toList()); + } + private boolean isNotEmpty(String position) { + return !position.isEmpty(); + } + @Override + public int hashCode() { + return super.hashCode(); + } + @Override + public boolean equals(Object obj) { + return super.equals(obj); + } } diff --git a/src/main/java/matrix/domain/Point.java b/src/main/java/matrix/domain/Point.java index 9542167a..32f035de 100644 --- a/src/main/java/matrix/domain/Point.java +++ b/src/main/java/matrix/domain/Point.java @@ -1,21 +1,19 @@ package matrix.domain; - public class Point { - private final PointA pointA; - private final PointB pointB; - - public Point(PointA pointA, PointB pointB) { - this.pointA = pointA; - this.pointB = pointB; + public static final int MAX_NO = 24; + protected final int x; + protected final int y; + public Point(int x, int y) { + if (x > MAX_NO || y > MAX_NO){ + throw new IllegalArgumentException("x, y 둘 중 하나의 값이 24를 초과했습니다."); + } + this.x = x; + this.y = y; } - - public double pointDistance() { - int x1 = pointA.getX(); - int y1 = pointA.getY(); - - int x2 = pointB.getX(); - int y2 = pointB.getY(); - - return Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2)); + public double pointDistance(Point point){ + return Math.sqrt(pow(this.x, point.x) + pow(this.y, point.y)); + } + private double pow(int self, int point) { + return Math.pow(self - point, 2); } } diff --git a/src/main/java/matrix/domain/PointA.java b/src/main/java/matrix/domain/PointA.java deleted file mode 100644 index c65fc9db..00000000 --- a/src/main/java/matrix/domain/PointA.java +++ /dev/null @@ -1,46 +0,0 @@ -package matrix.domain; - -import java.util.List; -import java.util.Objects; - -public class PointA { - public static final int MAX_NO = 24; - private final int x; - private final int y; - - public PointA(int x, int y) { - if (x > MAX_NO || y > MAX_NO){ - throw new IllegalArgumentException("24초과입니다. 다시 입력해주세요"); - } - this.x = x; - this.y = y; - } - - public int getX() { - return x; - } - - public int getY() { - return y; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - PointA pointA = (PointA) o; - return x == pointA.x && y == pointA.y; - } - - @Override - public int hashCode() { - return Objects.hash(x, y); - } - - @Override - public String toString() { - return x + " " + y; - } - - -} diff --git a/src/main/java/matrix/domain/PointB.java b/src/main/java/matrix/domain/PointB.java deleted file mode 100644 index 9c3c9198..00000000 --- a/src/main/java/matrix/domain/PointB.java +++ /dev/null @@ -1,40 +0,0 @@ -package matrix.domain; - -import java.util.List; -import java.util.Objects; - -public class PointB { - private final int x; - private final int y; - - public PointB(int x, int y) { - this.x = x; - this.y = y; - } - - public int getY() { - return y; - } - - public int getX() { - return x; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - PointB pointB = (PointB) o; - return x == pointB.x && y == pointB.y; - } - - @Override - public int hashCode() { - return Objects.hash(x, y); - } - - @Override - public String toString() { - return x + " " + y; - } -} diff --git a/src/main/java/matrix/ValidationCheck.java b/src/main/java/matrix/validation/ValidationCheck.java similarity index 82% rename from src/main/java/matrix/ValidationCheck.java rename to src/main/java/matrix/validation/ValidationCheck.java index 7a28a9fe..d8174cad 100644 --- a/src/main/java/matrix/ValidationCheck.java +++ b/src/main/java/matrix/validation/ValidationCheck.java @@ -1,20 +1,17 @@ -package matrix; +package matrix.validation; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class ValidationCheck { - public static final String REGEX = "[,()-]"; - - public List filterAndMap(String matrixPosition) { + public List filterParseIntegers(String matrixPosition) { return Arrays.stream(matrixPosition.split(REGEX)) .filter(this::isNotEmpty) .map(Integer::parseInt) .collect(Collectors.toList()); } - private boolean isNotEmpty(String position) { return !position.isEmpty(); } diff --git a/src/test/java/matrix/MatrixTest.java b/src/test/java/matrix/MatrixTest.java index 26c70aa7..175f5c8d 100644 --- a/src/test/java/matrix/MatrixTest.java +++ b/src/test/java/matrix/MatrixTest.java @@ -1,32 +1,31 @@ package matrix; import matrix.domain.Point; -import matrix.domain.PointA; -import matrix.domain.PointB; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; public class MatrixTest { - @Test - @DisplayName("구분된 데이터를 포인트A와 포인트B에 데이터를 삽입하는 기능") - void 포인트A_포인트B_데이터삽입(){ - assertThat(new PointA(10, 10)).hasToString("10 10"); - assertThat(new PointB( 14, 15)).hasToString("14 15"); - } @Test @DisplayName("x, y 24초과이면 에러발생") void 초과시_에러(){ - String message = Assertions.assertThrows(IllegalArgumentException.class, ()-> new PointA(25, 10)).getMessage(); - assertThat(message).isEqualTo("24초과입니다. 다시 입력해주세요"); + assertThatThrownBy(() -> { + Point point = new Point(25, 24); + }).isInstanceOf(IllegalArgumentException.class); + + new Point(24, 24); + + assertThatThrownBy(() -> { + Point point = new Point(24, 25); + }).isInstanceOf(IllegalArgumentException.class); } @Test @DisplayName("포인트 두 점 사이의 거리를 계산한다") void 두_점_사이의거리계산(){ - Point point = new Point(new PointA(10, 10), new PointB( 14, 15)); - assertEquals(point.pointDistance(), 6.403124, 0.000001); + Point pointA = new Point(10, 10); + Point pointB = new Point(14, 15); + + assertEquals(pointA.pointDistance(pointB), 6.403124, 0.000001); } } diff --git a/src/test/java/matrix/ValidationCheckTest.java b/src/test/java/matrix/ValidationCheckTest.java index 0dfc4ac8..57fe0ca7 100644 --- a/src/test/java/matrix/ValidationCheckTest.java +++ b/src/test/java/matrix/ValidationCheckTest.java @@ -1,18 +1,16 @@ package matrix; +import matrix.validation.ValidationCheck; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; - import java.util.Arrays; - import static org.assertj.core.api.AssertionsForClassTypes.assertThat; public class ValidationCheckTest { - @Test @DisplayName("입력된 값 중 괄호 및 쉼표를 제거하여 x값과 y값을 추출하는 기능") void 괄호및쉼표제거(){ ValidationCheck check = new ValidationCheck(); - assertThat(check.filterAndMap("(10,10)-(14,15)")).isEqualTo(Arrays.asList(10, 10, 14, 15)); + assertThat(check.filterParseIntegers("(10,10)-(14,15)")).isEqualTo(Arrays.asList(10, 10, 14, 15)); } } From baae40f171c085023e773632186fbc6131cca30c Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Fri, 31 May 2024 11:29:05 +0900 Subject: [PATCH 13/24] =?UTF-8?q?feat(Utils):=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EB=90=9C=20=EA=B0=92=EC=9D=B4=20=EC=88=AB=EC=9E=90=EA=B0=80=20?= =?UTF-8?q?=EC=95=84=EB=8B=8C=20=EB=AC=B8=EC=9E=90=EC=9D=BC=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EA=B2=80=EC=A6=9D=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=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 --- src/main/java/matrix/Application.java | 17 +++++++----- .../java/matrix/controller/InputView.java | 26 +++++-------------- src/main/java/matrix/domain/Point.java | 5 +++- .../{ValidationCheck.java => Utils.java} | 13 +++++++--- src/test/java/matrix/MatrixTest.java | 2 +- ...alidationCheckTest.java => UtilsTest.java} | 14 +++++++--- 6 files changed, 41 insertions(+), 36 deletions(-) rename src/main/java/matrix/validation/{ValidationCheck.java => Utils.java} (51%) rename src/test/java/matrix/{ValidationCheckTest.java => UtilsTest.java} (52%) diff --git a/src/main/java/matrix/Application.java b/src/main/java/matrix/Application.java index e3673882..ecc83d47 100644 --- a/src/main/java/matrix/Application.java +++ b/src/main/java/matrix/Application.java @@ -1,16 +1,19 @@ package matrix; -import java.util.Scanner; +import matrix.controller.InputView; +import matrix.domain.Point; + +import java.util.List; public class Application { public static void main(String[] args) { - Scanner input = new Scanner(System.in); - System.out.println("좌표를 입력하세요."); - String line = input.next(); - - - + InputView inputView = new InputView(); + List positions = inputView.inputMatrix(); + Point pointA = new Point(positions.get(0), positions.get(1)); + Point pointB = new Point(positions.get(2), positions.get(3)); + double result = pointA.getDistance(pointB); + System.out.printf("두 점 사이의 거리는 %.6f", result); } } diff --git a/src/main/java/matrix/controller/InputView.java b/src/main/java/matrix/controller/InputView.java index 7528f802..76616cb6 100644 --- a/src/main/java/matrix/controller/InputView.java +++ b/src/main/java/matrix/controller/InputView.java @@ -1,29 +1,17 @@ package matrix.controller; +import matrix.validation.Utils; + import java.util.Arrays; import java.util.List; +import java.util.Scanner; import java.util.stream.Collectors; public class InputView { - - public static final String REGEX = "[,()-]"; - public List filterParseIntegers(String matrixPosition) { - return Arrays.stream(matrixPosition.split(REGEX)) - .filter(this::isNotEmpty) - .map(Integer::parseInt) - .collect(Collectors.toList()); - } - private boolean isNotEmpty(String position) { - return !position.isEmpty(); + public List inputMatrix() { + Scanner input = new Scanner(System.in); + System.out.println("좌표를 입력하세요."); + return Utils.filterParseIntegers(input.next()); } - @Override - public int hashCode() { - return super.hashCode(); - } - - @Override - public boolean equals(Object obj) { - return super.equals(obj); - } } diff --git a/src/main/java/matrix/domain/Point.java b/src/main/java/matrix/domain/Point.java index 32f035de..7e348590 100644 --- a/src/main/java/matrix/domain/Point.java +++ b/src/main/java/matrix/domain/Point.java @@ -10,7 +10,10 @@ public Point(int x, int y) { this.x = x; this.y = y; } - public double pointDistance(Point point){ + + + + public double getDistance(Point point){ return Math.sqrt(pow(this.x, point.x) + pow(this.y, point.y)); } private double pow(int self, int point) { diff --git a/src/main/java/matrix/validation/ValidationCheck.java b/src/main/java/matrix/validation/Utils.java similarity index 51% rename from src/main/java/matrix/validation/ValidationCheck.java rename to src/main/java/matrix/validation/Utils.java index d8174cad..7cf5d8fc 100644 --- a/src/main/java/matrix/validation/ValidationCheck.java +++ b/src/main/java/matrix/validation/Utils.java @@ -2,17 +2,22 @@ import java.util.Arrays; import java.util.List; +import java.util.regex.Pattern; import java.util.stream.Collectors; -public class ValidationCheck { +public class Utils { public static final String REGEX = "[,()-]"; - public List filterParseIntegers(String matrixPosition) { + public static List filterParseIntegers(String matrixPosition) { return Arrays.stream(matrixPosition.split(REGEX)) - .filter(this::isNotEmpty) + .filter(Utils::isNotEmpty) .map(Integer::parseInt) .collect(Collectors.toList()); } - private boolean isNotEmpty(String position) { + private static boolean isNotEmpty(String position) { return !position.isEmpty(); } + + public static boolean containAlphabet(String word) { + return word.matches(".*[a-zA-Z].*"); + } } diff --git a/src/test/java/matrix/MatrixTest.java b/src/test/java/matrix/MatrixTest.java index 175f5c8d..90df5911 100644 --- a/src/test/java/matrix/MatrixTest.java +++ b/src/test/java/matrix/MatrixTest.java @@ -26,6 +26,6 @@ public class MatrixTest { Point pointA = new Point(10, 10); Point pointB = new Point(14, 15); - assertEquals(pointA.pointDistance(pointB), 6.403124, 0.000001); + assertEquals(pointA.getDistance(pointB), 6.403124, 0.000001); } } diff --git a/src/test/java/matrix/ValidationCheckTest.java b/src/test/java/matrix/UtilsTest.java similarity index 52% rename from src/test/java/matrix/ValidationCheckTest.java rename to src/test/java/matrix/UtilsTest.java index 57fe0ca7..f6fd98ba 100644 --- a/src/test/java/matrix/ValidationCheckTest.java +++ b/src/test/java/matrix/UtilsTest.java @@ -1,16 +1,22 @@ package matrix; -import matrix.validation.ValidationCheck; +import matrix.validation.Utils; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import java.util.Arrays; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -public class ValidationCheckTest { +public class UtilsTest { @Test @DisplayName("입력된 값 중 괄호 및 쉼표를 제거하여 x값과 y값을 추출하는 기능") void 괄호및쉼표제거(){ - ValidationCheck check = new ValidationCheck(); - assertThat(check.filterParseIntegers("(10,10)-(14,15)")).isEqualTo(Arrays.asList(10, 10, 14, 15)); + assertThat(Utils.filterParseIntegers("(10,10)-(14,15)")).isEqualTo(Arrays.asList(10, 10, 14, 15)); + } + + @Test + @DisplayName("입력된 값이 이상할 때 검증하는 기능") + void 입력된값확인(){ + assertThat(Utils.containAlphabet("123")).isFalse(); + assertThat(Utils.containAlphabet("qw12")).isTrue(); } } From 749d4f35d7d4377708cf1f9023eca5b58d47d1b7 Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Fri, 31 May 2024 15:55:21 +0900 Subject: [PATCH 14/24] =?UTF-8?q?feat(PointReport):=20=EB=91=90=20?= =?UTF-8?q?=EC=A0=90=20=EC=82=AC=EC=9D=B4=EC=9D=98=20=EA=B1=B0=EB=A6=AC=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=B0=8F=20UI=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/matrix/Application.java | 9 ++++---- .../java/matrix/controller/InputView.java | 23 +++++++++++++++---- .../java/matrix/controller/PointReport.java | 15 ++++++++++-- src/main/java/matrix/domain/Point.java | 23 +++++++++++++++---- src/main/java/matrix/validation/Utils.java | 3 +++ 5 files changed, 58 insertions(+), 15 deletions(-) diff --git a/src/main/java/matrix/Application.java b/src/main/java/matrix/Application.java index ecc83d47..db39efd6 100644 --- a/src/main/java/matrix/Application.java +++ b/src/main/java/matrix/Application.java @@ -1,6 +1,7 @@ package matrix; import matrix.controller.InputView; +import matrix.controller.PointReport; import matrix.domain.Point; import java.util.List; @@ -9,11 +10,9 @@ public class Application { public static void main(String[] args) { InputView inputView = new InputView(); List positions = inputView.inputMatrix(); + PointReport report = new PointReport(positions); + report.print(); - Point pointA = new Point(positions.get(0), positions.get(1)); - Point pointB = new Point(positions.get(2), positions.get(3)); - - double result = pointA.getDistance(pointB); - System.out.printf("두 점 사이의 거리는 %.6f", result); + // inputView.printMatrix(pointA, pointB); } } diff --git a/src/main/java/matrix/controller/InputView.java b/src/main/java/matrix/controller/InputView.java index 76616cb6..d594d8e0 100644 --- a/src/main/java/matrix/controller/InputView.java +++ b/src/main/java/matrix/controller/InputView.java @@ -1,17 +1,32 @@ package matrix.controller; +import matrix.domain.Point; import matrix.validation.Utils; -import java.util.Arrays; import java.util.List; import java.util.Scanner; -import java.util.stream.Collectors; public class InputView { - public List inputMatrix() { + + public static final int MAX_NO = 25; + private String matrix[][] = new String[MAX_NO][MAX_NO]; + + public List inputMatrix(){ Scanner input = new Scanner(System.in); System.out.println("좌표를 입력하세요."); - return Utils.filterParseIntegers(input.next()); + String line = input.next(); + + return Utils.filterParseIntegers(line); } + public void printMatrix(Point pointA, Point pointB){ + matrix = pointA.getMatrix(pointB); + + for (int i = matrix.length-1; i >= 0; i--){ + for (int j = 0; j < matrix[0].length; j++){ + System.out.print(matrix[i][j]); + } + System.out.println(); + } + } } diff --git a/src/main/java/matrix/controller/PointReport.java b/src/main/java/matrix/controller/PointReport.java index 22690876..72b1105b 100644 --- a/src/main/java/matrix/controller/PointReport.java +++ b/src/main/java/matrix/controller/PointReport.java @@ -1,9 +1,20 @@ package matrix.controller; +import matrix.domain.Point; + +import java.util.List; + public class PointReport { - public void print(){ + private final Point pointA; + private final Point pointB; + public PointReport(List positions) { + this.pointA = new Point(positions.get(0), positions.get(1)); + this.pointB = new Point(positions.get(2), positions.get(3)); + } + public void print(){ + double result = pointA.getDistance(pointB); + System.out.printf("두 점 사이의 거리는 %.6f", result); } - } diff --git a/src/main/java/matrix/domain/Point.java b/src/main/java/matrix/domain/Point.java index 7e348590..37ed27ed 100644 --- a/src/main/java/matrix/domain/Point.java +++ b/src/main/java/matrix/domain/Point.java @@ -1,22 +1,37 @@ package matrix.domain; + +import java.util.Arrays; + public class Point { - public static final int MAX_NO = 24; + public static final int MAX_NO = 25; protected final int x; protected final int y; public Point(int x, int y) { - if (x > MAX_NO || y > MAX_NO){ + if (x >= MAX_NO || y >= MAX_NO){ throw new IllegalArgumentException("x, y 둘 중 하나의 값이 24를 초과했습니다."); } this.x = x; this.y = y; } - - public double getDistance(Point point){ return Math.sqrt(pow(this.x, point.x) + pow(this.y, point.y)); } + private double pow(int self, int point) { return Math.pow(self - point, 2); } + + public String[][] getMatrix(Point pointB) { + String [][]matrix = new String[MAX_NO][MAX_NO]; + + for (String[] height : matrix){ + Arrays.fill(height, " "); + } + + matrix[this.y][this.x] = "●"; + matrix[pointB.y][pointB.x] = "●"; + + return matrix; + } } diff --git a/src/main/java/matrix/validation/Utils.java b/src/main/java/matrix/validation/Utils.java index 7cf5d8fc..00d5ef1d 100644 --- a/src/main/java/matrix/validation/Utils.java +++ b/src/main/java/matrix/validation/Utils.java @@ -8,6 +8,9 @@ public class Utils { public static final String REGEX = "[,()-]"; public static List filterParseIntegers(String matrixPosition) { + if (Utils.containAlphabet(matrixPosition)){ + throw new IllegalArgumentException("잘 못된 입력값 입니다."); + } return Arrays.stream(matrixPosition.split(REGEX)) .filter(Utils::isNotEmpty) .map(Integer::parseInt) From 88c73ccf51b09c2637ab266f1c9a20709ac6bec5 Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Fri, 31 May 2024 17:37:24 +0900 Subject: [PATCH 15/24] =?UTF-8?q?feat(InputView):=20UI=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/matrix/Application.java | 2 +- .../java/matrix/controller/InputView.java | 27 ++++++++++++++++++- .../java/matrix/controller/PointReport.java | 6 +++-- src/main/java/matrix/domain/Point.java | 9 ++++--- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/main/java/matrix/Application.java b/src/main/java/matrix/Application.java index db39efd6..58894ccf 100644 --- a/src/main/java/matrix/Application.java +++ b/src/main/java/matrix/Application.java @@ -10,7 +10,7 @@ public class Application { public static void main(String[] args) { InputView inputView = new InputView(); List positions = inputView.inputMatrix(); - PointReport report = new PointReport(positions); + PointReport report = new PointReport(positions, inputView); report.print(); // inputView.printMatrix(pointA, pointB); diff --git a/src/main/java/matrix/controller/InputView.java b/src/main/java/matrix/controller/InputView.java index d594d8e0..1fc5653d 100644 --- a/src/main/java/matrix/controller/InputView.java +++ b/src/main/java/matrix/controller/InputView.java @@ -8,7 +8,7 @@ public class InputView { - public static final int MAX_NO = 25; + public static final int MAX_NO = 24; private String matrix[][] = new String[MAX_NO][MAX_NO]; public List inputMatrix(){ @@ -23,10 +23,35 @@ public void printMatrix(Point pointA, Point pointB){ matrix = pointA.getMatrix(pointB); for (int i = matrix.length-1; i >= 0; i--){ + if (isEven(i)){ + System.out.printf("%02d", i); + } + System.out.print("|"); for (int j = 0; j < matrix[0].length; j++){ System.out.print(matrix[i][j]); } System.out.println(); } + + + printFooter(); + System.out.println(); + } + + private boolean isEven(int number) { + return number % 2 == 0; + } + + private void printFooter() { + for (int i = 0; i < MAX_NO; i++) { + System.out.print("-"); + } + + System.out.println(); + + for (int i = 0; i < MAX_NO; i++) { + if (isEven(i)) + System.out.printf("%2d", i); + } } } diff --git a/src/main/java/matrix/controller/PointReport.java b/src/main/java/matrix/controller/PointReport.java index 72b1105b..9c805b9a 100644 --- a/src/main/java/matrix/controller/PointReport.java +++ b/src/main/java/matrix/controller/PointReport.java @@ -5,16 +5,18 @@ import java.util.List; public class PointReport { - private final Point pointA; private final Point pointB; + private final InputView inputView; - public PointReport(List positions) { + public PointReport(List positions, InputView inputView) { this.pointA = new Point(positions.get(0), positions.get(1)); this.pointB = new Point(positions.get(2), positions.get(3)); + this.inputView = inputView; } public void print(){ double result = pointA.getDistance(pointB); + inputView.printMatrix(pointA, pointB); System.out.printf("두 점 사이의 거리는 %.6f", result); } } diff --git a/src/main/java/matrix/domain/Point.java b/src/main/java/matrix/domain/Point.java index 37ed27ed..3bcfddb6 100644 --- a/src/main/java/matrix/domain/Point.java +++ b/src/main/java/matrix/domain/Point.java @@ -3,11 +3,12 @@ import java.util.Arrays; public class Point { - public static final int MAX_NO = 25; protected final int x; protected final int y; + public static final int MAX_NO = 24; + public Point(int x, int y) { - if (x >= MAX_NO || y >= MAX_NO){ + if (x > MAX_NO || y > MAX_NO){ throw new IllegalArgumentException("x, y 둘 중 하나의 값이 24를 초과했습니다."); } this.x = x; @@ -18,8 +19,8 @@ public double getDistance(Point point){ return Math.sqrt(pow(this.x, point.x) + pow(this.y, point.y)); } - private double pow(int self, int point) { - return Math.pow(self - point, 2); + private double pow(int self, int other) { + return Math.pow(self - other, 2); } public String[][] getMatrix(Point pointB) { From c0f84bb69a49b7a1b8840b13c6f23a98292793b3 Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Sat, 1 Jun 2024 23:30:31 +0900 Subject: [PATCH 16/24] git pull mege --- src/test/java/matrix/MatrixTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/matrix/MatrixTest.java b/src/test/java/matrix/MatrixTest.java index f4b02899..b2b759df 100644 --- a/src/test/java/matrix/MatrixTest.java +++ b/src/test/java/matrix/MatrixTest.java @@ -21,7 +21,7 @@ public class MatrixTest { } @Test - @DisplayName("x, y 24초과이면 에러발생") + @DisplayName("입력값 중 하나라도 24초과라면 에러발생") void 초과시_에러(){ String message = Assertions.assertThrows(IllegalArgumentException.class, ()-> new PointA(25, 10)).getMessage(); assertThat(message).isEqualTo("24초과입니다. 다시 입력해주세요"); From dbcdd372b1aec301f81d728d7e52516a43bde45b Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Tue, 4 Jun 2024 10:34:06 +0900 Subject: [PATCH 17/24] =?UTF-8?q?=EC=A0=84=EB=B6=80=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/fuel/Car.java | 25 -------- src/main/java/fuel/RentCompany.java | 28 --------- src/main/java/fuel/domain/Avante.java | 28 --------- src/main/java/fuel/domain/K5.java | 28 --------- src/main/java/fuel/domain/Sonata.java | 28 --------- src/main/java/matrix/Application.java | 24 -------- .../java/matrix/controller/InputView.java | 61 ------------------- .../java/matrix/controller/PointReport.java | 22 ------- src/main/java/matrix/domain/GameMode.java | 9 --- src/main/java/matrix/domain/Point.java | 38 ------------ src/main/java/matrix/validation/Utils.java | 26 -------- src/test/java/fuel/RentCompanyTest.java | 33 ---------- src/test/java/matrix/MatrixTest.java | 31 ---------- src/test/java/matrix/UtilsTest.java | 22 ------- 14 files changed, 403 deletions(-) delete mode 100644 src/main/java/fuel/Car.java delete mode 100644 src/main/java/fuel/RentCompany.java delete mode 100644 src/main/java/fuel/domain/Avante.java delete mode 100644 src/main/java/fuel/domain/K5.java delete mode 100644 src/main/java/fuel/domain/Sonata.java delete mode 100644 src/main/java/matrix/Application.java delete mode 100644 src/main/java/matrix/controller/InputView.java delete mode 100644 src/main/java/matrix/controller/PointReport.java delete mode 100644 src/main/java/matrix/domain/GameMode.java delete mode 100644 src/main/java/matrix/domain/Point.java delete mode 100644 src/main/java/matrix/validation/Utils.java delete mode 100644 src/test/java/fuel/RentCompanyTest.java delete mode 100644 src/test/java/matrix/MatrixTest.java delete mode 100644 src/test/java/matrix/UtilsTest.java diff --git a/src/main/java/fuel/Car.java b/src/main/java/fuel/Car.java deleted file mode 100644 index ac74ad3b..00000000 --- a/src/main/java/fuel/Car.java +++ /dev/null @@ -1,25 +0,0 @@ -package fuel; - -public abstract class Car { - /** - * 리터당 이동 거리. 즉, 연비 - */ - protected abstract double getDistancePerLiter(); - - /** - * 여행하려는 거리 - */ - protected abstract double getTripDistance(); - - /** - * 차종의 이름 - */ - protected abstract String getName(); - - /** - * 주입해야할 연료량을 구한다. - */ - double getChargeQuantity() { - return getTripDistance() / getDistancePerLiter(); - } -} \ No newline at end of file diff --git a/src/main/java/fuel/RentCompany.java b/src/main/java/fuel/RentCompany.java deleted file mode 100644 index 7f0d6cf7..00000000 --- a/src/main/java/fuel/RentCompany.java +++ /dev/null @@ -1,28 +0,0 @@ -package fuel; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -public class RentCompany { - private List carList = new ArrayList<>(); - private static final String NEWLINE = "\n"; - - public RentCompany(){} - public static RentCompany create() { - return new RentCompany(); - } - public void addCar(Car car) { - carList.add(car); - } - - public String generateReport() { - return carList.stream() - .map(this::stringFormat) - .collect(Collectors.joining(NEWLINE)); - } - - private String stringFormat(Car car) { - return String.format("%s : %d리터", car.getName(), (int) car.getChargeQuantity()); - } -} diff --git a/src/main/java/fuel/domain/Avante.java b/src/main/java/fuel/domain/Avante.java deleted file mode 100644 index 3839acec..00000000 --- a/src/main/java/fuel/domain/Avante.java +++ /dev/null @@ -1,28 +0,0 @@ -package fuel.domain; - -import fuel.Car; - -public class Avante extends Car { - private final int tripDistance; - public static final String CAR_NAME = "Avante"; - public static final int DISTANCE_PER_LITER = 15; - - public Avante(int tripDistance) { - this.tripDistance = tripDistance; - } - - @Override - protected double getDistancePerLiter() { - return DISTANCE_PER_LITER; - } - - @Override - protected double getTripDistance() { - return tripDistance; - } - - @Override - protected String getName() { - return CAR_NAME; - } -} diff --git a/src/main/java/fuel/domain/K5.java b/src/main/java/fuel/domain/K5.java deleted file mode 100644 index 61779fff..00000000 --- a/src/main/java/fuel/domain/K5.java +++ /dev/null @@ -1,28 +0,0 @@ -package fuel.domain; - -import fuel.Car; - -public class K5 extends Car { - private final int tripDistance; - public static final int DISTANCE_PER_LITER = 13; - public static final String CAR_NAME = "K5"; - - public K5(int tripDistance) { - this.tripDistance = tripDistance; - } - - @Override - protected double getDistancePerLiter() { - return DISTANCE_PER_LITER; - } - - @Override - protected double getTripDistance() { - return tripDistance; - } - - @Override - protected String getName() { - return CAR_NAME; - } -} diff --git a/src/main/java/fuel/domain/Sonata.java b/src/main/java/fuel/domain/Sonata.java deleted file mode 100644 index fbc716d4..00000000 --- a/src/main/java/fuel/domain/Sonata.java +++ /dev/null @@ -1,28 +0,0 @@ -package fuel.domain; - -import fuel.Car; - -public class Sonata extends Car { - private final int tripDistance; - public static final int DISTANCE_PER_LITER = 10; - public static final String CAR_NAME = "Sonata"; - - public Sonata(int tripDistance) { - this.tripDistance = tripDistance; - } - - @Override - protected double getDistancePerLiter() { - return DISTANCE_PER_LITER; - } - - @Override - protected double getTripDistance() { - return tripDistance; - } - - @Override - protected String getName() { - return CAR_NAME; - } -} diff --git a/src/main/java/matrix/Application.java b/src/main/java/matrix/Application.java deleted file mode 100644 index 7bd83aea..00000000 --- a/src/main/java/matrix/Application.java +++ /dev/null @@ -1,24 +0,0 @@ -package matrix; - -import matrix.controller.InputView; -import matrix.controller.PointReport; -import matrix.domain.GameMode; -import matrix.domain.Point; - -import java.util.List; - -public class Application { - public static void main(String[] args){ - InputView inputView = new InputView(); - - GameMode mode = GameMode.START; - - while(mode.isStart()){ - try{ - List positions = inputView.inputMatrix(); - PointReport report = new PointReport(positions, inputView); - report.print(); - }catch (IllegalArgumentException e){} - } - } -} diff --git a/src/main/java/matrix/controller/InputView.java b/src/main/java/matrix/controller/InputView.java deleted file mode 100644 index 00c1b2da..00000000 --- a/src/main/java/matrix/controller/InputView.java +++ /dev/null @@ -1,61 +0,0 @@ -package matrix.controller; - -import matrix.domain.GameMode; -import matrix.domain.Point; -import matrix.validation.Utils; - -import java.util.List; -import java.util.Scanner; - -public class InputView { - - public static final int MAX_NO = 24; - private String matrix[][] = new String[MAX_NO][MAX_NO]; - - public List inputMatrix(){ - Scanner input = new Scanner(System.in); - System.out.println("좌표를 입력하세요."); - String line = input.next(); - - return Utils.filterParseIntegers(line); - } - - public void printMatrix(Point pointA, Point pointB){ - matrix = pointA.getMatrix(pointB); - - for (int i = matrix.length-1; i >= 0; i--){ - if (isEven(i) && !(i == 0)){ - System.out.printf("%02d|", i); - } - if (!isEven(i)){ - System.out.print(" |"); - } - for (int j = 0; j < matrix[0].length; j++){ - System.out.print(matrix[i][j]); - } - System.out.println(); - } - - - printFooter(); - System.out.println(); - } - - private boolean isEven(int number) { - return number % 2 == 0; - } - - private void printFooter() { - for (int i = 0; i < MAX_NO; i++) { - System.out.print("-"); - } - - System.out.println(); - - for (int i = 0; i < MAX_NO; i++) { - if (isEven(i)){ - System.out.printf(" %2d ", i); - } - } - } -} diff --git a/src/main/java/matrix/controller/PointReport.java b/src/main/java/matrix/controller/PointReport.java deleted file mode 100644 index bded1013..00000000 --- a/src/main/java/matrix/controller/PointReport.java +++ /dev/null @@ -1,22 +0,0 @@ -package matrix.controller; - -import matrix.domain.Point; - -import java.util.List; - -public class PointReport { - private final Point pointA; - private final Point pointB; - private final InputView inputView; - - public PointReport(List positions, InputView inputView) { - this.pointA = new Point(positions.get(0), positions.get(1)); - this.pointB = new Point(positions.get(2), positions.get(3)); - this.inputView = inputView; - } - public void print(){ - double result = pointA.getDistance(pointB); - inputView.printMatrix(pointA, pointB); - System.out.printf("두 점 사이의 거리는 %.6f\n", result); - } -} diff --git a/src/main/java/matrix/domain/GameMode.java b/src/main/java/matrix/domain/GameMode.java deleted file mode 100644 index 818436da..00000000 --- a/src/main/java/matrix/domain/GameMode.java +++ /dev/null @@ -1,9 +0,0 @@ -package matrix.domain; - -public enum GameMode { - START, END; - - public boolean isStart() { - return this == START; - } -} diff --git a/src/main/java/matrix/domain/Point.java b/src/main/java/matrix/domain/Point.java deleted file mode 100644 index 3bcfddb6..00000000 --- a/src/main/java/matrix/domain/Point.java +++ /dev/null @@ -1,38 +0,0 @@ -package matrix.domain; - -import java.util.Arrays; - -public class Point { - protected final int x; - protected final int y; - public static final int MAX_NO = 24; - - public Point(int x, int y) { - if (x > MAX_NO || y > MAX_NO){ - throw new IllegalArgumentException("x, y 둘 중 하나의 값이 24를 초과했습니다."); - } - this.x = x; - this.y = y; - } - - public double getDistance(Point point){ - return Math.sqrt(pow(this.x, point.x) + pow(this.y, point.y)); - } - - private double pow(int self, int other) { - return Math.pow(self - other, 2); - } - - public String[][] getMatrix(Point pointB) { - String [][]matrix = new String[MAX_NO][MAX_NO]; - - for (String[] height : matrix){ - Arrays.fill(height, " "); - } - - matrix[this.y][this.x] = "●"; - matrix[pointB.y][pointB.x] = "●"; - - return matrix; - } -} diff --git a/src/main/java/matrix/validation/Utils.java b/src/main/java/matrix/validation/Utils.java deleted file mode 100644 index 00d5ef1d..00000000 --- a/src/main/java/matrix/validation/Utils.java +++ /dev/null @@ -1,26 +0,0 @@ -package matrix.validation; - -import java.util.Arrays; -import java.util.List; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -public class Utils { - public static final String REGEX = "[,()-]"; - public static List filterParseIntegers(String matrixPosition) { - if (Utils.containAlphabet(matrixPosition)){ - throw new IllegalArgumentException("잘 못된 입력값 입니다."); - } - return Arrays.stream(matrixPosition.split(REGEX)) - .filter(Utils::isNotEmpty) - .map(Integer::parseInt) - .collect(Collectors.toList()); - } - private static boolean isNotEmpty(String position) { - return !position.isEmpty(); - } - - public static boolean containAlphabet(String word) { - return word.matches(".*[a-zA-Z].*"); - } -} diff --git a/src/test/java/fuel/RentCompanyTest.java b/src/test/java/fuel/RentCompanyTest.java deleted file mode 100644 index 185d7863..00000000 --- a/src/test/java/fuel/RentCompanyTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package fuel; - -import fuel.domain.Avante; -import fuel.domain.K5; -import fuel.domain.Sonata; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; - -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리터" - ); - } - - -} diff --git a/src/test/java/matrix/MatrixTest.java b/src/test/java/matrix/MatrixTest.java deleted file mode 100644 index a410e513..00000000 --- a/src/test/java/matrix/MatrixTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package matrix; - -import matrix.domain.Point; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class MatrixTest { - @Test - @DisplayName("입력값 중 하나라도 24초과라면 에러발생") - void 초과시_에러(){ - assertThatThrownBy(() -> { - Point point = new Point(25, 24); - }).isInstanceOf(IllegalArgumentException.class); - - new Point(24, 24); - - assertThatThrownBy(() -> { - Point point = new Point(24, 25); - }).isInstanceOf(IllegalArgumentException.class); - } - @Test - @DisplayName("포인트 두 점 사이의 거리를 계산한다") - void 두_점_사이의거리계산(){ - Point pointA = new Point(10, 10); - Point pointB = new Point(14, 15); - - assertEquals(pointA.getDistance(pointB), 6.403124, 0.000001); - } -} diff --git a/src/test/java/matrix/UtilsTest.java b/src/test/java/matrix/UtilsTest.java deleted file mode 100644 index f6fd98ba..00000000 --- a/src/test/java/matrix/UtilsTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package matrix; - -import matrix.validation.Utils; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import java.util.Arrays; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; - -public class UtilsTest { - @Test - @DisplayName("입력된 값 중 괄호 및 쉼표를 제거하여 x값과 y값을 추출하는 기능") - void 괄호및쉼표제거(){ - assertThat(Utils.filterParseIntegers("(10,10)-(14,15)")).isEqualTo(Arrays.asList(10, 10, 14, 15)); - } - - @Test - @DisplayName("입력된 값이 이상할 때 검증하는 기능") - void 입력된값확인(){ - assertThat(Utils.containAlphabet("123")).isFalse(); - assertThat(Utils.containAlphabet("qw12")).isTrue(); - } -} From 6cd801bf16b12cc4f74dece430d430b87bd1d56b Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Tue, 4 Jun 2024 15:07:06 +0900 Subject: [PATCH 18/24] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=20=EC=A4=91=20=ED=8A=B9=EC=88=98=EB=AC=B8=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=EC=A0=9C=EA=B1=B0=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO_RACTANGLE.md | 32 ++++++++++++++++++++++++++ src/main/java/rectangle/Point.java | 26 +++++++++++++++++++++ src/main/java/rectangle/Utils.java | 24 +++++++++++++++++++ src/test/java/rectangle/UtilsTest.java | 20 ++++++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 TODO_RACTANGLE.md create mode 100644 src/main/java/rectangle/Point.java create mode 100644 src/main/java/rectangle/Utils.java create mode 100644 src/test/java/rectangle/UtilsTest.java diff --git a/TODO_RACTANGLE.md b/TODO_RACTANGLE.md new file mode 100644 index 00000000..59e96911 --- /dev/null +++ b/TODO_RACTANGLE.md @@ -0,0 +1,32 @@ +좌표값을 두 개 입력한 경우, 두 점을 있는 직선으로 가정한다. +좌표값과 좌표값 사이는 '-' 문자로 구분한다. +좌표값을 네 개 입력한 경우, 네 점을 연결하는 사각형으로 가정한다. + +네 점이 뒤틀어진 사다리꼴이나 마름모는 제외하고 직사각형만 허용하도록 검사한다. +사각형인 경우 사각형의 넓이를 계산해서 출력한다. + +좌표를 입력하세요. +(10,10)-(22,10)-(22,18)-(10,18) + +사각형 면적은 width * height 방식으로 계산할 수 있다. +Point라는 객체를 추가해 x, y 좌표를 관리하도록 한다. + +1. 좌표값과 좌표값 사이는 '-' 문자로 구분한다. :: [-, (, )] 제거 후 +2. Rectangle 클래스에 의존성 주입하기 +## 첫번째 포인트와 두번째 포인트가 width가 됨 또는 세번째 포인트와 네번째 포인트가 width가 됨 +## 두번째 포인트와 세번째 포인트가 height가 됨 또는 두번째 포인트와 세번째 포인트가 height가 됨 +## Rectangle([Point(x, y), Point(x, y), Point(x, y), Point(x, y)]) + +2. 네 점이 뒤틀어진 사다리꼴이나 마름모는 제외하고 직사각형(정사각형 포함)만 허용하도록 검사한다. +## Rectangle([Point(x, y), Point(x, y), Point(x, y), Point(x, y)]) + +1. 첫번째 포인트 y좌표와 두번째 포인트 y좌표가 동일 선상에 있어야한다. Rectangle#isHorizon() +1. 또는 세번째 포인트 y좌표와 네번째 포인트 y좌표가 동일 선상에 있어야한다. +2. 두번째 포인트 x좌표와 세번째 포인트 x좌표가 동일 선상에 있어야한다. Rectangle#isVertical() +2. 또는 세번째 포인트 x좌표와 첫번째 포인트 x좌표가 동일 선상에 있어야한다. + +3. 사각형인 경우 사각형의 넓이를 계산해서 출력한다. +## 두번째 포인트에서 첫번재 포인트의 x차이 만큼이 width가 됨 또는 세번째 포인트와 네번째 포인트의 x차이만큼이 width가 됨 +## 세번째 포인트에서 두번째 포인트의 y차이 만큼이 height가 됨 또는 네번째 포인트와 첫번째 포인트의 y차이만큼이 height가 됨 +## Rectangle([Point(x, y), Point(x, y), Point(x, y), Point(x, y)]) + diff --git a/src/main/java/rectangle/Point.java b/src/main/java/rectangle/Point.java new file mode 100644 index 00000000..8353f7f9 --- /dev/null +++ b/src/main/java/rectangle/Point.java @@ -0,0 +1,26 @@ +package rectangle; + +import java.util.Objects; + +public class Point { + protected final int x; + protected final int y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Point point = (Point) o; + return x == point.x && y == point.y; + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } +} diff --git a/src/main/java/rectangle/Utils.java b/src/main/java/rectangle/Utils.java new file mode 100644 index 00000000..5cdfa879 --- /dev/null +++ b/src/main/java/rectangle/Utils.java @@ -0,0 +1,24 @@ +package rectangle; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class Utils { + + public static final String REGEX = "[(|,|)|-]"; + + public static List split(String input) { + return Arrays.stream(input.split(REGEX)) + .filter(Utils::isNotEmpty) + .mapToInt(Integer::parseInt) + .boxed() + .collect(Collectors.toList()); + } + + private static boolean isNotEmpty(String input){ + return !input.isEmpty(); + } +} diff --git a/src/test/java/rectangle/UtilsTest.java b/src/test/java/rectangle/UtilsTest.java new file mode 100644 index 00000000..866fc5ad --- /dev/null +++ b/src/test/java/rectangle/UtilsTest.java @@ -0,0 +1,20 @@ +package rectangle; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class UtilsTest { + + @Test + @DisplayName("입력 문자 중 특수문자를 제거 후 하는 기능") + void 특수문자제거(){ + assertThat(Utils.split("(10,10)-(22,10)-(22,18)-(10,18)")).isEqualTo(Arrays.asList(10, 10, 22, 10, 22, 18, 10, 18)); + } + + +} From 06e4e6f4ffe2f1ce93070f04914e7665ff1023ce Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Tue, 4 Jun 2024 16:18:04 +0900 Subject: [PATCH 19/24] =?UTF-8?q?feat:=20=ED=8A=B9=EC=88=98=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EA=B0=80=20=EC=A0=9C=EA=B1=B0=EB=90=9C=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=A5=BC=20Point=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO_RACTANGLE.md | 2 +- src/main/java/rectangle/Rectangle.java | 27 ++++++++++++++++++++++ src/test/java/rectangle/RectangleTest.java | 6 +++++ src/test/java/rectangle/UtilsTest.java | 11 +++++++-- 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 src/main/java/rectangle/Rectangle.java create mode 100644 src/test/java/rectangle/RectangleTest.java diff --git a/TODO_RACTANGLE.md b/TODO_RACTANGLE.md index 59e96911..b5bbd08a 100644 --- a/TODO_RACTANGLE.md +++ b/TODO_RACTANGLE.md @@ -15,7 +15,7 @@ Point라는 객체를 추가해 x, y 좌표를 관리하도록 한다. 2. Rectangle 클래스에 의존성 주입하기 ## 첫번째 포인트와 두번째 포인트가 width가 됨 또는 세번째 포인트와 네번째 포인트가 width가 됨 ## 두번째 포인트와 세번째 포인트가 height가 됨 또는 두번째 포인트와 세번째 포인트가 height가 됨 -## Rectangle([Point(x, y), Point(x, y), Point(x, y), Point(x, y)]) +## Rectangle([Point(x, y), Point(x, y), Point(x, y), Point(x, y)]) 2. 네 점이 뒤틀어진 사다리꼴이나 마름모는 제외하고 직사각형(정사각형 포함)만 허용하도록 검사한다. ## Rectangle([Point(x, y), Point(x, y), Point(x, y), Point(x, y)]) diff --git a/src/main/java/rectangle/Rectangle.java b/src/main/java/rectangle/Rectangle.java new file mode 100644 index 00000000..a745e3b2 --- /dev/null +++ b/src/main/java/rectangle/Rectangle.java @@ -0,0 +1,27 @@ +package rectangle; + +import java.util.ArrayList; +import java.util.List; +public class Rectangle{ + private final int width; + private final int height; + private List points = new ArrayList<>(); + + public Rectangle(List inputs) { + this.width = 10; + this.height = 10; + init(inputs); + } + + private void init(List inputs){ + for (int index = 0; index < inputs.size(); index++) { + points.add(new Point(inputs.get(index), inputs.get(++index))); + } + } + + + @Override + public String toString() { + return points.toString(); + } +} diff --git a/src/test/java/rectangle/RectangleTest.java b/src/test/java/rectangle/RectangleTest.java new file mode 100644 index 00000000..09c340fa --- /dev/null +++ b/src/test/java/rectangle/RectangleTest.java @@ -0,0 +1,6 @@ +package rectangle; + +public class RectangleTest { + + +} diff --git a/src/test/java/rectangle/UtilsTest.java b/src/test/java/rectangle/UtilsTest.java index 866fc5ad..1cead997 100644 --- a/src/test/java/rectangle/UtilsTest.java +++ b/src/test/java/rectangle/UtilsTest.java @@ -6,7 +6,7 @@ import java.util.Arrays; import java.util.List; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.*; public class UtilsTest { @@ -16,5 +16,12 @@ public class UtilsTest { assertThat(Utils.split("(10,10)-(22,10)-(22,18)-(10,18)")).isEqualTo(Arrays.asList(10, 10, 22, 10, 22, 18, 10, 18)); } - + @Test + @DisplayName("특수문자가 제거된 리스트를 point 객체로 바꾸는 기능") + void 특수문자제거_point객체로변경(){ + List inputs = Arrays.asList(10, 10, 22, 10, 22, 18, 10, 18); + List points = Arrays.asList(new Point(10, 10), new Point(22, 10), new Point(22, 18), new Point(10, 18)); + Rectangle rectangle = new Rectangle(inputs); + assertThat(rectangle).hasToString(points.toString()); + } } From 4a7a982053ace550ef04b7eaaa6626f188b9de3c Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Tue, 4 Jun 2024 16:38:00 +0900 Subject: [PATCH 20/24] =?UTF-8?q?feat:=20width,=20height=20=EA=B5=AC?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rectangle/Point.java | 8 +++++ src/main/java/rectangle/Rectangle.java | 1 - src/test/java/rectangle/RectangleTest.java | 41 ++++++++++++++++++++++ src/test/java/rectangle/UtilsTest.java | 10 ++---- 4 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src/main/java/rectangle/Point.java b/src/main/java/rectangle/Point.java index 8353f7f9..a2c294d5 100644 --- a/src/main/java/rectangle/Point.java +++ b/src/main/java/rectangle/Point.java @@ -23,4 +23,12 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(x, y); } + + public int width(Point pointB) { + return Math.abs(this.x - pointB.x); + } + + public int height(Point pointB) { + return Math.abs(this.y - pointB.y); + } } diff --git a/src/main/java/rectangle/Rectangle.java b/src/main/java/rectangle/Rectangle.java index a745e3b2..eb7039e1 100644 --- a/src/main/java/rectangle/Rectangle.java +++ b/src/main/java/rectangle/Rectangle.java @@ -19,7 +19,6 @@ private void init(List inputs){ } } - @Override public String toString() { return points.toString(); diff --git a/src/test/java/rectangle/RectangleTest.java b/src/test/java/rectangle/RectangleTest.java index 09c340fa..0fe74148 100644 --- a/src/test/java/rectangle/RectangleTest.java +++ b/src/test/java/rectangle/RectangleTest.java @@ -1,6 +1,47 @@ package rectangle; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + public class RectangleTest { + private Point pointA; + private Point pointB; + private Point pointC; + + @BeforeEach + void setUp(){ + pointA = new Point(10, 10); + pointB = new Point(22, 10); + pointC = new Point(22, 18); + } + + @Test + @DisplayName("특수문자가 제거된 리스트를 point 객체로 바꾸는 기능") + void 특수문자제거_point객체로변경(){ + List inputs = Arrays.asList(10, 10, 22, 10, 22, 18, 10, 18); + List points = Arrays.asList(new Point(10, 10), new Point(22, 10), new Point(22, 18), new Point(10, 18)); + + Rectangle rectangle = new Rectangle(inputs); + assertThat(rectangle).hasToString(points.toString()); + } + + @Test + @DisplayName("width 구하는 기능") + void getWidth(){ + assertThat(pointA.width(pointB)).isEqualTo(12); + } + + @Test + @DisplayName("height 구하는 기능") + void getHeight(){ + assertThat(pointB.height(pointC)).isEqualTo(8); + } } diff --git a/src/test/java/rectangle/UtilsTest.java b/src/test/java/rectangle/UtilsTest.java index 1cead997..65aa2a23 100644 --- a/src/test/java/rectangle/UtilsTest.java +++ b/src/test/java/rectangle/UtilsTest.java @@ -16,12 +16,6 @@ public class UtilsTest { assertThat(Utils.split("(10,10)-(22,10)-(22,18)-(10,18)")).isEqualTo(Arrays.asList(10, 10, 22, 10, 22, 18, 10, 18)); } - @Test - @DisplayName("특수문자가 제거된 리스트를 point 객체로 바꾸는 기능") - void 특수문자제거_point객체로변경(){ - List inputs = Arrays.asList(10, 10, 22, 10, 22, 18, 10, 18); - List points = Arrays.asList(new Point(10, 10), new Point(22, 10), new Point(22, 18), new Point(10, 18)); - Rectangle rectangle = new Rectangle(inputs); - assertThat(rectangle).hasToString(points.toString()); - } + + } From 956c06b6ca974bd52512a25c82837b5822b22bb9 Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Tue, 4 Jun 2024 16:52:46 +0900 Subject: [PATCH 21/24] =?UTF-8?q?fix:=20todo=20=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=9D=BC=EB=B6=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO_RACTANGLE.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/TODO_RACTANGLE.md b/TODO_RACTANGLE.md index b5bbd08a..5765a6b3 100644 --- a/TODO_RACTANGLE.md +++ b/TODO_RACTANGLE.md @@ -11,20 +11,27 @@ 사각형 면적은 width * height 방식으로 계산할 수 있다. Point라는 객체를 추가해 x, y 좌표를 관리하도록 한다. -1. 좌표값과 좌표값 사이는 '-' 문자로 구분한다. :: [-, (, )] 제거 후 -2. Rectangle 클래스에 의존성 주입하기 -## 첫번째 포인트와 두번째 포인트가 width가 됨 또는 세번째 포인트와 네번째 포인트가 width가 됨 -## 두번째 포인트와 세번째 포인트가 height가 됨 또는 두번째 포인트와 세번째 포인트가 height가 됨 -## Rectangle([Point(x, y), Point(x, y), Point(x, y), Point(x, y)]) +1. [v] 좌표값과 좌표값 사이는 '-' 문자로 구분한다. :: [-, (, )] 제거 후 +2. [v] Rectangle 클래스에 의존성 주입하기 +## [v] 첫번째 포인트와 두번째 포인트가 width가 됨 또는 세번째 포인트와 네번째 포인트가 width가 됨 +## [v] 두번째 포인트와 세번째 포인트가 height가 됨 또는 두번째 포인트와 세번째 포인트가 height가 됨 +## [v] Rectangle([Point(x, y), Point(x, y), Point(x, y), Point(x, y)]) 2. 네 점이 뒤틀어진 사다리꼴이나 마름모는 제외하고 직사각형(정사각형 포함)만 허용하도록 검사한다. ## Rectangle([Point(x, y), Point(x, y), Point(x, y), Point(x, y)]) +## 1번째 방법 1. 첫번째 포인트 y좌표와 두번째 포인트 y좌표가 동일 선상에 있어야한다. Rectangle#isHorizon() 1. 또는 세번째 포인트 y좌표와 네번째 포인트 y좌표가 동일 선상에 있어야한다. 2. 두번째 포인트 x좌표와 세번째 포인트 x좌표가 동일 선상에 있어야한다. Rectangle#isVertical() 2. 또는 세번째 포인트 x좌표와 첫번째 포인트 x좌표가 동일 선상에 있어야한다. +## 2번째 방법 +width:(첫번째 포인트 x좌표와 두번째 포인트 x좌표의 차이) 비교 (세번째 포인트 x좌표와 네번째 포인트 x좌표의 차이) +height:(첫번째 포인트 y좌표와 네번째 포인트 y좌표의 차이) 비교 (두번째 포인트 y좌표와 세번째 포인트 y좌표의 차이) + +만약, 둘이 같지 않다면 평행하지 않으므로 => 직사각형이 아님!! Rectangle#compare(width, height) + 3. 사각형인 경우 사각형의 넓이를 계산해서 출력한다. ## 두번째 포인트에서 첫번재 포인트의 x차이 만큼이 width가 됨 또는 세번째 포인트와 네번째 포인트의 x차이만큼이 width가 됨 ## 세번째 포인트에서 두번째 포인트의 y차이 만큼이 height가 됨 또는 네번째 포인트와 첫번째 포인트의 y차이만큼이 height가 됨 From 17053f38af493e2743a1550b487afc33e5f5c0cf Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Tue, 4 Jun 2024 17:09:24 +0900 Subject: [PATCH 22/24] =?UTF-8?q?fix:=20=EC=9D=BC=EB=B6=80=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20=EB=93=A4=EC=97=AC=EC=93=B0=EA=B8=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO_RACTANGLE.md | 3 ++- src/main/java/rectangle/Point.java | 16 ++++++++-------- src/main/java/rectangle/Rectangle.java | 2 +- src/main/java/rectangle/Utils.java | 4 ---- src/test/java/rectangle/RectangleTest.java | 10 ++++------ 5 files changed, 15 insertions(+), 20 deletions(-) diff --git a/TODO_RACTANGLE.md b/TODO_RACTANGLE.md index 5765a6b3..49ae9123 100644 --- a/TODO_RACTANGLE.md +++ b/TODO_RACTANGLE.md @@ -13,6 +13,7 @@ Point라는 객체를 추가해 x, y 좌표를 관리하도록 한다. 1. [v] 좌표값과 좌표값 사이는 '-' 문자로 구분한다. :: [-, (, )] 제거 후 2. [v] Rectangle 클래스에 의존성 주입하기 +3. [v] width, height 구하기 ## [v] 첫번째 포인트와 두번째 포인트가 width가 됨 또는 세번째 포인트와 네번째 포인트가 width가 됨 ## [v] 두번째 포인트와 세번째 포인트가 height가 됨 또는 두번째 포인트와 세번째 포인트가 height가 됨 ## [v] Rectangle([Point(x, y), Point(x, y), Point(x, y), Point(x, y)]) @@ -26,7 +27,7 @@ Point라는 객체를 추가해 x, y 좌표를 관리하도록 한다. 2. 두번째 포인트 x좌표와 세번째 포인트 x좌표가 동일 선상에 있어야한다. Rectangle#isVertical() 2. 또는 세번째 포인트 x좌표와 첫번째 포인트 x좌표가 동일 선상에 있어야한다. -## 2번째 방법 +## 2번째 방법 :: 이것이 편해보임 width:(첫번째 포인트 x좌표와 두번째 포인트 x좌표의 차이) 비교 (세번째 포인트 x좌표와 네번째 포인트 x좌표의 차이) height:(첫번째 포인트 y좌표와 네번째 포인트 y좌표의 차이) 비교 (두번째 포인트 y좌표와 세번째 포인트 y좌표의 차이) diff --git a/src/main/java/rectangle/Point.java b/src/main/java/rectangle/Point.java index a2c294d5..af8d5aef 100644 --- a/src/main/java/rectangle/Point.java +++ b/src/main/java/rectangle/Point.java @@ -11,6 +11,14 @@ public Point(int x, int y) { this.y = y; } + public int width(Point targetPoint) { + return Math.abs(this.x - targetPoint.x); + } + + public int height(Point targetPoint) { + return Math.abs(this.y - targetPoint.y); + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -23,12 +31,4 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(x, y); } - - public int width(Point pointB) { - return Math.abs(this.x - pointB.x); - } - - public int height(Point pointB) { - return Math.abs(this.y - pointB.y); - } } diff --git a/src/main/java/rectangle/Rectangle.java b/src/main/java/rectangle/Rectangle.java index eb7039e1..29f2aec5 100644 --- a/src/main/java/rectangle/Rectangle.java +++ b/src/main/java/rectangle/Rectangle.java @@ -13,7 +13,7 @@ public Rectangle(List inputs) { init(inputs); } - private void init(List inputs){ + private void init(List inputs) { for (int index = 0; index < inputs.size(); index++) { points.add(new Point(inputs.get(index), inputs.get(++index))); } diff --git a/src/main/java/rectangle/Utils.java b/src/main/java/rectangle/Utils.java index 5cdfa879..45e9c66c 100644 --- a/src/main/java/rectangle/Utils.java +++ b/src/main/java/rectangle/Utils.java @@ -1,13 +1,10 @@ package rectangle; import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.stream.Collectors; public class Utils { - public static final String REGEX = "[(|,|)|-]"; public static List split(String input) { @@ -17,7 +14,6 @@ public static List split(String input) { .boxed() .collect(Collectors.toList()); } - private static boolean isNotEmpty(String input){ return !input.isEmpty(); } diff --git a/src/test/java/rectangle/RectangleTest.java b/src/test/java/rectangle/RectangleTest.java index 0fe74148..70e98171 100644 --- a/src/test/java/rectangle/RectangleTest.java +++ b/src/test/java/rectangle/RectangleTest.java @@ -15,7 +15,7 @@ public class RectangleTest { private Point pointC; @BeforeEach - void setUp(){ + void setUp() { pointA = new Point(10, 10); pointB = new Point(22, 10); pointC = new Point(22, 18); @@ -23,7 +23,7 @@ void setUp(){ @Test @DisplayName("특수문자가 제거된 리스트를 point 객체로 바꾸는 기능") - void 특수문자제거_point객체로변경(){ + void 특수문자제거_point객체로변경() { List inputs = Arrays.asList(10, 10, 22, 10, 22, 18, 10, 18); List points = Arrays.asList(new Point(10, 10), new Point(22, 10), new Point(22, 18), new Point(10, 18)); @@ -33,15 +33,13 @@ void setUp(){ @Test @DisplayName("width 구하는 기능") - void getWidth(){ + void getWidth() { assertThat(pointA.width(pointB)).isEqualTo(12); } @Test @DisplayName("height 구하는 기능") - void getHeight(){ + void getHeight() { assertThat(pointB.height(pointC)).isEqualTo(8); } - - } From 3ed288bd875fa6b5fbe3ee4caab88ee8363e60ac Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Mon, 26 Aug 2024 13:50:00 +0900 Subject: [PATCH 23/24] =?UTF-8?q?feat:=20=EC=82=AC=EA=B0=81=ED=98=95=20?= =?UTF-8?q?=EB=84=93=EC=9D=B4=20=EA=B5=AC=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=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 --- build.gradle | 5 +++++ src/main/java/rectangle/Point.java | 1 + src/main/java/rectangle/Rectangle.java | 23 ++++++++++++++++++---- src/test/java/rectangle/RectangleTest.java | 19 ++++++++++++++++-- 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 8172fb73..cb2e1884 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,11 @@ repositories { } dependencies { + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + + testCompileOnly 'org.projectlombok:lombok:1.18.12' // 테스트 의존성 추가 + testAnnotationProcessor 'org.projectlombok:lombok:1.18.12' // 테스트 의존성 추가 testImplementation "org.junit.jupiter:junit-jupiter:5.7.2" testImplementation "org.assertj:assertj-core:3.19.0" } diff --git a/src/main/java/rectangle/Point.java b/src/main/java/rectangle/Point.java index af8d5aef..c80835eb 100644 --- a/src/main/java/rectangle/Point.java +++ b/src/main/java/rectangle/Point.java @@ -19,6 +19,7 @@ public int height(Point targetPoint) { return Math.abs(this.y - targetPoint.y); } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/rectangle/Rectangle.java b/src/main/java/rectangle/Rectangle.java index 29f2aec5..9c085d80 100644 --- a/src/main/java/rectangle/Rectangle.java +++ b/src/main/java/rectangle/Rectangle.java @@ -5,22 +5,37 @@ public class Rectangle{ private final int width; private final int height; + private List points = new ArrayList<>(); + private static final int ARRAY_SIZE = 2; public Rectangle(List inputs) { - this.width = 10; - this.height = 10; init(inputs); + this.width = getWith(); + this.height = getHeight(); + } + + public int getArea() { + return width * height; } private void init(List inputs) { - for (int index = 0; index < inputs.size(); index++) { - points.add(new Point(inputs.get(index), inputs.get(++index))); + for (int pointIndex = 0; pointIndex < inputs.size(); pointIndex++) { + points.add(new Point(inputs.get(pointIndex), inputs.get(++pointIndex))); } } + private int getWith() { + return points.get(0).width(points.get(1)); + } + + private int getHeight() { + return points.get(1).height(points.get(3)); + } + @Override public String toString() { return points.toString(); } + } diff --git a/src/test/java/rectangle/RectangleTest.java b/src/test/java/rectangle/RectangleTest.java index 70e98171..4511b11f 100644 --- a/src/test/java/rectangle/RectangleTest.java +++ b/src/test/java/rectangle/RectangleTest.java @@ -8,27 +8,30 @@ import java.util.List; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.setRemoveAssertJRelatedElementsFromStackTrace; public class RectangleTest { private Point pointA; private Point pointB; private Point pointC; + private List inputs; + @BeforeEach void setUp() { pointA = new Point(10, 10); pointB = new Point(22, 10); pointC = new Point(22, 18); + inputs = Arrays.asList(10, 10, 22, 10, 22, 18, 10, 18); } @Test @DisplayName("특수문자가 제거된 리스트를 point 객체로 바꾸는 기능") void 특수문자제거_point객체로변경() { - List inputs = Arrays.asList(10, 10, 22, 10, 22, 18, 10, 18); List points = Arrays.asList(new Point(10, 10), new Point(22, 10), new Point(22, 18), new Point(10, 18)); Rectangle rectangle = new Rectangle(inputs); - assertThat(rectangle).hasToString(points.toString()); + assertThat(points).hasToString(rectangle.toString()); } @Test @@ -42,4 +45,16 @@ void getWidth() { void getHeight() { assertThat(pointB.height(pointC)).isEqualTo(8); } + + @Test + @DisplayName("사각형의 넓이를 구하는 기능") + void getArea() { + Rectangle rectangle = new Rectangle(inputs); + int area = rectangle.getArea(); + + assertThat(area).isEqualTo(96); + } + + + } From e5a43da6972ac70f44278d195ed3772801213a5d Mon Sep 17 00:00:00 2001 From: kimhyunso Date: Mon, 26 Aug 2024 15:32:10 +0900 Subject: [PATCH 24/24] =?UTF-8?q?feat:=20=EC=82=BC=EA=B0=81=ED=98=95=20?= =?UTF-8?q?=EB=84=93=EC=9D=B4=20=EA=B5=AC=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=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 --- src/main/java/triangle/Point.java | 35 ++++++++++++++++ src/main/java/triangle/Triangle.java | 36 ++++++++++++++++ src/main/java/{rectangle => utils}/Utils.java | 2 +- src/test/java/triangle/TriangleTest.java | 41 +++++++++++++++++++ .../java/{rectangle => utils}/UtilsTest.java | 3 +- 5 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 src/main/java/triangle/Point.java create mode 100644 src/main/java/triangle/Triangle.java rename src/main/java/{rectangle => utils}/Utils.java (96%) create mode 100644 src/test/java/triangle/TriangleTest.java rename src/test/java/{rectangle => utils}/UtilsTest.java (91%) diff --git a/src/main/java/triangle/Point.java b/src/main/java/triangle/Point.java new file mode 100644 index 00000000..267af37e --- /dev/null +++ b/src/main/java/triangle/Point.java @@ -0,0 +1,35 @@ +package triangle; + +import java.util.Objects; + +public class Point { + protected final int x; + protected final int y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + public int width(Point targetPoint) { + return Math.abs(this.x - targetPoint.x); + } + + public int height(Point targetPoint) { + return Math.abs(this.y - targetPoint.y); + } + + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Point point = (Point) o; + return x == point.x && y == point.y; + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } +} diff --git a/src/main/java/triangle/Triangle.java b/src/main/java/triangle/Triangle.java new file mode 100644 index 00000000..4901624a --- /dev/null +++ b/src/main/java/triangle/Triangle.java @@ -0,0 +1,36 @@ +package triangle; + +import java.util.ArrayList; +import java.util.List; + +public class Triangle { + + private List points = new ArrayList<>(); + public Triangle(List inputs) { + init(inputs); + } + + private void init(List inputs) { + for (int pointIndex = 0; pointIndex < inputs.size(); pointIndex++) { + points.add(new Point(inputs.get(pointIndex), inputs.get(++pointIndex))); + } + } + + public double getArea() { + int a = points.get(0).height(points.get(1)); + int b = points.get(1).height(points.get(2)); + int c = points.get(0).width(points.get(2)); + int s = s(a, b, c); + + return Math.floor(Math.sqrt(s * (s - a) * (s - b) * (s - c))); + } + + public int s(int a, int b, int c) { + return (a + b + c) / 2; + } + + @Override + public String toString() { + return points.toString(); + } +} diff --git a/src/main/java/rectangle/Utils.java b/src/main/java/utils/Utils.java similarity index 96% rename from src/main/java/rectangle/Utils.java rename to src/main/java/utils/Utils.java index 45e9c66c..0912eeb7 100644 --- a/src/main/java/rectangle/Utils.java +++ b/src/main/java/utils/Utils.java @@ -1,4 +1,4 @@ -package rectangle; +package utils; import java.util.Arrays; import java.util.List; diff --git a/src/test/java/triangle/TriangleTest.java b/src/test/java/triangle/TriangleTest.java new file mode 100644 index 00000000..1ba52841 --- /dev/null +++ b/src/test/java/triangle/TriangleTest.java @@ -0,0 +1,41 @@ +package triangle; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import utils.Utils; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.in; + +public class TriangleTest { + + private List inputs; + + + @BeforeEach + void setUp() { + inputs = Utils.split("(10,10)-(14,15)-(20,8)"); + } + + @Test + @DisplayName("특수문자가 제거된 리스트를 point 객체로 바꾸는 기능") + void 특수문자제거_point객체로변경() { + List points = Arrays.asList(new Point(10, 10), new Point(14, 15), new Point(20, 8)); + + Triangle triangle = new Triangle(inputs); + assertThat(points).hasToString(triangle.toString()); + } + + @Test + @DisplayName("삼각형 넓이 구하는 기능") + void getArea() { + Triangle triangle = new Triangle(inputs); + double area = triangle.getArea(); + assertThat(area).isEqualTo(16.0); + } + +} diff --git a/src/test/java/rectangle/UtilsTest.java b/src/test/java/utils/UtilsTest.java similarity index 91% rename from src/test/java/rectangle/UtilsTest.java rename to src/test/java/utils/UtilsTest.java index 65aa2a23..d60e185a 100644 --- a/src/test/java/rectangle/UtilsTest.java +++ b/src/test/java/utils/UtilsTest.java @@ -1,10 +1,9 @@ -package rectangle; +package utils; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import java.util.Arrays; -import java.util.List; import static org.assertj.core.api.AssertionsForClassTypes.*;