public class Car {
private final Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
public void drive() {
engine.start();
System.out.println("자동차가 달립니다.");
}
}
Restaurant: 레스토랑 인터페이스 (order 메서드)
Chef: 셰프 인터페이스 (cook 메서드)
Course: 코스 메뉴 인터페이스 (combineMenu 메서드)
구현 클래스:
WesternRestaurant, AsianRestaurant 등JannChef, KimuraChef, StephaneChef 등FrenchCourse, SushiCourse, ItalianCourse 등reserve() 메서드로 예약 동작 구현@Configuration과 @Bean을 사용해 객체 등록@Configuration
public class CarConfig {
@Bean
public Engine engine() {
return new Engine();
}
@Bean
public Car car() {
return new Car(engine());
}
}
List<Book>과 Library를 등록하는 예제@Bean
public List<Book> books() {
return List.of(
new Book("캐치캐치 티니핑", "하츄핑"),
new Book("뽀로로", "삘리리"),
new Book("반지의 제왕", "링링링")
);
}
@Bean
public Library library() {
return new Library(books());
}
@Bean
public MusicPlayer musicPlayer() {
MusicPlayer musicPlayer = new MusicPlayer();
musicPlayer.setSpeaker(speaker());
return musicPlayer;
}
AnnotationConfigApplicationContext로 설정 클래스 등록getBean() 메서드를 통해 빈 객체를 가져와 메서드 실행ApplicationContext context = new AnnotationConfigApplicationContext(CarConfig.class);
Car car = context.getBean(Car.class);
car.drive();
@Configuration, @Bean을 통해 DI를 구현할 수 있음