본문 바로가기

배운 거/C.S

의존성 주입 D.I 란?

싱글톤 패턴에서는 하나의 클래스에서 오직 하나의 인스턴스만을 가지게 되는 데

 

기능적인 모듈들의 단위 테스트가 필요할 때 독립적인 인스턴스 생성이 어렵게 된다.

 

이렇게 모듈 간의 강한 결합을 D.I.(의존성 주입)을 통해 느슨하게 만들어 줄 수 있다.

 

의존관계에서 결합도에 대한 설명은 아래 블로그 참조.

https://velog.io/@damiano1027/Java-%EA%B0%95%ED%95%9C-%EA%B2%B0%ED%95%A9%EA%B3%BC-%EC%95%BD%ED%95%9C-%EA%B2%B0%ED%95%A9

 

[Java] 강한 결합과 약한 결합

객체의 의존 관계에서 강한 결합이란, 어떠한 객체가 다른 객체에 강한 의존성을 가지고 있음을 뜻한다.그렇다면 의존성을 가지고 있다는 것이 무엇인가?의존성이 강하다는 것은 무엇인가?에

velog.io

 

인스턴스를 직접 생성하여 하위 모듈에 의존성을 주는 게 아닌

Setter를 통한 의존성 주입자를 통해 메인모듈과 간접적으로 의존성을 생성하고

이를 '티커플링이 된다'라고도 한다.

 

출처:면접을위한 CS 전공지식노트

 

예시

 

 

  1. AnimalType에 대한 구체적인 Class를 생성한다.
    • Dog Class, Cat Class

  2. PetOwner 객체에 AnimalType 객체를 전달한다.
    • Contructor Injection

  3. 생성자를 통한 전달
    • <constructor-arg ref="cat"></constructor-arg>

  4. Method(Setter) Injection
    • setter()을 통한 전달
    • <property name="myName" value="poodle"></property>

  5. Field Injection
    • 멤버 변수를 통한 전달

개발자가 할 일은 주입할 것에 대한 Class를 작성(Dog, Cat 등)하는 것 !

 

의존성 주입의 장점
  • 재사용성을 높여줍니다.
  • 테스트에 용이합니다.
  • 코드도 단순화 시켜줍니다.
  • 종속적이던 코드의 수도 줄여줍니다.
  • 왜 사용하는 지 파악하기가 수월합니다. 코드를 읽기 쉬워지는 점이 있습니다.
  • 종속성이 감소합니다. 구성 요소의 종속성이 감소하면, 변경에 민감하지 않습니다.
  • 결합도(coupling)는 낮추면서 유연성과 확장성은 향상시킬 수 있습니다.
  • 객체간의 의존관계를 설정할 수 있습니다.
  • 객체간의 의존관계를 없애거나 줄일 수 있습니다.

 

https://earth-kor.github.io/2020/10/14/%EC%A3%BC%EC%9E%85-DI/

 

의존성 주입(DI)

의존성 주입 (DI) Dependency Injection 이란?객체 자체가 아니라 Framework에 의해 객체의 의존성이 주입되는 설계 패턴 의존성 주입 방법 Contructor Injection 생성자를 통한 전달 <constructor-arg ref="cat"></construc

earth-kor.github.io

 

'배운 거 > C.S' 카테고리의 다른 글

CORS ?  (0) 2022.08.14
Rest API?  (0) 2022.08.09
Spring Bean이란?  (0) 2022.07.31
제어 반전 컨테이너-IoC란?  (0) 2022.07.31
[자료구조] 이진탐색트리  (0) 2022.07.30