본문 바로가기

Spring

Spring DI(의존성 주입)와 IoC(제어의 역전)

728x90

의존성 주입 DI(Dependency Injection)에 대해

DI는 스프링의 핵심 장점중 하나다.

한 객체가 다른 객체로부터 의존되어있는, 다른 객체의 변화에 영향을 받는 것이 의존되어있다고 한다.

그림과 같이 A객체안에는 B객체와 C객체를 new로 생성하고 있는데 이 경우 A객체는 B객체와 C객체에 의존되어 있다.

 

의존성을 주입은 아래 그림과 같이 직접 new로 B와 C객체를 생성하는게 아닌 외부로부터 객체를 받는것이다.

 

이렇게 의존성 주입으로 얻을 수 있는 장점은 관심사가 분리되어있다는 점이다.

이는, 관심사 분리 -> 수정이 쉽다 -> 유연성확장성 상승을 의미한다.

 

이러한 의존성 주입은 스프링에서 주로 IOC 컨테이너로 부터 *Bean 객체를 주입받을때 일어난다

 

 

*Bean : 스프링의 IOC 컨테이너가 생성해 관리하는 객체. 밑에 더 자세히

 

 

IOC(제어의 역전)에 대해

자바 기반의 애플리케이션 초기에는 개발자가 직접 객체를 생성하고 의존관계를 만드는 등의 제어를 개발자가 직접 했다. 하지만 서블릿, EJB, 스프링 등이 나오게 되면서 개발자가 아닌 컨테이너가 빈 객체를 생성해 주입하고 라이프를 관리하는 등의 컨트롤을 하게 되었는데 이를 IOC(제어의 역전)이라고 한다.

 

Ioc 컨테이너가 객체를 컨트롤하고 DI를 수행함으로써 개발자는 비즈니스 로직 개발에 집중할 수 있는것이다.

 

스프링의 IOC 컨테이너, 즉 스프링 컨테이너에는 대표적으로 두가지 Bean Factory(빈 팩토리)ApplicationContext(애플리케이션 컨텍스트)이 있는데, Bean Factory는 IOC 컨테이너의 최상위 인터페이스이며 ApplicationContext가 빈 팩토리의 서브 인터페이스인 ListableBeanFactory와 HierachicalBeanFactory를 상속받으며 빈 관리 뿐만 아니라 AOP, 이벤트 처리 등의 추가적인 기능을 수행한다고 한다.

 

728x90