반응형
[광고 누르면 오늘의 행운 상승!!]
DI (Dependency Injection)
객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입시키는 것
Object Dependencies(객체 의존성)
현재 객체가 다른 객체와 상호작용(참조)하고 있다면 현재 객체는 다른 객체에 의존성을 가진다.
public class Pet{
private Animal animal;
public Pet() {
this.animal = new Dog();
}
}
- Pet객체는 Animal 객체(Dog)에 의존한다.
- Pet 생성자에서 new Dog();를 통해 Dog에 의존성을 가진다.
- 이 접근법의 문제점(의존성이 위험한 이유)
- Pet 객체는 Animal 객체의 생성을 제어하기 때문에 두 객체 간에는 긴밀한 결합(tight coupling)이 생기고, tight coupling에 따라 Animal 객체를 변경하면 Pet객체도 변경된다.
- 즉, 하나의 모듈이 바뀌면 의존한 다른 모듈까지 변경 되어야 한다.
- 또한 두 객체 사이의 의존성이 존재하면 Unit Test 작성이 어려워 진다.
Dependency Injection(의존성 주입)
객체 자체가 아니라 Framework에 의해 객체의 의존성이 주입되는 설계 패턴
- Framework에 의해 동적으로 주입되므로 여러 객체 간의 결합이 줄어든다.
- Dependency Injection은 Spring Framework에서 지원하는 IoC의 형태
- Dependency Injection(의존성 주입)과 Inversion Of Control(제어의 역전)은 같은 의미로 사용된다.
- IoC는 DI를 통해 달성된다.
IoC(제어의 역전)
- 프로그램 제어권을 framework가 가져가는 것
- 개발자가 모든 제어의 중심이지만 코드 전체에 대한 제어는 framework가 한다.
- 개발자가 설정(xml, annotation 등)만 하면 Container가 알아서 처리한다. 즉, 우리는 Framework 속에서 프로그래밍을 하는 것.
반응형
'5. 웹 프로그래밍 > 6. Spring' 카테고리의 다른 글
SpringBoot [스프링부트란?][스트링 부트 프로젝트 생성하기] (0) | 2020.05.28 |
---|---|
POJO(Plain Old Java Object) [Spring] (0) | 2020.05.20 |
Spring Framework가 제공하는 Class [Spring] (0) | 2020.05.20 |
Spring MVC Architecture [Spring][MVC] (0) | 2020.05.20 |
AOP [Aspect Oriented Programming][Spring] (0) | 2020.05.19 |