[Spring] DI (Dependency Injection)
DI
- Dependency Injection
- 스프링의 근간을 이루는 중요한 개념
- 스프링4부터 DI사용을 권장
DI는 비단 스프링만이 사용하는 개념은 아니지만 스프링을 공부함에 있어서 꼭 알아야하는 중요한 개념이다.
DI는 객체를 클래스 내부에서 직접 생성하여 사용하는것이 아닌 외부에서 생성한 후 주입받아 사용하는 방식이다.
이렇게 하면 모듈간의 결합이 느슨해지 유연성이 높아지게 된다.
DI를 쉽게 풀어보자면 재충전이 불가능한 일회성 소모품 배터리를 생각해보자.
1. 배터리를 교체 불가능한 제품
2. 배터리를 교체가능한 제품
위 2가지 중에서 효율이 좋은 제품은 무엇일까? 어려울것 없이 2번일 것이다. 1번의 경우에는 배터리를 교체할수없고 충전조차 할 수 없기에 제품 자체가 일회성 소모품이 되어버린다. 다만 2번의 경우 배터리만 교체해준다면 몇번이고 재사용이 가능할 것이다.
위 예시에서 배터리를 교체해 주는것을 DI라고 생각하면 되겠다.
예시
위에서 예시로 든 배터리를 구현해보자. 일단 배터리에도 여러가지 종류가 있을 것 이기 때문에 Battery라는 인터페이스로 구현해 주자.
interface Battery{
}
public class CoinBattery implements Battery {
}
public class Product implements Battery {
private Battery battery;
public Product(Battery battery) {
this.battery = battery;
}
}
하지만 이런 작업들을 매번 하기에는 불편하다. 때문에 이런부분을 스프링에서 지원해준다.
스프링에서는 기본적으로 객체들을 bean이라고 지칭하며 싱글톤 패턴을 지향하기에 스프링 컨테이너에서 bean관련 작업들을 관장한다. 때문에 스프링 컨테이너에 객체들을 추가해준다면 DI작업은 스프링 프레임워크가 알아서 해준다.
이렇게 어떤 객체를 주입할지 선택의 권한이 스프링 프레임 워크에게 넘어갔기에 이것을 IoC(Inversion of Controll, 제어의 역전)라고 하기도 한다.
싱글톤 패턴 포스팅
싱글톤(Singleton)이란?
싱글톤 패턴(Singleton Pattern) 디자인 패턴의 일종 객체를 매번 생성하지않고 실행시점에 생성된 혹은 처음으로 생성된 객체만을 이용하는 것. 즉 객체에대한 인스턴스가 단 한개만 존재한다. 이후
psh0036.tistory.com