본문 바로가기

JAVA/Spring

[Spring] DI를 사용하는 이유

728x90

 

종속성 때문에? 그걸 해결하기 위해 인터페이스와 추상화가 있는게 아닌가

→ 기존의 자바 프로그래밍 방식은 코드에 의존성이 강하다.

 

// Programmer.java
class Programmer {
    private Coffee coffee;

    public Programmer() {
    	this.coffee = new Coffee();
    }
    
    public startProgramming() {
    	this.coffee.drink(); // 일단 마시고 시작하자
        ...
    }
}

위 startProgramming 메소드를 호출하기 위해선 Coffee 클래스를 사용하여야 한다. 이 때 Coffee 클래스가 수정되면 Programmer 클래스도 수정되어야 한다. 즉 결합도(coupling)가 높다.

 

이점은?

  1. Unit Test가 용이해진다
  1. 코드의 재활용성이 높아진다.
  1. 의존성, 종속성을 줄이거나 없앨 수 있다.
  1. 결합도를 낮춘 유연한 코드 작성 가능

 


정리

  1. DI는 필요한 객체를 직접 생산하는 것이 아닌 필요한 객체를 외부에서 받아서 사용하는 것
  1. 이를 통해 결합도를 줄이고 재활용성을 높여준다.

 

공부한 블로그

velog.io/@wlsdud2194/what-is-di

 

[DI] Dependency Injection이란 무엇일까?

Dependency Injection, 의존성 주입이 무엇이고 어떤 이점이 있는지 예시를 통해 정리한 글입니다.

velog.io

머릿속에서 완벽하게 납득되지는 않았지만 감은 잡혔다.

 


추가 공부

기존의 방식대로, 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;
 
 }

이렇게 의존성 정보를 설정해놓으면 나중에 참조객체가 변경되어도 원본설정소스만 바꾸어주면 된다.