새로운 Model3
차량을 추가해야 하는 요구사항이 들어왔다. 이 요구사항을 맞추려면 기존에 Driver
코드를 많이 변경해야 한다.
드라이버는 K3Car
도 운전할 수 있고, Model3Car
도 운전할 줄 알아야 한다. 참고로 둘을 동시에 운전하는 것은 아니다.
package poly.car0;
public class Model3Car {
public void startEngine() {
System.out.println("Model3Car.startEngine");
}
public void offEngine() {
System.out.println("Model3Car.offEngine");
}
public void pressAccelerator() {
System.out.println("Model3Car.pressAccelerator");
}
}
package poly.car0;
public class Driver {
private K3Car k3Car;
private Model3Car model3Car; // 추가
public void setK3Car(K3Car k3Car) {
this.k3Car = k3Car;
}
// 추가
public void setModel3Car(Model3Car model3Car) {
this.model3Car = model3Car;
}
// 변경
public void drive() {
System.out.println("자동차를 운전합니다.");
if (k3Car != null) {
k3Car.startEngine();
k3Car.pressAccelerator();
k3Car.offEngine();
} else if (model3Car != null) {
model3Car.startEngine();
model3Car.pressAccelerator();
model3Car.offEngine();
}
}
}
드라이버는 K3Car
, Model3Car
를 모두 운전할 줄 알아야 한다. 다음과 같은 코드 변경이 필요하다.
Model3Car
용 필드 추가setModel3Car(...)
메서드 추가drive()
메서드에서 가지고 있는 차량에 따른 분기package poly.car0;
public class CarMain0 {
public static void main(String[] args) {
Driver driver = new Driver();
K3Car k3Car = new K3Car();
driver.setK3Car(k3Car);
driver.drive();
// 추가
Model3Car model3Car = new Model3Car();
driver.setK3Car(null);
driver.setModel3Car(model3Car);
driver.drive();
}
}
K3
를 운전하던 운전자가 Model3
로 차량을 변경해서 운전하는 코드이다.driver.setK3Car(null)
을 통해서 기존 K3Car
의 참조를 제거한다.driver.setModel3Car(model3Car)
를 통해서 새로운 model3Car
의 참조를 추가한다.driver.driver()
를 호출한다.여기서 새로운 차량을 추가한다면 또 다시 Driver
코드를 많이 변경해야 한다. 만약 운전할 수 있는 차량의 종류가 계속 늘어난다면 점점 더 변경해야 하는 코드가 많아질 것이다.
출처 : 김영한의 실전 자바 - 기본편
https://www.inflearn.com/course/김영한의-실전-자바-기본편/dashboard