WPF : ViewModel - DI(의존성 주입)

2026. 4. 25. 17:19·FRAMEWORK/WPF

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
'FRAMEWORK/WPF' 카테고리의 다른 글
  • WPF : Model
  • WPF : 타이머 만들기
  • WPF : MVVM(Model - View - ViewModel)
  • WPF : WPF 에 대하여
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
WPF : ViewModel - DI(의존성 주입)
상단으로

티스토리툴바