탐비의 개발 낙서장

[Kotlin] Observer 패턴과 Publisher-Subscriber 패턴 본문

프로그래밍/Kotlin

[Kotlin] Observer 패턴과 Publisher-Subscriber 패턴

탐비_ 2021. 8. 3. 22:56
Observer 패턴 / Publisher-Subscriber 패턴

 

 

서로에 대한 인지

 Observer 패턴의 경우 Subject에 Observer를 등록하고 Subject가 직접 Observer에 직접 알려주어야 합니다.

 Pub-Sub 패턴의 경우 Publisher가 Subscriber의 위치나 존재를 알 필요없이 Message Queue와 같은 Broker역할을 하는 중간지점에 메시지를 던져 놓기만 하면 됩니다.
 반대로 Subscriber 역시 Publisher의 위치나 존재를 알 필요없이 Broker에 할당된 작업만 모니터링하다 할당 받아 작업하면 되기 때문에 Publisher와 Subscriber가 서로 알 필요가 없습니다.

 

결합도

 Publisher와 Subscriber가 서로의 존재를 알 필요가 없기 때문에 당연히 소스코드 역시 겹치거나 의존할 일이 없습니다.
만약 결합도가 높다면 의도하거나 잘못된 코딩일 가능성이 큽니다.

 

비동기

 Pub/Sub 패턴은 서로를 간접적으로 알고 있기 때문에 비동기적인 처리가 가능합니다.

 

크로스 도메인 상황

 Pub/Sub 패턴은 Broker라는 중간 매개체가 있기 때문인데 어플리케이션의 도메인이 다르더라도 MessageQueue에 접근만 가능하다면 처리가 가능하여 크로스 도메인 상황에서도 구현이 가능합니다.

 

 

 

LiveData 구현체

 

 LiveData는 Data의 변경을 관찰할 수 있는 Data Holder 클래스로, LiveData는 안드로이드 생명주기를 알고 있습니다. Observable 패턴을 사용하기에 데이터의 변화를 구독한 곳으로 통지하고 업데이트 합니다. 

 LiveData 변수의 변화를 감지하는 Observer를 LifecycleOwner에 설정하고, 중간에 다른 서비스로 인해 LiveData 변수가 변하게 되면 Observer는 이를 감지하여 같은 Lifecycle를 공유하는 View를 변화시키는 동작을 할 수 있습니다. Publisher / Subscriber 패턴에서 역할과 비교하면 LiveData ->  Publisher, Observer -> PublisherCenter, View -> Subscriber로 각자의 역할을 한다고 이해하면 될것 같습니다.