A객체가 어떤 작업을 수행하기 위해 B객체를 필요로 하는 경우에 두 객체 사이에 의존성이 존재한다고 표현한다.
이때, A객체가 아닌 외부의 C객체가 B를 생성한 뒤에 이를 전달해서 의존성을 해결하는 방법을 의존성 주입(DI)이라고 한다.
유연하고 재사용할 수 있는 설계를 만들기 위해서는 코드의 변경 없이 다양한 실행 구조를 만들 수 있어야 한다.
예를 들어, A객체 내부에서 B를 직접 생성하는 경우 > B에 대한 결합도가 높아진다.
반면, B에 대한 생성 책임을 C에게 위임하고, C가 A에게 다시 전달해 주는 방식을 통해서 A는 B에 대한 결합도를 낮추고 유연한 설계를 만들 수 있다.
방식
1. 생성자 주입 - 동일한 주입이 필요한 경우(가장 권장)
2. setter 주입
3. 메서드 주입 - 실행할때마다 의존 대상이 매번 달라지는 것처럼 일시적인 의존이 필요한 경우
전략 패턴 vs 의존성 주입
결론부터: 같은 개념입니다!
구분설명
| 전략 패턴 | 디자인 패턴의 이름 (어떻게 설계할까?) |
| 의존성 주입 | 구현 기법의 이름 (어떻게 전달할까?) |
전략 패턴 관점
"행위를 동적으로 바꿀 수 있게 설계하자"
Commuter jiwon = new Commuter();
// 월요일
jiwon.setStrategy(new Bus());
jiwon.goToWork();
// 화요일
jiwon.setStrategy(new Subway()); // 전략 변경!
jiwon.goToWork();
초점: 런타임에 행위를 바꿀 수 있다
의존성 주입 관점
"결합도를 낮추기 위해 외부에서 넣어주자"
// 외부(Main)에서 의존성 결정
TransportStrategy strategy = new Bus();
// 주입
Commuter jiwon = new Commuter(strategy);
jiwon.goToWork();
초점: 객체 간의 결합도를 낮춘다
'cs(with 매일메일)' 카테고리의 다른 글
| [251229월] CI/CD파이프라인에 대해서 설명해주세요. (0) | 2026.01.14 |
|---|---|
| [251226금] 코드 커버리지에 대해서 설명해주세요. (0) | 2026.01.14 |
| [251224수] 스프링 트랜잭션 AOP동작 흐름에 대해서 설명해주세요. (0) | 2026.01.14 |
| [251223화] 전략 패턴에 대해서 설명해주세요. (0) | 2026.01.14 |
| [251222월] 정적 IP 주소 할당 방식과 동적 IP 주소 할당 방식의 차이점을 설명해주세요. (0) | 2026.01.13 |