MessagingCenter는 .NET 10용 .NET MAUI에서 사라집니다

:pushpin: .NET MAUI에서 MessagingCenter가 사라지는 이유는 무엇이며, 어떤 대안이 제시되었나요?

MessagingCenter는 성능 최적화가 되지 않았고, 원래 사용자를 위해 만들어진 것이 아니었기 때문에 .NET 10에서 완전히 제거될 예정이며, MVVM 툴킷의 Weak Reference Manager WeakReferenceMessenger를 기반으로 하는 플러그인이 대안으로 제시되었습니다

:light_bulb: 제시된 플러그인의 특징은 무엇인가요?

  • 기존 MessagingCenter와 동일한 메서드 시그니처를 가져 코드 변경 없이 사용 가능합니다

  • 내부적으로 MVVM 툴킷의 Weak Reference Manager WeakReferenceMessenger를 사용하여 성능이 향상되었습니다

  • 동일한 메시지에 두 번 구독할 경우 예외가 발생합니다 (기존 MessagingCenter와 다른 점)

목차

1. :stop_sign: MessagingCenter의 사용 종료와 대체 방안

2. :gear: 새 메시징 시스템 플러그인 및 이전 MessagingCenter의 성능 문제 해결 방안

3. :prohibited: MessagingCenter 폐지 및 대체 방안 안내

4. :gear: .NET 10에서 MessagingCenter의 변화와 대체 방안

5. :rocket: .NET 10으로 이행 시 발생하는 변경사항과 메시징 센터의 핵심 변화

이 비디오는 .NET MAUI 앱에서 MessagingCenter가 .NET 10에서 제거됨에 따라 발생할 수 있는 문제를 해결하는 방법을 제시합니다. MessagingCenter는 Xamarin.Forms부터 사용된 Pub-Sub 패턴의 구현체였으나, 성능 문제로 인해 제거될 예정입니다. 영상에서는 MessagingCenter를 대체할 수 있는 드롭인 플러그인을 소개하고, MVVM Toolkit의 Weak Reference Manager WeakReferenceMessenger를 활용하여 성능을 개선하는 방법을 설명합니다. 궁극적으로는 Weak Reference Manager WeakReferenceMessenger로의 전환을 권장하지만, 플러그인을 통해 점진적인 마이그레이션을 지원합니다. .NET MAUI 앱 개발자는 이 영상을 통해 MessagingCenter 제거에 대비하고, 더 나은 성능을 위한 대안을 모색할 수 있습니다.

1. :stop_sign: MessagingCenter의 사용 종료와 대체 방안

  • .NET 10에서는 MessagingCenter가 완전히 제거되어 더 이상 사용 불가하며, 이를 대체하는 성능이 향상된 방법을 빠르게 구현할 필요가 있다.

  • MessagingCenter는 Xamarin.Forms 시절부터 존재한 퍼블리시-서브스크라이브 패턴으로, 플랫폼 간 신호 전달이나 경고 표시 등 유연하게 사용되었지만, 개인적으로 선호하지 않는 패턴이다.

  • 이것은 느슨한 결합을 통해 통신하는 방식으로, 유지보수와 확장성에 어려움을 초래할 수 있으며, 이미 .NET 7 또는 8에서 폐기되었고 이제 완전히 제거된다.

  • 개발자들이 이 패턴에 의존해 온 상황을 고려하여, 피드백을 반영해 잠시 재도입했지만, 이번에는 더 이상 복구하지 않고 철저히 제거한다.

2. :gear: 새 메시징 시스템 플러그인 및 이전 MessagingCenter의 성능 문제 해결 방안

  • 기존의 MessagingCenter는 성능이 낮아 최적화되지 않았으며, 많은 개발자가 인위적으로 사용하던 상태였다. 따라서 새 플러그인에서는 이전과 동일한 메서드와 시그니처를 유지해 쉽게 대체 가능하게 만들었다 .

  • 새 플러그인은 기존 코드를 거의 변경하지 않고 바로 사용할 수 있으며, 일부 수정만으로 이전과 동일한 기능을 수행한다는 점을 강조한다 .

  • 내부 구현에서는 MVVM Toolkit의 Weak Reference Manager WeakReferenceMessenger를 사용해 성능을 대폭 향상시켰으며, 이는 기존 방식을 뛰어넘는 최적화된 솔루션이다. 개발자는 이를 적극 활용하는 것이 권장된다 .

  • 플러그인은 작은 Thin Wrapper 형태로 제공되어, 쉽게 마이그레이션하고 새로운 Weak Reference Manager WeakReferenceMessenger로 전환하는 데 도움을 준다. 이는 향후 더 많은 기능을 활용하기 위한 좋은 방법이다 .

  • 개발자들이 현재 상황에서 즉각적으로 변경하는 것이 부담스럽다면, 해당 플러그인을 일시적인 전환 도구로 활용할 수 있음을 안내한다 .

  • 예제 애플리케이션에서는 파일 새 프로젝트 생성 후 불필요한 요소를 삭제하고, ‘구독’, ‘구독 해제’, ‘메시지 전송’ 버튼 세 개로 메시징 기능을 시연한다. 이는 메시지 구독 상태 시각적 피드백이 미흡하였음을 보여준다 .

  • 메시지 구독이 완료되었는지 직관적으로 알 수 없는 구조임을 감안할 때, 개선이 필요하며, 현재 구현은 단순 텍스트 알림 또는 UI적 피드백이 미약한 상태임이 추정된다 , .

