본문 바로가기
코딩취미/C,C++

MVVM 패턴의 특징과 XAML 구조와 사용방법

by 브링블링 2024. 3. 2.
728x90

MVVM 패턴의 특징과 XAML 구조와 사용방법

MVVM (Model-View-ViewModel) 패턴은 주로 WPF (Windows Presentation Foundation), Silverlight, Xamarin, Angular 등의 클라이언트 사이드 개발에서 사용되는 디자인 패턴입니다. 이 패턴은 애플리케이션의 UI (사용자 인터페이스) 로직과 비즈니스 로직을 분리하여, 유지 보수와 테스트가 용이하며, 더 나은 개발 경험을 제공합니다. 

그리고 XAML (eXtensible Application Markup Language)은 마이크로소프트에 의해 개발된 선언적 마크업 언어입니다. 주로 WPF (Windows Presentation Foundation), UWP (Universal Windows Platform), Xamarin.Forms 등의 .NET 기반 애플리케이션에서 사용자 인터페이스(UI)를 정의하는 데 사용됩니다. XAML을 사용하면, UI 구성 요소를 XML 형태로 선언적으로 표현할 수 있어, 코드 비하인드 (C# 등의 프로그래밍 언어 코드)에서 UI를 직접 구성하는 것보다 훨씬 간결하고 관리하기 쉬운 UI를 개발할 수 있습니다.

 

MVVM 패턴의 특징

MVVM의 구성 요소

  1. Model: 데이터와 비즈니스 로직을 포함하는 애플리케이션의 도메인. 데이터의 가공, 데이터베이스 작업, 검증 로직 등을 포함할 수 있습니다.
  2. View: 사용자에게 보여지는 UI 부분입니다. XAML 또는 다른 마크업 언어로 작성되며, 사용자의 입력을 받아 ViewModel에 전달합니다.
  3. ViewModel: View를 위한 모델로, View에 바인딩되어 UI와 Model 사이의 데이터 및 명령을 매핑합니다. ViewModel은 Model로부터 데이터를 가져와서, 사용자가 이해하기 쉬운 형태로 가공하여 View에 전달합니다.

MVVM의 단계별 구현

MVVM 패턴은 Model, ViewModel, 그리고 View의 세 가지 주요 구성 요소를 사용하여 애플리케이션의 UI와 비즈니스 로직을 분리합니다. 아래 예제를 통해 간단한 MVVM 애플리케이션의 기본 구조와 구현 방법을 볼 수 있습니다. MVVM은 유지 보수와 테스트가 용이하며, 데이터 바인딩을 통해 UI와 모델 사이의 자동 동기화를 제공합니다.

단계 1: Model 정의하기

Model은 애플리케이션에서 사용하는 데이터와 비즈니스 로직을 캡슐화합니다. 예를 들어, 사용자 정보를 관리하는 간단한 Model을 다음과 같습니다.

public class User
{
    public string Name { get; set; }
    public string Email { get; set; }
}

단계 2: ViewModel 생성하기

ViewModel은 View와 Model 사이의 매개체 역할을 합니다. ViewModel은 Model로부터 데이터를 가져와서, 이를 View가 사용할 수 있는 형태로 변환합니다.

public class UserViewModel
{
    private User user;

    public UserViewModel()
    {
        user = new User { Name = "John Doe", Email = "john.doe@example.com" };
    }

    public string UserInfo
    {
        get { return $"{user.Name} - {user.Email}"; }
    }
}

단계 3: View 구성하기

View는 ViewModel과 바인딩되어 사용자 인터페이스를 구성합니다. WPF에서는 XAML을 사용하여 UI를 정의하고, ViewModel의 프로퍼티와 바인딩합니다.

<Window x:Class="MvvmExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MVVM Example" Height="200" Width="300">
    <Grid>
        <TextBlock Text="{Binding UserInfo}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
    </Grid>
</Window>

 

MainWindow.xaml.cs 파일에서 ViewModel을 View에 바인딩합니다.

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new UserViewModel();
    }
}
728x90

MVVM의 패턴을 이용한 간단한 예제 구성 : To-Do List

MVVM 패턴을 사용한 실제 프로그램 예제로, 간단한 할 일 목록 (To-Do List) 애플리케이션을 만들어 보겠습니다. 이 애플리케이션은 사용자가 할 일을 추가하고, 목록에서 확인할 수 있으며, 완료한 일을 체크할 수 있는 기능을 제공합니다.

1. 프로젝트 설정

  1. Visual Studio를 열고 WPF App (.NET Core) 프로젝트를 생성합니다.
  2. 프로젝트 이름을 TodoListApp로 지정합니다.

2. Model 정의하기

Model은 할 일 항목을 나타내는 TodoItem 클래스로 구성됩니다.

 

TodoItem.cs:

public class TodoItem
{
    public string Title { get; set; }
    public bool IsCompleted { get; set; }
}

3. ViewModel 생성하기

ViewModel은 Model과 View 사이의 데이터를 처리합니다. 여기서는 MainViewModel을 생성하고, 할 일 목록 관리 및 항목 추가 기능을 구현합니다.

 

