메인 모듈(상위 모듈)이 하위 모듈에 대한 의존성이 떨어지게 됨을 나타낸다.
메인 모듈에 직접
다른 하위 모듈에 대한 의존성을 주기보다는 중간에 의존성 주입자(dependency injector)가 이 부분을 가로채 메인 모듈에 간접
적으로 의존성을 주입하는 것
public class DataProcessor {
private final DbManager manager = new SqliteDbManager("db.sqlite");
private final Calculator calculator = new HighPrecisionCalculator(5);
public void processData() {
this.manager.processData();
}
public BigDecimal calc(BigDecimal input) {
return this.calculator.expensiveCalculation(input);
}
}
=> tighgly coupled
이걸 디커플링하면(의존성 주입으로 바꾸면)
public class DataProcessor {
private final DbManager manager;
private final Calculator calculator;
public DataProcessor(DbManager manager, Calculator calculator) {
this.manager = manager;
this.calculator = calculator;
}
}
-> 이제
manager
, calculator
가 유닛 테스트할 때 모킹할 수 있도록 바뀌었다.