두개 이상의 구현체가 있는 인터페이스 의존성 주입(DI)
의존성 주입은 인터페이스에 걸어라
만약 해당 인터페이스에 대한 구현체가 2개 이상이라면?????????????
Test를 해보자!
- 다음과 같이 Car 인터페이스를 생성한다.
import org.springframework.stereotype.Component;
@Component
public interface Car {
String getName();
}
- Car객체를 상속받아 구현한 K5와 Sonata를 만들어 준다.
- K5
import org.springframework.stereotype.Component;
@Component
public class K5 implements Car {
private final String name = "K5";
@Override
public String getName() {
return name;
}
}
- Sonata
import org.springframework.stereotype.Component;
@Component
public class Sonata implements Car {
private final String name = "Sonata";
@Override
public String getName() {
return name;
}
}
- Car를 의존하는 CarService를 생성하고, getName을 호출하는 메서드를 작성한다.
import org.springframework.stereotype.Service;
@Service
public class CarService {
private Car car;
//생성자 주입으로 의존성 주입을 해주었다.
public CarService(Car car) {
this.car = car;
}
public String howCar() {
return car.getName();
}
}
- 마지막으로 테스트를 위한 CarServiceTest를 생성해준다.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@SpringBootTest
class CarServiceTest {
@Autowired
private CarService carService;
@Test
void howCar() {
String carName = carService.howCar();
System.out.println("My name is " + carName);
}
}
실행 결과
두개 이상의 구현체가 있어서 에러가 발생하였다.
결론
인터페이스에 대한 구현체는 하나가 있어야한다 :)