메인 메서드
public class Main {
public static void main(String[] args) {
// 일반 엔진과 자동차 조합
Engine basicEngine = new Engine(150);
Car basicCar = new Car(basicEngine);
basicCar.startCar(); // 출력: 🚗 150 마력으로 출발!
// 터보 엔진과 자동차 조합
Engine turboEngine = new TurboEngine(150, 50);
Car turboCar = new Car(turboEngine);
turboCar.startCar(); // 출력: 🏎️ 터보 출력 포함 200 마력으로 출발!
}
}
자동차 클래스 (생성자로 엔진을 주입받아 조합하는 방식)
public class Car {
private Engine engine;
// 생성자 주입 방식으로 엔진을 주입
// 어떤 엔진이든 엔진을 상속받는 타입이라면 조립이 가능!
public Car(Engine engine) {
this.engine = engine;
}
public void startCar() {
engine.start();
}
}
엔진 클래스(부모 클래스)
public class Engine {
private int horsePower;
public Engine(int horsePower) {
this.horsePower = horsePower;
}
public void start() {
System.out.println("🚗 " + horsePower + " 마력으로 출발!");
}
protected int getHorsePower() {
return horsePower;
}
}
터보 엔진 클래스(엔진을 상속받은 자식 클래스)
public class TurboEngine extends Engine {
private int turboBoost;
public TurboEngine(int horsePower, int turboBoost) {
super(horsePower);
this.turboBoost = turboBoost;
}
@Override
public void start() {
System.out.println("🏎️ 터보 출력 포함 " + (getHorsePower() + turboBoost) + " 마력으로 출발!");
}
}