DI와 DIP

창진·2023년 7월 23일
0

cs 지식

목록 보기
7/50
post-custom-banner

DI 란?

의존성주입(DI, Dependency Injection)이란 메인 모듈(main mudule)이 ‘직접’ 다른 하위모듈에 대한 의존성을 주기보다는 중간에 의존성 주입자(dependency injector)가 이 부분을 가로채 메인 모듈이 ‘간접’적으로 의존성을 주입하는 방식입니다.
이를 통해 메인 모듈과 하위모듈간의 의존성을 조금 더 느슨하게 만들 수 있으며 모듈을 쉽게 교체 가능한 구조로 만듭니다.

의존한다. 라는 의미

A가 B에 의존한다. = B가 변하면 A에 영향을 미치는 관계 = A - > B
를 의미하며 코드로는 이러한 것을 A가 B에 의존한다고 합니다.

import java.util.*;

class B {
	public void go() {
		System.out.println("B의 go()함수");
		}
}
class A {
	public void go() {
		new B().go();
	}
}
public class main{
	public static void main(String args[]) {
		new A().go();
	}
}

의존관계역전원칙

의존성 주입을 할 때는 의존관계역전원칙(DIP, Dependency Inversion Principle)이 적용됩니다. 이는 2가지의 규칙을 지키는 상태를 말합니다.

  • 상위 모듈은 하위 모듈에 의존해서는 안 된다. 둘 다 추상화에 의존해야 한다.
  • 추상화는 세부사항에 의존해서는 안 된다. 세부 사항은 추상화에 따라 달라져야 한다.

의존성 주입의 장점

  1. 외부에서 모듈을 생성하여 dev.add(new BackendDeveloper()) 이런식으로 집어넣는 구조가 되기 때문에 모듈들을 쉽게 교체할 수 있는 구조가 됩니다.

  2. 단위 테스팅과 마이그레이션이 쉬워집니다.

  3. 애플리케이션 의존성 방향이 좀 더 일관되어 코드를 추론하기가 쉬워집니다. 마이그레이션 : 다른 운영환경으로 이동하는 것(DB이동, 데이터 이동 등)

의존성 주입의 단점

  1. 결국에는 모듈이 더 생기게 되므로 복잡도가 증가합니다.
  2. 종속성 주입자체가 컴파일을 할 때가 아닌 런타임 때 일어나기 때문에 컴파일을 할 때 종속성 주입에 관한 에러를 잡기가 어려워질 수 있습니다.
profile
안녕하세요
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 7월 23일

좋은 정보 감사합니다

답글 달기