본문 바로가기

cs(with 매일메일)

[251225목] 의존성 주입이랑 무엇인가요?

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();

초점: 객체 간의 결합도를 낮춘다