[CS지식의 정석]DI와 DIP

박두팔이·2023년 8월 16일
0

CS컴퓨터과학

목록 보기
12/13

의존성주입 (DI, Dependency Injection)

  • 메인 모듈이 직접 다른 하위 모듈에 대한 의존성을 주지 않고 중간에 의존성 주입자가 이 부분을 가로채 메인모듈이 간접적으로 의존성을 주입하는 방식이다.
  • 메인모듈과 하위모듈간의 의존성을 느슨하게 만들어 쉽게 교체 가능한 구조로 만든다는 장점이 있다.

💡A가 B에 의존한다는 의미?

  • B가 변하면 A도 must!! 변경되어야 한다는 것이다.
  • A -> B 로 표시한다
  • 아래의 코드는 java코드로 보는 DI예시이다.
import java.util.*;

class B {
	public void go() {
		System.out.println("B의 go()함수"); 
    }
}

class A {
	public void go() { 
    	new B().go();
        // b라는 go라는 함수를 호출.
        // 만일 B클래스의 go()가 gorani()함수로 변경되면 A클래스의 go()메서드의 호출도 gorani()로 변경되어야 한다.
	}
}

public class main{
	public static void main(String args[]) {
		new A().go(); 
    }
}

의존관계역전원칙 (DIP, Dependency Inversion Principle)

이는 2가지의 규칙을 지키는 상태를 말한다.

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

의존성 주입의 장점

  1. 외부에서 모듈을 생성하여 dev.add(new BackendDeveloper()) 이런식으로 집어넣는 구조가 되기 때문에 모듈들을 쉽게 교체할 수 있는 구조가 된다.
  2. 단위 테스팅과 마이그레이션(다른 운영환경으로 이동하는 것, ex)DB이동, 데이터 이동 등))이 쉽다.
  3. 애플리케이션 의존성 방향이 좀 더 일관되어 코드를 추론하기가 쉬워진다.

의존성 주입의 단점

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

정리

특징Dependency Injection (DI)Dependency Inversion Principle (DIP)
정의의존성 객체를 외부에서 주입받는 패턴고수준 모듈이 저수준 모듈에 의존하지 않도록 함
목적객체 간 결합도 감소, 유연성 증가코드의 유연성, 확장성, 재사용성 향상
구현 방법생성자, 세터, 메서드 등을 통한 주입추상화를 통한 의존 관계 역전
사용 대상객체나 컴포넌트 사이의 의존성모듈, 패키지, 시스템 사이의 의존성
디자인 패턴 관계DI는 디자인 패턴 중 하나DIP는 SOLID 원칙 중 하나
예시스프링 프레임워크의 DI 컨테이너파일 시스템 접근을 인터페이스로 추상화
profile
기억을 위한 기록 :>

0개의 댓글