220112 TIL 의존성 주입/의존성 역전
들어가기 전
테스트 코드를 작성하는 중 다음과 같은 문제점이 발생했었다.
예를들어 A 클래스에서 B 클래스를 외부로 불러와 사용한다면
const B = require('./b')
class A {
constructor(){
this.b = new B();
}
getExample(){
return this.b.getExampleCodes()
}
}
A 클래스의 getExample()
코드가 잘 작동하는지 테스트하기 위해 B클래스를 mock함수로 구현해야했고,
B함수의 내부사항인 getExampleCodes()
을 mocking해서 만들어야 했다.
const getExampleCodes = jest.fn(()=>{
// return할 값
});
getExampleCodes()
의 재사용성이 떨어지는 문제점이 발생한다.
그런데 여기서 의존성 주입의 원칙에 어긋난다는 말을 들었다.
의존성 주입이라는 것은 무엇일까?
의존성 주입이란?
위 예제를 아래 코드로 다시 살펴보면 A
클래스 내부에 B
인스턴스를 생성했기 때문에 의존성 주입이 아닌 의존성을 스스로 만들어서 사용한 것이다.
const B = require('./b')
class A {
constructor(){
this.b = new B();
}
getExample(){
return this.b.getExampleCodes()
}
}
따라서 위 코드를 아래처럼 변경하면 외부로부터 받아와서 외부에서 주어진 b를 사용만 하면 구체적으로 어떤 모듈의 b를 사용하는지 관심이 없어진다.
class A {
constructor(b){
this.b = b;
}
getExample(){
return this.b.getExampleCodes()
}
}
이를 의존성 주입이라고 한다.
그리고 상위 개념으로 '의존성를 역전시킨다'라고도 한다.
외부로부터 주어진 것을 사용하면서 테스트할 때는 테스트용 b를 주입하고 실제 제품에는 실제 b를 주입할 수 있게 됐다.
이렇게 하면 테스트하기가 훨씬 간결해진다.
참고
Author And Source
이 문제에 관하여(220112 TIL 의존성 주입/의존성 역전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sozero/220112-TIL-의존성-주입의존성-역전저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)