의존성 주입 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, 이벤트 처리 등의 추가적인 기능을 수행한다고 한다.
'Spring' 카테고리의 다른 글
Spring MVC JPA 적용하기 (spirng-data-jpa) (0) | 2021.10.21 |
---|---|
Spring XSS Filter 개발 및 적용 (3) | 2021.10.19 |
Spring Bean Scope 빈 스코프 (0) | 2021.10.12 |
Spring AOP (Aspect Oriented Programming) (0) | 2021.10.12 |
eclipse 스프링 레거시 프로젝트 생성 및 나의 기본 세팅 (0) | 2021.09.25 |