관리 메뉴

개발하는 동그리

IoC(Inversion of Control) / DI (Dependency injection) 본문

IT 정보/Spring

IoC(Inversion of Control) / DI (Dependency injection)

개발하는 동그리 2022. 6. 4. 18:19
반응형

제어의 역전 Ioc (Inversion of Control)

제어의 역전 미사용 

  •  클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고 실행을 했다. 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다 - 개발자 입장에서는 자연스러운 흐름 그러나 이렇게 코딩할 경우 DIP, OCP 규칙에 어긋난다. 

 제어의 역전 사용 

  • 각 구현 객체는 자신의 로직만 실행하고, 프로그램의 제어 흐름은 AppConfig가 통제한다. 이처럼 프로그램의 제어 흐름을 외부에서 관리하는 것을 제어의 역전( IoC ) 라고 부른다. 

 

의존관계 주입 DI ( Dependency injection )

정적인 의존관계

  • 클래스의 import 코드로 의존관계를 파악할 수 있는데 이를 정적인 의존관계라 한다. DI 프로그래밍에서는 정적인 의존관계로 어떤 객체가 주입될지는 알 수 없다. 왜냐하면 프로그램의 제어를 AppConfig가 다루고 있기 때문이다.

동적인 의존 관계

  • 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계
  • 애플리케이션 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달하여 클라이언트와 서버의 실제 의존관계가 연결되는 것 ( 의존관계 주입 )
  • 클라이언트의 코드는 변경되지 않고, 호출하는 대상 타입의 인스턴스를 변경할 수 있다. ( 핵심 )
  • 마찬가지로 의존관계 주입을 사용하면 정적인 클래스의 의존관계에 영향을 주지 않고, 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있다. (OCP, DIP)

IOC 컨테이너 < DI 컨테이너 (최근 트렌드)

  • AppConfig 처럼 외부에서 객체를 생성하고 관리하면서 의존관계를 연결해주는 것을 DI 컨테이너라 부르고 의존관계 주입이라고 한다. 
  • IOC 컨테이너, DI 컨테이너, 어샘블러, 오브젝트 팩토리 등 같은 의미의 용어들이 있는데, 최근 가장 많이 사용하는 용어는 DI 컨테이너 다.

 

 

반응형

'IT 정보 > Spring' 카테고리의 다른 글

[네트워크] URL / URI  (4) 2022.06.05
[네트워크] 프로토콜과 API  (7) 2022.06.05
스프링 이야기  (35) 2022.06.02
SOLID (객체 지향 설계의 5가지 원칙)  (7) 2022.06.02
관심사의 분리 -MVC 패턴  (7) 2022.05.12