본문 바로가기

CS/CS지식

의존관계 주입이란?

 

 

 

 

의존관계 주입의 의존관계란 무엇인가? 

 

"A가 B를 의존한다." 라는 말을 풀어서 말하자면 A라는 클래스가 B라는 클래스를 사용(=의존) 하고있다. 라는 것으로 A라는 클래스 안에 B 라는 클래스를 추가 생성하지않고 B클래스 인스턴스를 만들어서(=외부) 이를 끌고온다는 것이라고 할 수 있다. 

이는 B의 기능이 추가 또는 변경되거나 형식이 바뀌면 그 영향이 A에 미친다는 것과 동일한 의미로 볼 수 있는데 밑의 예시를 보면

 

 

위의 코드는 A는 B를 의존하고 있는 상황이다. 여기서 A는 B의 gorani()를 가지고오고있는데 여기서 B의 gorani()가 banana()로 변경된다면 A역시 B().banana(); 로 변경해야하는 상황이 생기며 B의 영향이 A에게 까지 미쳐짐에 A는 B를 의존한다. 라고 이야기하는 것이다.

 

 

의존관계의 역전이란?

 

 

 

근데 여기서 Project 클래스는 BackendDeveloper와 FrontEndDeveloper 를 의존하고 있으며 implement() 메서드에서 backend와 frontend의 메서드를 불러와서 사용하고있다. 지금 현재로선 만약 FrontEnd 혹은 BackEnd의 클래스가 변경되면 이에 의존하고 있는 Project 역시 변경되어야하는데 해당 의존관계를 변경하기위해서 

 

 

 

Developer라는 인터페이스를 만들어주고 Backend와 Frontend를 Developer의 상속을 받게하며 develop()이라는 공통 메서드를 만들어 서로를 통합시킨다. 

 

 

 

 

이 때 변경되는 Project 클래스는 이런식으로 형성되어있다. 

이렇게 되면 Project가 Developer를 의존하게 되면서 Backend나 Frontend가 변경되어도 Project를 변경할 필요가 없어진다. 

 

해당 방법으로 개발하면 유지보수에도 용이하고 추가 클래스도 쉽게 만들 수 있다. 

 

 

의존성 주입의 장단점

 

  • 장점
  1. 외부에서 모듈을 생성하여 dev.add(new BackendDeveloper()) 이런식으로 집어넣는 구조가 되기에 모듈들을 쉽게 교체할 수 있는 구조가 된다. 
  2. 단위 테스팅과 마이그레이션이 쉬워진다. 
  3. 애플리케이션 의존성 방햐잉 좀 더 일관되어 코드를 추론하기가 쉬워진다.

 

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

 

 

 

 

https://tecoble.techcourse.co.kr/post/2021-04-27-dependency-injection/

https://www.youtube.com/watch?v=nOHdunGzeRc

'CS > CS지식' 카테고리의 다른 글

DB의 프로시저란?  (0) 2022.08.15
정규화와 비정규화  (0) 2022.07.25
HTTP란?  (0) 2022.05.25
객체지향 프로그램이란?  (0) 2022.05.25