소프트웨어 개발에서 의존성은 한 클래스, 모듈, 또는 기능이 다른 클래스, 모듈, 또는 기능에 의존하고 있다는 것을 의미한다.
예를 들어 클래스 A가 클래스 B의 메서드를 호출하면 클래스 A는 클래스 B에 의존하게 된다.
이러한 의존성은 코드의 유지 관리를 어렵게 만들고, 변경에 따른 영향을 증가시킨다.
SOLID 원칙 중 하나인 의존성 역전 원칙은 두 가지 주요 포인트로 나뉜다.
이 원칙의 핵심은, "세부 사항은 추상화에 의존해야 한다"는 것이다.
이를 통해 시스템의 다양한 컴포넌트 사이의 결합도를 낮추고, 모듈성을 높일 수 있다.
테스트 특히 단위 테스트의 맥락에서 의존성 역전 원칙은 매우 중요한 개념이다.
테스트 가능한 코드 작성
의존성 역전을 적용하면, 각 컴포넌트는 더 작은 단위로 분리되어 테스트가 용이해진다.
Mocking과 Stubbing
의존성 주입을 통해 특정 의존성을 Mock 객체나 Stub 객체로 대체하여 테스트를 할 수 있다.
이러한 방식으로 테스트하려는 유닛 외부의 복잡한 로직이나 외부 시스템과의 상호 작용을 단순화하거나 제거할 수 있다.
테스트 자동화와 통합
의존성 역전 원칙을 따르면 테스트 자동화와 CI/CD 파이프라인과 같은 통합 도구에 코드를 쉽게 통합할 수 있다.
코드의 모듈성이 향상되기 때문에 개별 모듈을 독립적으로 테스트하고 통합할 수 있다.
=> 의존성 역전 원칙은 코드의 테스트 용이성을 향상시키고, 유지 관리를 쉽게 해준다.