DI(Dependency Injection) - 의존 주입

코드를 작성하면서 생기는 문제점

개발을 하다보면 코드와 코드가 서로 결합력이 높아지는 경우가 생긴다.

위의 그림을 보면 Service가 B1을 사용하고 있는 와중에 B1코드를 수정해버리면 Service 영역의 코드 또한 수정을 해야한다. 당연히 작은 프로그램에서는 큰 문제는 없겠지만 매우 큰 프로그램에서는 그 일이 굉장히 힘든일이다. 이러한 결합도를 낮출 필요가 있다.

DI(Dependency Injection)

"의존이란?"
변경에 의해 영향을 받는 관계를 의미한다. 만약 A 클래스에서 private 변수로서 B 클래스의 객체를 가지고 있다면 다른 B 클래스 객체의 함수명을 바꾼다면 A클래스 내부함수에서 사용하고 있는 B클래스의 함수이름또한 바꿔야 한다. 이처럼 변경에 따른 영향이 전파되는 관계를 '의존'한다고 표현한다.

<Composition has a>

  • 객체를 생성자를 통해 생성하고 이를 private 변수로 가진다.
class A
{
	private B b;
    
    public A(){
    	b = new B();
    }
}

<Association has a>

  • 객체를 직접생성하는 것이 아닌 외부에서 생성하고 이를 인자로 넘겨서 세팅한다.
class A
{
	private B b;
    
    public A(){
  
    }
    
    public void setB(B b){
    	this.b = b;
    }
}
  • 그래서 아래의 코드와 같이 해야한다.
  • 아래의 코드에서 B 객체를 생성하는 부분이 Dependency가 되고 이를 A 객체에 세팅을 하니 Injection한다고 볼 수 있다.
B b = new B();
A a = new A();

a.setB(b);
  • 의존성 주입은 필요한 객체를 직접 생성하는 것이 아닌 의존 객체를 전달받는 방식을 사용한다.
  • 코드의 재활용성이 높아지고, 결합도를 낮추며, 유연한 코드 작성이 가능하다.

0개의 댓글