Lined Notebook

DI와 DIP ★★★

by yjym33

1. 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

활동하기