1. DI(Dependency Injection, 의존성 주입)에 대하여

- 필요한 객체를 밖에서 넣어주는 것
내부에 의존성을 직접 만드는 것이 아니라, 외부에서 의존성을 주입시킨다.- 인터페이스와 외부 주입이 있어야 비로소 의존성 주입이 완성됨.
2. 강한 결합(ViewModel 에서 DI 가 필요한 이유)

- ViewModel 내부에서 객체를 생성(구현체)하여 해당 객체에 의존성을 가지는 경우를 말함.
- 매우 강한 결합성을 가져, 내용 변경에 매우 취약함.
_provider = new DummyDataProvider();
> 다른 Model 변경시 ViewModel 변경이 필요하다.
> ViewModel 은 본 역할인 View 에 대한 처리만을 담당하도록 책임을 분리시켜야 할 필요성이 있다.
3. 약한 결합(의존성 주입)

- ViewModel(내부) 에서는 인터페이스만을,
- App(외부) 에서는 객체 생성(구현체)을,
- 담당하도록 하여 외부인 App 에서 내부인 ViewModel 에 의존성을 주입하는 경우를 말함.
- 강한 결합과 비교하여 결합성이 비교적 낮아, 내용 변경에 유연하게 대응할 수 있음.
1) ViewModel : 내부
public MainViewModel(IDataProvider provider)
{
_provider = provider;
}
> ViewModel 은 인터페이스 객체가 필요하다는 것만 알고있는 상태
2) App : 외부
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// 의존성 주입
IDataProvider provider = new DummyDataProvider();
var vm = new MainViewModel(provider);
var window = new MainWindow();
window.DataContext = vm;
window.Show();
}
IDataProvider provider = new DummyDataProvider();
var vm = new MainViewModel(provider);
window.DataContext = vm;
> 실제 ViewModel 객체는 App 의 OnStartup 에서 생성을 담당하도록 한다.
IDataProvider provider = new WebCrawlerProvider();
> 더미가 아닌 웹 크롤링 접근을 하기 위해서는 위처럼 변경하면 된다.(교체 위치 고정)
3) 핵심
- ViewModel 은 구현체를 모르고, 인터페이스만 알고있다.
- 의존성 주입은 결합도를 낮추고, 결과적으로 유지보수성을 늘린다.
'FRAMEWORK > WPF' 카테고리의 다른 글
| WPF : Model (0) | 2026.04.25 |
|---|---|
| WPF : 타이머 만들기 (0) | 2026.04.23 |
| WPF : MVVM(Model - View - ViewModel) (0) | 2026.04.23 |
| WPF : WPF 에 대하여 (0) | 2026.04.22 |
