From d21f70d5975a0c4989ba9bf3f925d1ad7b48eab0 Mon Sep 17 00:00:00 2001 From: tis <92219795+this-is-spear@users.noreply.github.com> Date: Mon, 4 Jul 2022 16:12:01 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat=20:=20=EC=97=B0=EB=A3=8C=EC=A3=BC?= =?UTF-8?q?=EC=9E=85=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/rentcompany/Avante.java | 42 +++++++++++++++++++ src/main/java/rentcompany/Car.java | 30 +++++++++++++ src/main/java/rentcompany/K5.java | 28 +++++++++++++ src/main/java/rentcompany/RentCompany.java | 25 +++++++++++ src/main/java/rentcompany/Sonata.java | 28 +++++++++++++ .../java/rentcompany/RentCompanyTest.java | 28 +++++++++++++ 6 files changed, 181 insertions(+) create mode 100644 src/main/java/rentcompany/Avante.java create mode 100644 src/main/java/rentcompany/Car.java create mode 100644 src/main/java/rentcompany/K5.java create mode 100644 src/main/java/rentcompany/RentCompany.java create mode 100644 src/main/java/rentcompany/Sonata.java create mode 100644 src/test/java/rentcompany/RentCompanyTest.java diff --git a/src/main/java/rentcompany/Avante.java b/src/main/java/rentcompany/Avante.java new file mode 100644 index 00000000..0e5a3f03 --- /dev/null +++ b/src/main/java/rentcompany/Avante.java @@ -0,0 +1,42 @@ +package rentcompany; + +import java.util.Objects; + +public class Avante extends Car { + + private static final double fuelEfficiency = 15; + private static final String name = "Avante"; + + private final double distance; + public Avante(double distance) { + this.distance = distance; + } + + @Override + double getDistancePerLiter() { + return fuelEfficiency; + } + + @Override + double getTripDistance() { + return distance; + } + + @Override + String getName() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Avante avante = (Avante) o; + return Double.compare(avante.distance, distance) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(distance); + } +} diff --git a/src/main/java/rentcompany/Car.java b/src/main/java/rentcompany/Car.java new file mode 100644 index 00000000..c8bc6340 --- /dev/null +++ b/src/main/java/rentcompany/Car.java @@ -0,0 +1,30 @@ +package rentcompany; + +public abstract class Car { + + /** + * 리터당 이동 거리. 즉, 연비 + */ + abstract double getDistancePerLiter(); + + /** + * 여행하려는 거리 + */ + abstract double getTripDistance(); + + /** + * 차종의 이름 + */ + abstract String getName(); + + /** + * 주입해야할 연료량을 구한다. + */ + double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } + + public String report() { + return getName() + " : " + (int)getChargeQuantity() + "리터"; + } +} diff --git a/src/main/java/rentcompany/K5.java b/src/main/java/rentcompany/K5.java new file mode 100644 index 00000000..0d01d61c --- /dev/null +++ b/src/main/java/rentcompany/K5.java @@ -0,0 +1,28 @@ +package rentcompany; + +public class K5 extends Car { + + private static final double fuelEfficiency = 13; + private static String name = "K5"; + private final double distance; + + public K5(int distance) { + this.distance = distance; + + } + + @Override + double getDistancePerLiter() { + return fuelEfficiency; + } + + @Override + double getTripDistance() { + return distance; + } + + @Override + String getName() { + return name; + } +} diff --git a/src/main/java/rentcompany/RentCompany.java b/src/main/java/rentcompany/RentCompany.java new file mode 100644 index 00000000..d44fbc84 --- /dev/null +++ b/src/main/java/rentcompany/RentCompany.java @@ -0,0 +1,25 @@ +package rentcompany; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class RentCompany { + + private static final String NEWLINE = System.getProperty("line.separator"); + private final List carList = new ArrayList<>(); + + public static RentCompany create() { + return new RentCompany(); + } + + public void addCar(Car car) { + carList.add(car); + } + + public String generateReport() { + return carList.stream() + .map(Car::report) + .collect(Collectors.joining(NEWLINE)) + NEWLINE; + } +} diff --git a/src/main/java/rentcompany/Sonata.java b/src/main/java/rentcompany/Sonata.java new file mode 100644 index 00000000..f2d62f10 --- /dev/null +++ b/src/main/java/rentcompany/Sonata.java @@ -0,0 +1,28 @@ +package rentcompany; + +public class Sonata extends Car { + + private static final double fuelEfficiency = 10; + private static String name = "Sonata"; + private final double distance; + + public Sonata(int distance) { + this.distance = distance; + + } + + @Override + double getDistancePerLiter() { + return fuelEfficiency; + } + + @Override + double getTripDistance() { + return distance; + } + + @Override + String getName() { + return name; + } +} diff --git a/src/test/java/rentcompany/RentCompanyTest.java b/src/test/java/rentcompany/RentCompanyTest.java new file mode 100644 index 00000000..0a892527 --- /dev/null +++ b/src/test/java/rentcompany/RentCompanyTest.java @@ -0,0 +1,28 @@ +package rentcompany; + +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 22ca1012779911c3304d4a599cb08501676685b6 Mon Sep 17 00:00:00 2001 From: tis <92219795+this-is-spear@users.noreply.github.com> Date: Mon, 4 Jul 2022 16:18:49 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refact=20:=20immutable=20=ED=95=98=EA=B2=8C?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + src/main/java/rentcompany/Avante.java | 7 +++---- src/main/java/rentcompany/K5.java | 5 ++--- src/main/java/rentcompany/RentCompany.java | 2 +- src/main/java/rentcompany/Sonata.java | 5 ++--- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index 8172fb73..27a46c65 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,7 @@ repositories { } dependencies { + implementation 'org.jetbrains:annotations:20.1.0' testImplementation "org.junit.jupiter:junit-jupiter:5.7.2" testImplementation "org.assertj:assertj-core:3.19.0" } diff --git a/src/main/java/rentcompany/Avante.java b/src/main/java/rentcompany/Avante.java index 0e5a3f03..99eb59b2 100644 --- a/src/main/java/rentcompany/Avante.java +++ b/src/main/java/rentcompany/Avante.java @@ -5,10 +5,9 @@ public class Avante extends Car { private static final double fuelEfficiency = 15; - private static final String name = "Avante"; - private final double distance; - public Avante(double distance) { + + public Avante(final double distance) { this.distance = distance; } @@ -24,7 +23,7 @@ public Avante(double distance) { @Override String getName() { - return name; + return "Avante"; } @Override diff --git a/src/main/java/rentcompany/K5.java b/src/main/java/rentcompany/K5.java index 0d01d61c..c38eefe8 100644 --- a/src/main/java/rentcompany/K5.java +++ b/src/main/java/rentcompany/K5.java @@ -3,10 +3,9 @@ public class K5 extends Car { private static final double fuelEfficiency = 13; - private static String name = "K5"; private final double distance; - public K5(int distance) { + public K5(final double distance) { this.distance = distance; } @@ -23,6 +22,6 @@ public K5(int distance) { @Override String getName() { - return name; + return "K5"; } } diff --git a/src/main/java/rentcompany/RentCompany.java b/src/main/java/rentcompany/RentCompany.java index d44fbc84..934a000c 100644 --- a/src/main/java/rentcompany/RentCompany.java +++ b/src/main/java/rentcompany/RentCompany.java @@ -13,7 +13,7 @@ public static RentCompany create() { return new RentCompany(); } - public void addCar(Car car) { + public void addCar(final Car car) { carList.add(car); } diff --git a/src/main/java/rentcompany/Sonata.java b/src/main/java/rentcompany/Sonata.java index f2d62f10..42641b3e 100644 --- a/src/main/java/rentcompany/Sonata.java +++ b/src/main/java/rentcompany/Sonata.java @@ -3,10 +3,9 @@ public class Sonata extends Car { private static final double fuelEfficiency = 10; - private static String name = "Sonata"; private final double distance; - public Sonata(int distance) { + public Sonata(final double distance) { this.distance = distance; } @@ -23,6 +22,6 @@ public Sonata(int distance) { @Override String getName() { - return name; + return "Sonata"; } } From 88d3d1850f53e1f50de7542f693ed41c5b5ff8ee Mon Sep 17 00:00:00 2001 From: tis <92219795+this-is-spear@users.noreply.github.com> Date: Mon, 4 Jul 2022 18:09:40 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refact=20:=20interface=EB=A5=BC=20=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=ED=95=9C=20=EA=B2=B0=ED=95=A9=EB=A0=A5=20=EC=B5=9C?= =?UTF-8?q?=EC=86=8C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcompany/Car.java | 3 ++- src/main/java/rentcompany/RentCompany.java | 10 +++++----- src/main/java/rentcompany/Vehicle.java | 5 +++++ src/test/java/rentcompany/RentCompanyTest.java | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) create mode 100644 src/main/java/rentcompany/Vehicle.java diff --git a/src/main/java/rentcompany/Car.java b/src/main/java/rentcompany/Car.java index c8bc6340..debe3229 100644 --- a/src/main/java/rentcompany/Car.java +++ b/src/main/java/rentcompany/Car.java @@ -1,6 +1,6 @@ package rentcompany; -public abstract class Car { +public abstract class Car implements Vehicle{ /** * 리터당 이동 거리. 즉, 연비 @@ -24,6 +24,7 @@ public abstract class Car { return getTripDistance() / getDistancePerLiter(); } + @Override public String report() { return getName() + " : " + (int)getChargeQuantity() + "리터"; } diff --git a/src/main/java/rentcompany/RentCompany.java b/src/main/java/rentcompany/RentCompany.java index 934a000c..2ce16d60 100644 --- a/src/main/java/rentcompany/RentCompany.java +++ b/src/main/java/rentcompany/RentCompany.java @@ -7,19 +7,19 @@ public class RentCompany { private static final String NEWLINE = System.getProperty("line.separator"); - private final List carList = new ArrayList<>(); + private final List vehicleList = new ArrayList<>(); public static RentCompany create() { return new RentCompany(); } - public void addCar(final Car car) { - carList.add(car); + public void addCar(final Vehicle vehicle) { + vehicleList.add(vehicle); } public String generateReport() { - return carList.stream() - .map(Car::report) + return vehicleList.stream() + .map(Vehicle::report) .collect(Collectors.joining(NEWLINE)) + NEWLINE; } } diff --git a/src/main/java/rentcompany/Vehicle.java b/src/main/java/rentcompany/Vehicle.java new file mode 100644 index 00000000..ac699d48 --- /dev/null +++ b/src/main/java/rentcompany/Vehicle.java @@ -0,0 +1,5 @@ +package rentcompany; + +public interface Vehicle { + String report(); +} diff --git a/src/test/java/rentcompany/RentCompanyTest.java b/src/test/java/rentcompany/RentCompanyTest.java index 0a892527..cc0556af 100644 --- a/src/test/java/rentcompany/RentCompanyTest.java +++ b/src/test/java/rentcompany/RentCompanyTest.java @@ -9,7 +9,7 @@ public class RentCompanyTest { @Test public void report() throws Exception { - RentCompany company = RentCompany.create(); // factory method를 사용해 생성 + RentCompany company = RentCompany.create(); company.addCar(new Sonata(150)); company.addCar(new K5(260)); company.addCar(new Sonata(120));