brunch

You can make anything
by writing

C.S.Lewis

by 윤민섭 Nov 18. 2020

Observer Pattern

너를 관찰한다 패턴 

Observer pattern은 유튜브를 구독하는 것과 같습니다. 구독하면 동영상을 올렸을 때 우리에게 보입니다. 구독을 취소하면 더 이상 보이지 않게 되죠. Observer pattern도 마찬가지입니다.

특정 객체의 변화를 관찰하면서 그 객체에 변화가 있을 때 알림을 받게 되는 디자인 패턴입니다.


그림을 먼저 보겠습니다.



Observer는 구독을 관찰하는 객체입니다.

Subject는 구독한 Observer들에게 무언가 알려주는 역할입니다.

클래스 다이어그램과 역할을 바탕으로 코드를 구현해보겠습니다.


우선 Observer, Subject Protocol이 있습니다. Protocol로 선언한 이유는 구체 클래스에 의존하지 않기 위함입니다.


그다음은 구체 클래스입니다. 

Youtube 객체는 Observer들을 갖기 위한 배열을 갖고 있으며 Observer를 등록, 해제 그리고 Observer에게 알림이 가능합니다.

User 객체의 경우 Observer로써 Youtube 객체가 알림 시 update 메서드가 불리게 됩니다.


실제 동작이 어떻게 이뤄지는지 살펴보겠습니다.



등록이 된 객체에만 알림이 발송되는 것이 확인됩니다.

iOS에서 NotificationCenter 객체가 바로 Observer pattern을 적용한 대표적 사례입니다.

내부적으로 어떻게 동작하는지 이해하고 NotificationCenter객체를 사용해보는 것도 좋을 것 같습니다.


읽어주셔서 고맙습니다.




Observer pattern 클래스 다이어그램은 위키피디아에서 참고했습니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari