
DI(Dependency Injection)와 IoC(Inversion of Control)는 소프트웨어 설계 원칙으로, 코드의 유연성과 유지보수성을 높이기 위한 중요한 개념입니다. DI는 IoC의 구현 방법 중 하나로 간주됩니다.
DI(Dependency Injection) - 의존성 주입
- DI는 객체가 의존하고 있는 다른 객체를 직접 생성하지 않고, 외부에서 주입받는 방식입니다.
- IoC를 실현하는 한 가지 방법으로, 코드 간의 결합도를 낮추고 테스트 가능성을 높입니다.
IoC는 소프트웨어 설계 원칙(패러다임)이며, DI는 이를 구현하는 구체적인 방법 중 하나입니다.
IoC는 "제어를 외부로 넘긴다"라는 큰 개념이고, DI는 "의존성을 외부에서 주입받는다"는 구체적인 기법입니다.
DI는 의존성을 주입하는 방식에 따라 다음과 같이 구분됩니다:
| 종류 | 설명 | 예시 |
|---|---|---|
| 생성자 주입 | 객체를 생성할 때 의존성을 생성자의 매개변수로 전달받습니다. |
|
| 세터 주입 | 객체를 생성한 후, 세터 메서드를 통해 의존성을 주입받습니다. |
|
| 인터페이스 주입 | 의존성을 주입하기 위한 별도의 인터페이스를 구현하여 주입받습니다. |
|
Spring Framework는 IoC와 DI를 효과적으로 구현할 수 있는 프레임워크입니다.
@Component
public class Repository {}
@Service
public class Service {
private final Repository repository;
@Autowired
public Service(Repository repository) {
this.repository = repository;
}
}
| 장점 | 단점 |
|---|---|
| 결합도가 낮아 코드 변경 및 확장이 용이함 | DI 컨테이너 설정이 복잡할 수 있음 |
| 테스트 작성이 쉬워짐 | 디버깅이 어려울 수 있음 |
| 객체 생성을 관리하여 효율성을 높임 | 학습 곡선이 존재함 |