간단한 운전자와 자동차의 관계를 개발해보자 Driver 는 K3Car 를 운전하는 프로그램이다
<운전자>
package poly.car0;
public class Driver {
private K3Car k3Car; //null임. 즉 아직 자동차가 없는 상태
public void setK3Car(K3Car k3Car) { //자동차 기능을(참조값) 넣어주는 메서
this.k3Car = k3Car;
}
public void drive() {
System.out.println("자동차를 운전합니다.");
k3Car.startEngine();
k3Car.pressAccelerator();
k3Car.offEngine();
}
}
<자동차 K3Car>
package poly.car0;
public class K3Car {
public void startEngine() { // K3Car 기능 메서드 1
System.out.println("K3Car.startEngine");
}
public void offEngine() { // K3Car 기능 메서드 2
System.out.println("K3Car.offEngine");
}
public void pressAccelerator() { // K3Car 기능 메서드 3
System.out.println("K3Car.pressAccelerator");
}
}
<메인>
package poly.car0;
public class CarMain0 {
public static void main(String[] args) {
Driver driver = new Driver();
K3Car k3Car = new K3Car();
driver.setK3Car(k3Car); // Driver에 setK3Car를 이용하여 k3Car기능을 넣어
driver.drive();
}
}
//Driver 와 K3Car 를 먼저 생성한다.
//그리고 driver.setK3Car(..) 를 통해 driver 에게 k3Car 의 참조를 넘겨준다.
//driver.driver() 를 호출한다.
<실행결과>
자동차를 운전합니다. K3Car.startEngine K3Car.pressAccelerator K3Car.offEngine

새로운 Model3 차량을 추가해야 하는 요구사항이 들어왔다.
이 요구사항을 맞추려면 기존에 Driver 코드를 많이 변경해야 한다. 드라이버는 K3Car 도 운전할 수 있고, Model3Car 도 운전할 줄 있어야 한다.
(참고로 둘을 동시에 운전하는 것은 아니다.)
<자동차 Model3Car>
package poly.car0;
public class Model3Car {
public void startEngine() { //Model3Car 기능 메서드 1
System.out.println("Model3Car.startEngine");
}
public void offEngine() { //Model3Car 기능 메서드 2
System.out.println("Model3Car.offEngine");
}
public void pressAccelerator() { //Model3Car 기능 메서드 3
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();
}
}
}
<메인-코드 변경>