DI와 DIP ★★★
by yjym331. DI(Dependency Injection)란?
DI(Dependency Injection)는 의존성 관리를 위해 사용되는 디자인 패턴 중 하나입니다.
이 패턴은 객체가 필요로 하는 의존성(다른 객체 또는 서비스)을 외부에서 주입하는 방식을 채택합니다.
주로 생성자, 메서드 매개변수, 프로퍼티 등을 통해 의존성을 주입합니다.
2. 장점
유연성과 확장성: 의존성을 주입하므로 객체의 생성 및 의존성 변경이 용이합니다.
테스트 용이성: 모의 객체(Mock) 또는 가짜 객체(Fake)를 주입하여 단위 테스트가 쉬워집니다.
결합도 감소: 의존성을 외부에서 주입하면 객체 간의 결합도가 낮아져 유지보수성이 향상됩니다.
3. DIP(Dependency Inversion Principle)란?
DIP(Dependency Inversion Principle)는 SOLID 원칙 중 하나로 의존성 역전 원칙을 나타냅니다.
이 원칙은 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 양쪽 모두 추상화에 의존해야 한다고 제시합니다.
즉, 추상화에 의존하도록 설계되어야 합니다.
4. 장점
시스템 유지보수성 향상: 고수준 모듈과 저수준 모듈 간의 결합도가 낮아져 시스템의 유지보수가 쉬워집니다.
의존성 관리 용이성: 의존성 주입을 통해 DIP를 준수하면 객체 간의 의존성을 명확하게 관리할 수 있습니다.
5. DI와 DIP의 구현
1. DI 구현
DI는 주로 생성자 주입, 메서드 주입, 프로퍼티 주입 등의 방식으로 구현됩니다.
예를 들어, 생성자 주입은 다음과 같이 사용됩니다.
class MyService { private final MyDependency dependency; public MyService(MyDependency dependency) { this.dependency = dependency; } // ... }
2. DIP 구현
DIP를 준수하기 위해 추상화와 인터페이스를 사용합니다.
고수준 모듈과 저수준 모듈은 추상 인터페이스를 통해 연결됩니다.
interface MyDependency { // ... } class LowLevelDependency implements MyDependency { // ... } class HighLevelService { private final MyDependency dependency; public HighLevelService(MyDependency dependency) { this.dependency = dependency; } // ... }

블로그의 정보
생각보다 실천을
yjym33