[Spring] DI란?? (스프링을 쓰는이유!)

Carrot.___.·2023년 5월 7일
0

DI (Dependency Injection)

  • 의존성 주입이라고 하며, 외부(=스프링 프레임워크)에서 의존관계를 주입해주는 것이라고 할 수 있습니다.

그렇다면 왜 스프링 프레임워크를 사용할까요??

만약, 스프링이 없다면..?

  • 아래 다이어그램 관계에서 컴퓨터를 조립을 통한 예를 볼까요?

    • 우선, ComputerAssemble이라는 인터페이스를 만들고, 컴퓨터 부품들을 받아 조립을 하는 Method를 하나 선언했고, 이를 구현하는 ComputerAseembleBySelf 다음과 같이 선언했습니다.

      • ComputerAssemble 인터페이스
      • ComputerAssembleBySelf
      • TEST 코드

      위 예제에서 SOLID관점에서 보면 무엇이 문제가 있을까요?

      • DIP 원칙 위반
        • DIP는 추상화에 의존해야지, 구체화에 의존하면 안된다는 것을 의미한다. 위 코드를 보면 다음과 같이 구체화에 의존하고 있다.
        private final ComputerKeyboard keyboard = new SamsungKeyboard();
         private final ComputerMouse mouse = new LogitechMouse();
         private final ComputerMonitor monitor = new LgMonitor();
      • OCP 원칙 위반
        • OCP는 변경에는 닫혀있고, 확장에는 열려있는 것을 말한다고 했다. 만약, 삼성키보드가 아닌 로지텍 키보드로 바꿔야한다면, 다음과 같이 코드를 영향을 준다!

          //private final ComputerKeyboard keyboard = new SamsungKeyboard();
             private final ComputerKeyboard keyboard = new LogitechKeyboard();
          

스프링이 있다면...!

  • DIP, OCP를 위반하는 것을 스프링을 통해 어떻게 해결 할 수 있을까?
    • DIP 원칙 위반 해결
      • 다음과 같이 사용하고자 하는 부품에 @Component를 붙이면, 스프링 프레임워크가 해당 객체를 Singleton으로 관리하며, 내가 직접 의존성을 부여하는 것이 아닌 스프링이 의존성을 부여해준다.
    • 최종

      이와 같이 스프링이 싱글톤으로 관리해주고, 직접 의존 관계를 주입해주기 때문에, 실제 사용(혹은 테스트 상황에서도)에서도 DIP, OCP를 지킬 수 있어, 좀 더 객체지향적이고 유현한 설계가 가능해졌습니다!!

0개의 댓글

관련 채용 정보