Windows Presentation Foundation(WPF)은 Microsoft에서 개발한 .NET 소프트웨어 프레임워크로, 다양한 사용자 인터페이스(UI)를 만들 수 있는 강력한 플랫폼입니다. WPF는 넷 기반의 애플리케이션을 쉽게 개발할 수 있게 해주는 다양한 기능을 제공합니다. 이 글에서는 WPF의 기본 개념과 MVVM(Model-View-ViewModel) 패턴을 자세히 설명하고, 이들을 활용한 간단한 예제 코드를 제시하겠습니다.
1. WPF란 무엇인가?
WPF는 Windows 운영 체제를 위한 UI 프레임워크로, .NET Framework 내에서 다양한 플랫폼에서 실행할 수 있는 애플리케이션을 개발할 수 있도록 지원합니다. WPF는 XAML(Extensible Application Markup Language)을 통해 UI를 설계하며, 이는 HTML과 비슷한 마크업 언어입니다. WPF의 주요 장점은 선언적 프로그래밍, 데이터 바인딩, 스타일 및 템플릿 시스템, 그리고 하드웨어 가속 렌더링입니다.
WPF의 주요 특징
- XAML: UI 요소를 정의하고 구성하는 데 사용할 수 있는 마크업 언어입니다.
- 데이터 바인딩: UI와 데이터 모델 간의 연결을 쉽게 해주는 기능입니다. 이를 통해 MVC 또는 MVVM 패턴을 쉽게 구현할 수 있습니다.
- 스타일 및 템플릿: UI 요소의 시각적 표현을 정의할 수 있는 기능입니다. 이로 인해 UI 요소를 일관성 있게 표시할 수 있습니다.
- 3D 그래픽 및 미디어 지원: WPF는 3D 그래픽과 비디오, 오디오 등의 미디어를 쉽게 사용할 수 있는 기능을 제공합니다.
2. MVVM 패턴란?
MVVM(Model-View-ViewModel) 패턴은 WPF를 사용할 때 일반적으로 채택하는 디자인 패턴입니다. 이 패턴은 코드와 UI를 분리하여 개발자가 유지보수가 용이한 구조를 형성할 수 있도록 돕습니다.
MVVM의 구성 요소
- Model: 애플리케이션의 데이터 구조 및 비즈니스 로직을 포함하는 부분입니다. Model은 데이터베이스와의 상호작용을 포함할 수 있습니다.
- View: 사용자에게 보여지는 UI를 구성하는 부분입니다. XAML로 정의되며, 사용자가 인터랙션하게 되는 요소들로 이루어져 있습니다.
- ViewModel: Model과 View 사이의 중개 역할을 하는 부분입니다. ViewModel은 UI에 필요한 데이터를 제공하고, UI에서 발생하는 이벤트를 처리하여 Model에 반영합니다.
3. WPF에서 MVVM 구현하기
이제 간단한 WPF 애플리케이션을 통해 MVVM 패턴을 구현해 보겠습니다.
3.1. 프로젝트 설정
Visual Studio에서 새 WPF 애플리케이션 프로젝트를 생성합니다. 프로젝트 이름을 WPF_MVVM_Example
로 설정합니다.
3.2. Model 만들기
먼저 데이터를 나타낼 Model 클래스를 생성합니다. Person
클래스를 생성하여 이름과 나이를 속성으로 가집니다.
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
3.3. ViewModel 만들기
다음으로 ViewModel 클래스를 생성합니다. PersonViewModel
클래스를 만들어 Person
모델을 기반으로 하고, PropertyChanged 이벤트를 통해 UI에 반영할 수 있게 합니다.
using System.ComponentModel;
public class PersonViewModel : INotifyPropertyChanged
{
private Person _person;
public string Name
{
get => _person.Name;
set
{
_person.Name = value;
OnPropertyChanged(nameof(Name));
}
}
public int Age
{
get => _person.Age;
set
{
_person.Age = value;
OnPropertyChanged(nameof(Age));
}
}
public PersonViewModel()
{
_person = new Person { Name = "John Doe", Age = 30 };
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
3.4. View 만들기
XAML 파일에서 UI를 정의합니다. MainWindow.xaml
을 열고 다음과 같이 수정합니다.
3.5. View과 ViewModel 연결하기
마지막으로 MainWindow.xaml.cs 파일에서 ViewModel을 생성하고 DataContext에 할당합니다.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new PersonViewModel();
}
}
4. MVVM의 장점
MVVM 패턴을 사용함으로써 얻는 장점은 다음과 같습니다:
- 유지보수성: UI와 비즈니스 로직이 분리되어 있어 수정이 용이합니다.
- 테스트 용이성: ViewModel은 독립적으로 테스트할 수 있어 유닛 테스트가 가능합니다.
- UI 업데이트: 데이터 변경 시 자동으로 UI가 업데이트되어 데이터 일관성을 유지할 수 있습니다.
- 재사용성: ViewModel을 다른 View에서도 재사용할 수 있어 코드 중복을 방지할 수 있습니다.
5. 결론
WPF는 사용자 친화적인 인터페이스를 개발할 수 있는 강력한 프레임워크이며, MVVM 패턴을 채택함으로써 코드와 UI의 명확한 분리를 통해 유지보수성과 테스트의 편리함을 제공합니다. 지금까지 설명한 내용을 바탕으로 실제 애플리케이션을 개발하면서 WPF와 MVVM의 힘을 충분히 느끼실 수 있을 것입니다.
이 글이 WPF 개발 및 MVVM 패턴 이해에 도움이 되었기를 바랍니다.