3. :prohibited: MessagingCenter 폐지 및 대체 방안 안내

  • .NET 10에서는 기존의 MessagingCenter더 이상 사용되지 않는다는 점을 알 수 있으며, 앞으로는 다른 방식이 필요하다 .

  • 현재까지는 MessagingCenter에서 중복 구독이 가능했지만, 이는 제한이 생겨 예외가 발생할 수 있음을 전망한다 .

  • 중복 구독 시 메시지가 한 번 이상 전달되는 문제가 있었으며, 이는 기존 플러그인에서는 문제가 아니었지만 앞으로는 지원되지 않는다 .

  • 중복 구독 관련 이전 방식은 취약하고, Breaking Change로서 반드시 해결책을 마련해야 함을 강조한다 .

  • MessagingCenterdeprecated 메시지와 함께, subscribe 시 문자열 파라미터를 받아 처리하는 방식임을 보여준다 .

4. :gear: .NET 10에서 MessagingCenter의 변화와 대체 방안

  • MessagingCenter는 .NET 10에서 더 이상 공개적으로 사용되지 않으며, 내부로 변경되었다고 언급되며, 현재 코드에서 사용하려면 자체적으로 해결책이 필요하다고 설명한다 .

  • 기존의 메시지 발행과 구독 방식은 문자열 파라미터를 통해 이루어지며, 메시지 송신, 구독, 구독 해제 과정은 모두 문자열 파라미터와 일치하는 시그니처가 필요하다 .

  • 대안으로 CommunityToolkit.Mvvm 기반의 Plugin.Maui.MessagingCenter 플러그인이 소개되고, 이를 NuGet 패키지로 설치하는 방법을 설명한다 .

  • 플러그인은 오픈 소스이며 GitHub 링크가 제공되며, 기존 MessagingCenter의 기능을 거의 그대로 대체할 수 있다고 한다 .

  • 사용 시 using Plugin.Maui.MessagingCenter 네임스페이스를 추가하면 기존 메시징 방식과 호환되어, 별도 코드 변경 없이 바로 사용할 수 있다고 설명한다 .

  • .NET 10에서 내부로 변경된 MessagingCenter 사용에 따라 ‘DisplayAlert’ 메서드도 이름이 ‘DisplayAlertAsync’로 변경되었으며, 이 역시 쉽게 수정 가능하다고 안내한다 .

5. :rocket: .NET 10으로 이행 시 발생하는 변경사항과 메시징 센터의 핵심 변화

  • .NET 10으로 업그레이드하면서 재컴파일이 필요하며, 기존 버전의 변경 사항은 주로 큰 버전 업데이트로 인한 재빌드 때문이다 .

  • 새로운 플러그인과 호환성 향상으로 기존 MessagingCenter를 유지하면서도 주요 기능을 지원할 수 있다 .

  • 업그레이드 후 메시지 구독과 해제 기능이 정상 동작하며, unsubscribe 사용 시 예외 발생 문제를 해결하는 Breaking Change가 있다 .

  • 기존 코드 수정 없이도 메시징 센터의 핵심 기능을 유지할 수 있으며, 이는 큰 이점으로 평가된다 .

  • 제안으로는, 전체 재작성 대신 빠른 전환을 위해 이 플러그인을 사용하는 것이 추천되며, 강하게 권장되는 것은 아니고 유지보수는 제한적이다 .

  • 앞으로 .NET 10 관련해서 MediaPicker 기능 등 신규 기능 소개 영상을 계획 중이며, 추가 기능 및 업데이트 정보를 제공할 예정이다 .

2개의 좋아요

WeakReferenceMessenger 아닐까요? :joy:

1개의 좋아요

엇 그러네요..!
lilyai로 요약한거다보니 오철자를 확인못했네요

감사합니다 :slight_smile:
말씀하신 건 본문에 수정해놓겠습니다.

1개의 좋아요