Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .idea/encodings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 24 additions & 0 deletions src/main/java/fuel/Avante.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package fuel;

public class Avante extends Car{
private final int DISTANCE_PER_LITER = 15;

public Avante(int distanceToTravel) {
super(distanceToTravel);
}

@Override
double getDistancePerLiter() {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

접근제어자가 있어야할 것 같습니다

return DISTANCE_PER_LITER;
}

@Override
double getTripDistance() {
return super.distanceToTravel;
}

@Override
public String getName() {
return "Avante";
}
}
31 changes: 31 additions & 0 deletions src/main/java/fuel/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package fuel;

public abstract class Car {
protected final int distanceToTravel;

protected Car(int distanceToTravel) {
this.distanceToTravel = distanceToTravel;
}

/**
* 리터당 이동 거리. 즉, 연비
*/
abstract double getDistancePerLiter();

/**
* 여행하려는 거리
*/
abstract double getTripDistance();

/**
* 차종의 이름
*/
public abstract String getName();

/**
* 주입해야할 연료량을 구한다.
*/
public double getChargeQuantity() {
return getTripDistance() / getDistancePerLiter();
}
}
24 changes: 24 additions & 0 deletions src/main/java/fuel/K5.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package fuel;

public class K5 extends Car{
private final int DISTANCE_PER_LITER = 13;

public K5(int distanceToTravel) {
super(distanceToTravel);
}

@Override
double getDistancePerLiter() {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

접근 제어자 붙여주세요

return DISTANCE_PER_LITER;
}

@Override
double getTripDistance() {
return super.distanceToTravel;
}

@Override
public String getName() {
return "K5";
}
}
28 changes: 28 additions & 0 deletions src/main/java/fuel/RentCompany.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package fuel;

import java.util.ArrayList;
import java.util.List;

public class RentCompany {
private List<Car> cars = new ArrayList<>();

public static RentCompany create() {
return new RentCompany();
}

public void addCar(Car car) {
cars.add(car);
}

public String generateReport() {
StringBuilder sb = new StringBuilder();
for (Car car : cars) {
sb.append(car.getName());
sb.append(" : ");
sb.append((int) car.getChargeQuantity());
sb.append("리터");
sb.append("\n");
}
return sb.toString();
}
}
24 changes: 24 additions & 0 deletions src/main/java/fuel/Sonata.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package fuel;

public class Sonata extends Car{
private final int DISTANCE_PER_LITER = 10;

public Sonata(int distanceToTravel) {
super(distanceToTravel);
}

@Override
double getDistancePerLiter() {
return DISTANCE_PER_LITER;
}

@Override
double getTripDistance() {
return super.distanceToTravel;
}

@Override
public String getName() {
return "Sonata";
}
}
29 changes: 29 additions & 0 deletions src/test/java/RentCompanyTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import fuel.Avante;
import fuel.K5;
import fuel.RentCompany;
import fuel.Sonata;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

public class RentCompanyTest {
private static final String NEWLINE = "\n";

@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();
assertEquals(report, "Sonata : 15리터" + NEWLINE +
"K5 : 20리터" + NEWLINE +
"Sonata : 12리터" + NEWLINE +
"Avante : 20리터" + NEWLINE +
"K5 : 30리터" + NEWLINE);
}

}