의존성 주입(Dependency Injection, DI) Car

의존성 주입을 사용하지 않는 경우:

  • Car 클래스는 Engine 클래스에 직접 의존합니다.
  • Car 클래스 내부에서 Engine 객체를 생성하므로, Engine 클래스를 변경하려면 Car 클래스를 수정해야 합니다.
  • 이로 인해 코드의 결합도가 높아지고, 변경과 테스트가 어렵습니다.

의존성 주입을 사용하는 경우:

  • Car 클래스는 IEngine 인터페이스에 의존합니다.
  • 실제 엔진 구현체는 GasolineEngine 또는 ElectricEngine 클래스입니다.
  • 의존성 주입을 통해 Car 클래스는 IEngine 인터페이스의 구현체를 외부에서 주입받습니다.
  • 이를 통해 Car 클래스는 특정 구현체에 종속되지 않고, 코드의 유연성과 테스트 용이성이 향상됩니다.

1. 인터페이스 정의

우선, 필요한 인터페이스를 정의합니다. 여기서는 엔진(IEngine)과 자동차(ICar) 인터페이스를 정의합니다.

2. 인터페이스 구현

인터페이스를 구현하는 클래스를 만듭니다. 나중에 요구사항이 변경되어도 쉽게 교체할 수 있도록 인터페이스를 통해 접근합니다.

3. ASP.NET Core 프로젝트 설정

ASP.NET Core 프로젝트를 설정하고 의존성을 등록합니다. 여기서 DI 컨테이너를 통해 인터페이스와 구현체를 매핑합니다.

Startup.cs

4. 의존성 주입을 받는 컨트롤러

DI 컨테이너를 통해 ICar 인터페이스를 주입받는 컨트롤러를 만듭니다.

CarController.cs

5. 프로그램 실행

Program.cs

유지보수성의 예

요구사항 변경: 전기 엔진으로 변경

나중에 요구사항이 변경되어 자동차가 전기 엔진을 사용해야 한다고 가정합니다. 이 경우 코드의 수정은 매우 간단합니다.

변경된 Startup.cs

위의 코드는 IEngine 인터페이스의 구현체를 GasolineEngine에서 ElectricEngine으로 바꿨습니다. 이렇게 하면 나머지 코드는 전혀 수정할 필요가 없습니다.