[인프런 Java] 다형성 - 역할과 구현 예제2

코드 속의 "진돌"·2024년 3월 28일
0
post-thumbnail

✅ 다형성 - 역할과 구현 예제2


새로운 Model3 차량을 추가해야 하는 요구사항이 들어왔다. 이 요구사항을 맞추려면 기존에 Driver 코드를 많이 변경해야 한다.
드라이버는 K3Car도 운전할 수 있고, Model3Car도 운전할 줄 알아야 한다. 참고로 둘을 동시에 운전하는 것은 아니다.



✏️ 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");
  }
}



✏️ Driver - 코드 변경

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() 메서드에서 가지고 있는 차량에 따른 분기



✏️ CarMain0 - 코드 변경

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

profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글