연료 주입
요구사항
상속을 이용한 문제 풀이
package abstract_rentcar;
public abstract class AbstractRentCar {
private final int distance;
public AbstractRentCar(int distance) {
this.distance = distance;
}
public abstract int getFuelEfficiency();
public abstract String getCarName();
public String getRentCarInfo() {
return getCarName() + " : " + getRequiredRemainingFuel() + "리터";
}
public int getRequiredRemainingFuel() {
return distance / getFuelEfficiency();
}
}package abstract_rentcar;
public class K5 extends AbstractRentCar {
private final int fuelEfficiency = 13;
private final String carName = "K5";
public K5(int distance) {
super(distance);
}
@Override
public String getCarName() {
return carName;
}
@Override
public int getFuelEfficiency() {
return fuelEfficiency;
}
}package abstract_rentcar;
public class Sonata extends AbstractRentCar {
private final int fuelEfficiency = 10;
private final String carName = "Sonata";
public Sonata(int distance) {
super(distance);
}
@Override
public String getCarName() {
return carName;
}
@Override
public int getFuelEfficiency() {
return fuelEfficiency;
}
}package abstract_rentcar;
public class Avante extends AbstractRentCar {
private final int fuelEfficiency = 15;
private final String carName = "Avante";
public Avante(int distance) {
super(distance);
}
@Override
public String getCarName() {
return carName;
}
@Override
public int getFuelEfficiency() {
return fuelEfficiency;
}
}인터페이스를 이용한 문제 풀이
package implement_rentcar;
public interface ImplementRentCar {
int getFuelEfficiency();
String getCarName();
String getRentCarInfo();
int getRequiredRemainingFuel();
}package implement_rentcar;
public class K5 implements ImplementRentCar {
private final int fuelEfficiency = 13;
private final String carName = "K5";
private final int distance;
public K5(int distance) {
this.distance = distance;
}
@Override
public int getFuelEfficiency() {
return fuelEfficiency;
}
@Override
public String getCarName() {
return carName;
}
@Override
public String getRentCarInfo() {
return getCarName() + " : " + getRequiredRemainingFuel() + "리터";
}
@Override
public int getRequiredRemainingFuel() {
return distance / getFuelEfficiency();
}
}package implement_rentcar;
public class Sonata implements ImplementRentCar {
private final int fuelEfficiency = 10;
private final String carName = "Sonata";
private final int distance;
public Sonata(int distance) {
this.distance = distance;
}
@Override
public int getFuelEfficiency() {
return fuelEfficiency;
}
@Override
public String getCarName() {
return carName;
}
@Override
public String getRentCarInfo() {
return getCarName() + " : " + getRequiredRemainingFuel() + "리터";
}
@Override
public int getRequiredRemainingFuel() {
return distance / getFuelEfficiency();
}
}package implement_rentcar;
public class Avante implements ImplementRentCar {
private final int fuelEfficiency = 15;
private final String carName = "Avante";
private final int distance;
public Avante(int distance) {
this.distance = distance;
}
@Override
public int getFuelEfficiency() {
return fuelEfficiency;
}
@Override
public String getCarName() {
return carName;
}
@Override
public String getRentCarInfo() {
return getCarName() + " : " + getRequiredRemainingFuel() + "리터";
}
@Override
public int getRequiredRemainingFuel() {
return distance / getFuelEfficiency();
}
}이번 진행한 미션은 상속과 인터페이스에 대해 다루었고 두 설계 방식을 코드로 구현 하면서 어떤 관점에서 편리한지, 불편한지 등 몸소 경험할 수 있는 미션이었다.
또한 해당 미션은 학습 테스트라는 방식으로 제공 되었는데, 학습 하는 대상이 훨씬 더 접근하기 쉽도록 스켈레톤 코드가 일부 제공 되고 그 코드를 퍼즐 맞추듯 작성한 뒤 모든 테스트를 통과 시키면 된다.
이 방법은 코드 작성자가 직접 테스트를 할 필요 없이 작성된 테스트가 통과 할 수 있는 선에서 많은 리팩터링을 할 수 있도록 만들어내어 편리했다.
Last updated