이 글은 .NET MAUI에서 UI 스레드에서 안전하게 코드를 실행하는 두 가지 방법인 MainThread
와 Dispatcher
의 차이점과 사용 시기를 설명합니다.freakyali.medium.com
MainThread와 Dispatcher 비교
MainThread
Microsoft.Maui.ApplicationModel
네임스페이스의 정적 클래스입니다.- 주로 백그라운드 스레드에서 UI 업데이트가 필요할 때 사용됩니다.
- 사용 예:
MainThread.BeginInvokeOnMainThread(() =>
{
myLabel.Text = "Updated on main thread";
});
- 간단한 UI 업데이트에 적합하지만, 테스트나 구조화된 아키텍처에는 제한적입니다.
Dispatcher
Microsoft.Maui.Dispatching
네임스페이스의 인스턴스 기반 API입니다.- 각 UI 구성 요소(예:
Page
,View
,BindableObject
)에Dispatcher
인스턴스가 할당됩니다. - 사용 예:
this.Dispatcher.Dispatch(() =>
{
myLabel.Text = "Updated via Dispatcher";
});
- 테스트 가능하고, MVVM 아키텍처에 적합하며, 의존성 주입(DI)을 통해
IDispatcher
를 주입받아 사용할 수 있습니다.
왜 Dispatcher가 더 나은가?
- 스코프 기반: 정적 API 대신 각 UI 요소에 스코프가 지정되어 있습니다.
- 테스트 가능성:
IDispatcher
를 주입받아 단위 테스트가 가능합니다. - 타이머 지원: 타이머 기능을 기본으로 지원하여 외부 라이브러리 의존성이 줄어듭니다.
- MVVM 아키텍처에 적합: DI와 결합하여 ViewModel을 정리하고 결합도를 낮출 수 있습니다.
권장 사항
- 새로운 코드베이스에서는
Dispatcher
를 사용하는 것이 좋습니다. - 간단한 UI 업데이트에는
MainThread
를 사용할 수 있습니다. - UI 스레드에 과도한 작업을 몰아서 보내지 않도록 주의합니다.
- 테스트와 모킹을 고려하여
IDispatcher
를 주입받아 사용하는 것이 좋습니다.
이러한 비교를 통해, MainThread
는 간단한 작업에 적합한 도구이며, Dispatcher
는 구조화된 앱과 테스트 가능한 아키텍처에 더 적합하다는 것을 알 수 있습니다.