[Prism] 009. Prism의 핵심 구성 요소, 서비스 (Services) 등록 및 사용

WPF(Windows Presentation Foundation) 애플리케이션 개발에서 Prism은 모듈화된 애플리케이션과 유연한 디자인 패턴을 제공하는 훌륭한 프레임워크입니다. 이 글에서는 Prism의 핵심 구성 요소 중 하나인 서비스(Service)에 대해 깊게 탐구하고, 서비스 등록 및 사용 방법에 대한 예제를 제공합니다.

1. Prism의 서비스(Service) 개념

Prism에서 ‘서비스’란 애플리케이션 전반에 걸쳐 재사용 가능한 기능 또는 로직을 캡슐화하는 컴포넌트를 의미합니다. 서비스는 비즈니스 로직, 데이터 접근, 네트워크 통신, 사용자 인증 등 다양한 기능을 포함할 수 있습니다. 서비스의 주요 목표는 코드의 재사용성을 높이고, 테스트 용이성을 증가시키며, 모듈 간 의존성을 줄이는 것입니다.

2. Prism의 핵심 구성 요소

Prism은 다양한 구성 요소로 이루어져 있으며, 그 중 일부는 다음과 같습니다:

  • 모듈(Module): 애플리케이션의 기능적 세분화 단위로, 독립적으로 배포되고 재사용될 수 있는 컴포넌트입니다.
  • 뷰(View): 사용자 인터페이스의 시각적인 세 부분입니다. WPF의 XAML 파일이 이에 해당합니다.
  • 뷰모델(ViewModel): MVVM(Model-View-ViewModel) 패턴의 일부로, 데이터를 뷰와 연결하고 사용자 입력을 처리하는 로직을 포함합니다.
  • 서비스(Service): 애플리케이션에서 재사용되는 로직을 제공하는 클래스입니다.

3. Prism에서의 서비스 등록

Prism에서 서비스를 사용하기 위해서는 먼저 해당 서비스를 등록해야 합니다. 서비스를 등록하는 방법은 다양한데, IContainerRegistry 인터페이스를 사용해서 쉽게 등록할 수 있습니다. 아래에 서비스 등록의 기본적인 예제를 다룹니다.

3.1 서비스 인터페이스 정의

우선, 서비스 인터페이스를 정의합니다.

public interface IMyService
{
    string GetData();
}

3.2 서비스 구현

그 다음, 이 인터페이스를 구현하는 클래스를 작성합니다.

public class MyService : IMyService
{
    public string GetData()
    {
        return "Hello from MyService!";
    }
}

3.3 서비스 등록

이제 IContainerRegistry를 사용하여 서비스를 등록합니다. 일반적으로 이 작업은 Bootstrapper 클래스 내에서 수행됩니다. Bootstrapper는 Prism 애플리케이션의 시작점을 담당하는 클래스입니다.

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.RegisterSingleton();
}

4. 서비스 사용

서비스를 등록한 후에는 이를 사용하여 필요한 로직을 구현할 수 있습니다. 아래에 서비스 사용 예제를 나열합니다.

4.1 뷰모델에서 서비스 사용

뷰모델에서 서비스를 사용하기 위해, 생성자 주입(Constructor Injection)을 통해 서비스 인스턴스를 주입받습니다.

public class MyViewModel : BindableBase
{
    private readonly IMyService _myService;
    public string Data { get; set; }

    public MyViewModel(IMyService myService)
    {
        _myService = myService;
        LoadData();
    }

    private void LoadData()
    {
        Data = _myService.GetData();
    }
}

4.2 XAML에서 데이터 바인딩

XAML에서 뷰모델의 속성을 바인딩하여 사용자 인터페이스에 데이터를 표시합니다.

<TextBlock Text="{Binding Data}" />

5. 서비스의 생명주기

Prism에서는 서비스의 생명주기를 관리하는 다양한 방법이 있습니다. 서비스는 Singleton, Transient 등으로 등록할 수 있으며, 어떤 방식이 적합한지는 애플리케이션의 요구사항에 따라 다릅니다.

5.1 Singleton

Singleton으로 등록된 서비스는 애플리케이션 전체에서 하나의 인스턴스만 생성됩니다. 동일한 서비스의 인스턴스가 필요할 때 다시 요청하면 첫 번째 인스턴스를 반환합니다. 이 방법은 상태를 유지해야 하는 서비스에 유용합니다.

5.2 Transient

Transient으로 등록된 서비스는 요청할 때마다 새로운 인스턴스를 생성합니다. 이를 통해 각 인스턴스가 독립적으로 동작할 수 있도록 합니다. 상태를 유지하지 않거나 다양한 설정이 필요한 서비스에 적합합니다.

6. 결론

Prism의 서비스는 WPF 애플리케이션에서 모듈화된 아키텍처를 구축하는 데 있어 핵심적인 역할을 합니다. 서비스 구조를 통해 비즈니스 로직을 캡슐화하며, 이를 통해 코드의 재사용성과 관리성을 높일 수 있습니다. 또한, 테스트 용이성을 증가시킬 수 있어, 효율적인 개발을 지원합니다. 이 글에서는 서비스 개념부터 서비스 등록 및 사용 사례까지를 설명했습니다. Prism을 통해 WPF 애플리케이션을 보다 견고하고 유지보수가 용이하게 만드는 방법을 이해하는 데 도움이 되길 바랍니다.

7. 참고 자료