객체지향 프로그래밍에서 의존성 주입은 특정한 클래스가 다른 클래스의 의존성을 외부에서 주입받는 기법을 말한다.
DI를 사용하면 클래스 내부에서 새로운 객체를 직접 생성하는 대신 외부에서 필요한 객체를 받아와서 사용한다.
이를 통해 모듈 간의 결합도를 낮추고, 코드의 재사용성과 테스트 용이성을 향상시킬 수 있다.
즉 의존성 주입 ( DI )는 객체의 특정 기능이나 서비스를 외부에서 받아와서 사용하는 방식이다.
프로그램 내에서 객체나 컴포넌트를 직접 생성하고 그 흐름을 개발자가 직접 제어한다.
객체의 생성, 생명주기, 의존성 모든 것을 개발자가 코드로 직접 관리하는 것이 전통적인 제어 흐름의 특징이다.
유지보수성 향상
결합도가 낮은 모듈은 다른 모듈의 변경에 덜 민감하므로 하나의 모듈을 수정할 때 다른 모듈에 영향을 주는 확률이 줄어든다.
이는 유지보수 과정을 간소화하고 비용을 절감하는 데 도움이 된다.
재사용성 향상
결합도가 낮은 모듈은 다른 환경이나 다른 프로젝트에서도 쉽게 재사용될 수 있다.
이는 개발 비용과 시간을 절약하는 데 도움이 된다.
테스트 용이성
각 모듈이 독립적으로 동작하면 해당 모듈만을 대상으로 테스트를 진행할 수 있다.
이렇게 되면 단위 테스트가 더 간편하고 효율적으로 진행된다.
유연성
결합도가 낮으면 기능의 변경이나 추가가 필요할 때 해당 모듈만 수정하거나 새로운 모듈을 추가하기 쉽다.
이는 시스템의 확장성과 유연성을 향상시킨다.
이해하기 쉬움
각 모듈이 독립적으로 동작하고, 모듈 간의 의존성이 줄어들면 시스템 전체를 이해하기가 더 쉽다.
오류의 파급 효과 감소
한 모듈에서 발생하는 오류가 다른 모듈로 쉽게 전파되지 않게 된다.
이는 시스템의 안정성을 향상시키는 데 도움이 된다.
즉 DI는 객체의 의존성을 외부에서 주입받는 기법이며, Io*는 프로그램의 제어를 외부 요소에게 위임하여 코드의 결합도를 낮추는 디자인 패턴이다.