728x90
종속성 때문에? 그걸 해결하기 위해 인터페이스와 추상화가 있는게 아닌가
→ 기존의 자바 프로그래밍 방식은 코드에 의존성이 강하다.
// Programmer.java
class Programmer {
private Coffee coffee;
public Programmer() {
this.coffee = new Coffee();
}
public startProgramming() {
this.coffee.drink(); // 일단 마시고 시작하자
...
}
}
위 startProgramming 메소드를 호출하기 위해선 Coffee 클래스를 사용하여야 한다. 이 때 Coffee 클래스가 수정되면 Programmer 클래스도 수정되어야 한다. 즉 결합도(coupling)가 높다.
이점은?
- Unit Test가 용이해진다
- 코드의 재활용성이 높아진다.
- 의존성, 종속성을 줄이거나 없앨 수 있다.
- 결합도를 낮춘 유연한 코드 작성 가능
정리
- DI는 필요한 객체를 직접 생산하는 것이 아닌 필요한 객체를 외부에서 받아서 사용하는 것
- 이를 통해 결합도를 줄이고 재활용성을 높여준다.
공부한 블로그
velog.io/@wlsdud2194/what-is-di
머릿속에서 완벽하게 납득되지는 않았지만 감은 잡혔다.
추가 공부
기존의 방식대로, B를 참조하는 A객체를 만든다고 하자.
Class Test1 {
A = New B();
}
Class Test2 {
A = New B();
}
Class Test3 {
A = New B();
}
위와 같이 객체를 만들 수 있을것이다.
이 때 A객체에서 B가아닌 C를 참조해야할 경우가 생긴다면?
클래스마다 일일히 수정해주어야 하는 상황이 생긴다.
이 때문에 DI를 사용한다.
@Component
Class Test1 {
@Autowired
private A a;
}
이렇게 의존성 정보를 설정해놓으면 나중에 참조객체가 변경되어도 원본설정소스만 바꾸어주면 된다.
'JAVA > Spring' 카테고리의 다른 글
[Spring] Gradle build 중 JDK Version 문제 해결 (0) | 2021.05.05 |
---|---|
[Spring] 'POST' not supported 에러 (0) | 2021.05.04 |
[Spring] 스프링이란? (0) | 2021.04.26 |
[Spring] 관점지향프로그래밍 개요(AOP) (0) | 2021.04.22 |
[Spring] Mybatis 연동절차 (0) | 2021.04.21 |