1 분 소요

DI(Dependency Injection)

  • 의존성 주입(Dependency Injection)은 객체 간의 의존성을 외부에서 정의하고 주입하는 것을 의미한다.
  • 일반적으로 클래스나 모듈은 다른 클래스나 모듈에 의존성을 가지는데, 이러한 의존성을 코드 내부에서 직접 생성하거나 관리하는 대신 외부에서 주입받도록 한다.
  • 이를 통해 의존성의 생성과 관리를 담당하는 별도의 컨테이너나 프레임워크를 사용하여 코드의 유연성, 재사용성, 테스트 용이성을 향상시킬 수 있다.

의존성 주입 방식

의존성 주입은 주로 세 가지 방식으로 이루어진다.

  1. 생성자 주입(Constructor Injection) :
    • 객체의 생성자를 통해 의존성을 주입하는 방식
    • 객체를 생성할 때 필요한 의존성을 외부에서 전달받아 내부 변수에 할당
  2. 메서드 주입(Method Injection) :
    • 의존성을 주입받을 메서드를 정의하고, 해당 메서드를 호출하여 의존성을 전달하는 방식
  3. 속성 주입(Property Injection) :
    • 의존성을 주입받을 속성을 정의하고, 해당 속성에 외부에서 의존성을 할당하는 방식

Ioc(Inversion of Control)

Ioc는 제어의 역전을 의미한다. 기존의 프로그램 흐름에서 일반적으로 개발자가 코드의 흐름과 제어를 담당하는데, Ioc는 이러한 제어를 외부 컨테이너나 프레임워크로 넘기는 것을 의미한다.

  • 즉, 개발자가 코드의 일부를 구현하고 외부에서 호출되도록 하여, 코드의 제어 흐름을 역전시킨다.

DI와 Ioc 관계

  • Ioc는 의존성 주입(DI)와 밀접한 관계가 있다. 외부 컨테이너가 의존성을 관리하고 주입하는 것을 통해 Ioc를 구현할 수 있다. 이를 통해 개발자는 코드의 일부만 구현하고 의존성을 생성과 관리를 외부로 위임하여 코드의 유연성과 재사용성을 향상시킬 수 있다.

  • DI와 Ioc는 객체지향 프로그래밍의 원리를 따르며, 코드의 결합도를 낮추고 유지 보수성을 향상시키는 데 도움을 준다. 또한 테스트 용이성과 모듈화를 강화하고, 대규모 애플리케이션 개발에서 코드의 복잡성을 관리하는 데 유용하다.

  • 결론적으로, DI와 IoC는 객체지향 프로그래밍에서 중요한 개념이며, 코드의 결함도를 낮추고 유연성, 재사용성, 테스트 용이성을 개선하는데 도움을 준다. 또한 애플리케이션의 확장성과 유지 보수성을 향상시키는데 기여한다.

IoC 컨테이너

  • IoC 컨테이너는 DI와 IoC를 구현하고 관리하는 역할을 담당한다.
  • 주로 프레임워크나 라이브러리 형태로 제공되며, 개발자가 객체의 생성과 의존성 주입을 직접 처리하는 대신 컨테이너에게 맡긴다.
  • 컨테이너는 객체의 라이프사이클을 관리하고, 의존성을 자동으로 주입하여 애플리케이션의 실행 흐름을 제어한다.
  • 대표적인 IoC 컨테이너로는 Spring Framework의 ApplicationContext, Google Guice, Microsoft Unity 등이 있다.

업데이트: