두개 이상의 구현체가 있는 인터페이스 의존성 주입(DI)

less than 1 minute read

의존성 주입은 인터페이스에 걸어라

만약 해당 인터페이스에 대한 구현체가 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);
    }
}

실행 결과

connect

두개 이상의 구현체가 있어서 에러가 발생하였다.

결론

인터페이스에 대한 구현체는 하나가 있어야한다 :)