MainViewModel.cs:

using System.Collections.ObjectModel;
using System.Windows.Input;

public class MainViewModel
{
    public ObservableCollection<TodoItem> Items { get; set; }
    public ICommand AddItemCommand { get; set; }

    public MainViewModel()
    {
        Items = new ObservableCollection<TodoItem>();
        AddItemCommand = new RelayCommand(AddItem);
    }

    private void AddItem()
    {
        Items.Add(new TodoItem { Title = "New Item", IsCompleted = false });
    }
}

public class RelayCommand : ICommand
{
    private Action _execute;

    public RelayCommand(Action execute)
    {
        _execute = execute;
    }

    public event EventHandler CanExecuteChanged;

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        _execute();
    }
}

4. View 구성하기

View는 사용자 인터페이스를 정의합니다. XAML을 사용하여 할 일 목록을 보여주고, 항목을 추가할 수 있는 버튼을 구성합니다.

 

MainWindow.xaml:

<Window x:Class="TodoListApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="To-Do List" Height="450" Width="800">
    <StackPanel>
        <Button Content="Add Item" Command="{Binding AddItemCommand}" Margin="5"/>
        <ListBox ItemsSource="{Binding Items}" DisplayMemberPath="Title" Margin="5"/>
    </StackPanel>
</Window>

5. View와 ViewModel 연결하기

마지막으로, MainWindow.xaml.cs 파일에서 MainWindow의 DataContext를 MainViewModel 인스턴스로 설정하여 View와 ViewModel을 연결합니다.

 

MainWindow.xaml.cs:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new MainViewModel();
    }
}

6. 실행 및 테스트

이제 프로젝트를 실행하면, 사용자가 "Add Item" 버튼을 클릭할 때마다 새로운 할 일 항목이 목록에 추가됩니다. 이 예제를 통해 MVVM 패턴을 사용하여 WPF 애플리케이션을 구현하는 기본적인 방법을 배웠습니다. MVVM은 UI 로직과 비즈니스 로직의 분리를 통해 애플리케이션의 유지 보수성과 확장성을 개선합니다.

 

XAML의 기본 구조와 사용 방법

XAML은 태그를 사용하여 UI 요소를 정의합니다. 각 태그는 UI의 한 부분(예: 버튼, 텍스트 박스, 레이아웃 패널 등)을 나타냅니다. XAML 파일은 보통 .xaml 확장자를 가지며, 관련 코드 비하인드 파일(예: .xaml.cs)과 함께 작동하여 UI의 동작을 정의합니다.

기본 사용 예시

다음은 간단한 XAML 사용 예시입니다. 이 예제에서는 하나의 버튼과 텍스트 박스를 포함하는 UI를 정의합니다.

 

Example.xaml:

<Window x:Class="XamlExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="XAML Example" Height="200" Width="300">
    <StackPanel>
        <Button Content="Click Me" Click="Button_Click"/>
        <TextBox Name="txtBox"/>
    </StackPanel>
</Window>

이 XAML 코드는 StackPanel을 사용하여 버튼과 텍스트 박스를 세로로 정렬합니다. Button 요소의 Content 속성은 버튼에 표시될 텍스트를 지정하고, Click 이벤트는 사용자가 버튼을 클릭했을 때 실행될 이벤트 핸들러를 지정합니다. TextBox 요소는 사용자 입력을 받는 텍스트 필드를 생성합니다.

단계별 사용 방법

단계 1: XAML 파일 생성

  1. Visual Studio에서 WPF, UWP, 또는 Xamarin.Forms 프로젝트를 생성합니다.
  2. 프로젝트에 새 XAML 파일을 추가하거나 기존 XAML 파일을 엽니다.

단계 2: UI 요소 추가

XAML 파일 내에 필요한 UI 요소를 XML 태그로 추가합니다. 예를 들어, 버튼, 텍스트 박스, 리스트 뷰 등이 있습니다.

단계 3: 속성 및 이벤트 설정

각 UI 요소에 필요한 속성(예: Content, Width, Height)을 설정하고, 이벤트 핸들러(예: Click)를 연결합니다.

단계 4: 코드 비하인드 연결

XAML 파일과 연결된 코드 비하인드 파일(예: MainWindow.xaml.cs)에서 UI 요소의 이벤트 핸들러를 구현합니다.

 

MainWindow.xaml.cs:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        txtBox.Text = "Hello, World!";
    }
}

이 코드는 사용자가 버튼을 클릭할 때 텍스트 박스의 텍스트를 "Hello, World!"로 변경합니다.

단계 5: 애플리케이션 실행 및 테스트

애플리케이션을 실행하여 UI가 의도한 대로 작동하는지 확인합니다. 필요에 따라 XAML 코드나 코드 비하인드를 수정하며 UI를 조정합니다. XAML을 사용함으로써 개발자는 복잡한 UI를 보다 쉽게 구성하고, 디자인과 로직을 분리하여 애플리케이션의 유지보수성을 향상시킬 수 있습니다.

728x90