반응형
정의
사용법
게시자
구독자에게 메시지를 보냄. 제네릭 인수를 설정하여 보낸 사람을 나타냅니다.
MessagingCenter.Send<MainPage>(this, "Hi");
⇒ 두 번째 인수에는 메시지를 지정합니다.
세 번째 인수에 페이로드 데이터를 함께 보낼 수 있습니다.
MessagingCenter.Send<MainPage, string>(this, "Hi", "John");
구독자
Subscribe 메서드를 통해 게시자의 메시지를 구독합니다.
MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) =>
{
// "Hi" 메시지를 받았을 때 할 작업
});
페이로드 데이터를 받을 수도 있습니다.
MessagingCenter.Subscribe<MainPage, string>(this, "Hi", async (sender, arg) =>
{
await DisplayAlert("Message received", "arg=" + arg, "OK");
});
⇒ arg가 게시자에서 보낸 세 번째 인수인 페이로드 데이터 입니다.
구독 취소
MessagingCenter.Unsubscribe<MainPage>(this, "Hi");
MessagingCenter.Unsubscribe<MainPage, string>(this, "Hi");
특징
- 게시자는 수신자가 없어도 메시지를 보냅니다.
- 구독자도 게시자를 몰라도 특정 메시지를 수신 대기합니다.
- 게시자와 구독자가 서로 참조하지 않고 통신할 수 있으므로 둘 사이의 종속성을 줄일 수 있습니다.
❗️반면 .NET의 이벤트는, 수명이 짧은 object가 수명이 길거나 정적인 이벤트를 구독하는 경우 메모리 관리 문제가 발생할 수 있습니다. ⇒ 이벤트 처리기가 제거되지 않으면, 구독자는 해당 참조에 의해 활성 상태로 유지됨.
- 내부적으로 MessagingCenter 클래스에서는 약한 참조(Weak reference)를 사용합니다.
주의
🔴코드의 종속성이 명확하지 않기 때문에, 추적이 힘듭니다. (Debug)
이유는 타이밍 문제가 가장 크다고 합니다.
페이지를 로드하고, OnAppearing과 MessagingCenter 중에 무엇이 먼저 호출되는 지가 모호합니다.
따라서, binding, navigation, Constructor Injection(생성자 주입) 등의 방법을 사용하는 것을 추천하며, 굳이 이런 방법을 놔두고 MessagingCenter를 쓰는 것을 추천하지 않는다고 합니다.
🟡그러나, 앱을 쉽게 모듈화할 수 있기 때문에 MessaginCenter를 통한 느슨한 결합을 옹호하는 개발자도 존재합니다. 결합도를 낮추어 유연한 구조가 가능하게 하기 때문입니다.
Reference
반응형
'프로그래밍 > App 개발' 카테고리의 다른 글
[Xamarin] Custom Layout (0) | 2020.10.21 |
---|---|
[Xamarin] SearchBar (0) | 2020.10.20 |
[Xamarin] UIModalPresentationStyle (0) | 2020.10.20 |
Syncronous, Asyncronous (오늘의 만나 iOS를 만들며 느낀점) (0) | 2020.10.02 |
[android] 앱 종료 시 블루투스 해제되는 issue (1) | 2020.08.06 |
Uploaded by Notion2Tistory v1.0.0