역할과 구현예제1

간단한 운전자와 자동차의 관계를 개발해보자 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

Untitled

역할과 구현예제2

새로운 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();
  }
 }

}

<메인-코드 변경>