독도갈매기의 개발 블로그
[Spring] DI ( Dependency Injection : 의존성 주입 ) 본문
DI
DI ( 의존성 주입 ) 이란?
외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴( IoC 구현 기법 )으로, 인터페이스를 사이에 둬서 클래스 레벨에는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 다이나믹하게 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.
의존성이란?
한 객체가 다른 객체를 사용할 때 의존성이 있다고 함.
DI를 쓰는 이유 - 장점
- 재사용성을 높여줌.
- 테스트 용이.
- 코드 단순화.
- 종속적 코드 수 감소.
- 종속성 감소.
- 코드 가독성 향상.
- 결합도 감소, 유연성과 확장성 향상
- 객체간 의존관계 설정
- 객체간 의존관계를 없애거나 줄일 수 있음.
DI를 사용하지 않는다면
// 커피 클래스
class Coffee {
public void drink() {
커피를 마신다
...
}
}
// 커피 인터페이스로도 가능
interface Coffee {
public void drink()
}
// 커피 클래스를 상속
class Cappuccino extends Coffee {...}
class Americano extends Coffee {...}
// 회사원 클래스
class SalaryMan {
private Coffee coffee;
public SalaryMan() {
this.coffee = new Coffee();
// 커피가 바뀌거나 추가 될 때마다 지속적으로 코드를 수정해야함.
this.coffee = new Cappuccino();
this.coffee = new Americano();
}
public startWorking() {
this.coffee.drink();
}
}
DI를 사용한다면 ( Constructor Injection : 생성자 주입 ← DI 기법 중 하나 )
// 커피 클래스
class Coffee {
public void drink() {
커피를 마신다
...
}
}
// 커피 클래스를 상속
class Cappuccino extends Coffee {...}
class Americano extends Coffee {...}
// 회사원 클래스
class SalaryMan {
private Coffee coffee;
// 클래스에서 직접 생성하는 것이 아닌 외부에서 사용할 때 주입해줌으로서,
// 객체 간의 결함도를 줄이고 좀 더 유연한 코드를 작성할 수 있음.
public SalaryMan(Coffee coffee) {
this.coffee = coffee;
}
public startWorking() {
this.coffee.drink();
}
}
// 회사 클래스 - 일반적인 생성자 주입
class Company {
public pickUpEmployee() {
Coffee myCoffee = new Americano();
// 클래스에서 관계를 수정하는 것이 아닌 사용하는 외부에서 클래스를 주입해줌.
SalaryMan Jun = new SalaryMan(myCoffee);
}
}
마지막
극단적인 예시로 마지막 정리를 끝내겠습니다.
만약 위와 같이 'Coffee' 클래스가 1, 2 개가 아닌 수백개가 된다면 코드를 직접 수정하다보면
거기서 발생하는 시간, 인력, 비용 등등 모든 것들이 손해입니다.
이와같이 DI ( Dependency Injection : 의존성 주입 ← IoC 구현 기법 )을 잘 이용하면 많은 이점을 가져 올 수 있습니다.
'Java' 카테고리의 다른 글
[Spring] Spring은 왜 많이 쓰일까? -2- (0) | 2021.10.05 |
---|---|
[Spring] Spring은 왜 많이 쓰일까? -1- (3) | 2021.10.04 |
[Spring] 인터셉터 ( Interceptor ) (0) | 2021.10.01 |
[Spring] IoC ( Inversion of Control : 제어권 역전 ) (0) | 2021.09.30 |
[Java] 자바 문자열(String)을 비교하는 방법 (0) | 2020.09.14 |
Comments