<직접참조 예시>
public class Car {
private Engine engine;
public Car() {
this.engine = new Engine(); //직접참조
}
public void start() {
engine.start(); //직접호출
}
}
public class Engine {
public void start() {
System.out.println("Engine started!");
}
}
이 코드에서 Car
는 Engine
인스턴스를 직접 생성하고 있다. 따라서 따라서 Car
인스턴스가 생성될 때 Engine
의 인스턴스도 함께 생성되며, Car
의 메서드에서 Engine
의 메서드를 직접 호출한다.
<간접참조 예시>
public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine; //간접참조
}
public void start() {
engine.start();
}
}
public class Engine {
public void start() {
System.out.println("Engine started!");
}
}
이 코드에서는 Car
가 Engine
을 간접 참조하고 있으며, Car
의 인스턴스가 생성될 때 Engine
의 인스턴스는 생성되지 않는다. 대신 Engine
인스턴스를 인자로 전달받아 Engine
인스턴스를 생성하고, Car
메서드에서 Engine
메서드를 간접 호출한다.