CS | 옵저버 패턴

happy tiger·2022년 10월 16일
0

CS

목록 보기
6/10
post-thumbnail

옵저버 패턴이란?

옵저버 패턴(observer pattern)주체가 어떤 객체(subject)의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴이다.
여기서 주체객체의 상태 변화를 보고 있는 관찰자이며, 옵저버들이란 이 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 '추가 변화 사항'이 생기는 객체들을 의미한다.

또한, 아래의 그림처럼 주체와 객체를 따로 두지 않고 상태가 변경되는 객체를 기반으로 구축하기도 한다.

옵저버 패턴의 예시

  1. python을 사용하여 간단하게 옵저버 패턴을 표현해보았다.
class Observer:
    def update(self):
        pass

class Cat(Observer):  # Observer 1
    def update(self): # event가 일어났을 때 동작할 update() 함수
        print("meow")

class Dog(Observer):  # Observer 2
    def update(self): # event가 일어났을 때 동작할 함수
        print("bark")

class Owner:          # 주체이자 객체
    def __init__(self):
        self.animals = []                 # Owner는 동물들(옵저버들) 소유

    def register(self, animal:Observer):  # 옵저버 등록(추가)하는 함수
        self.animals.append(animal)

    def notify(self):                     # event 발생시 옵저버 호출하는 함수
        for animal in self.animals:
            animal.update()

owner = Owner()
cat = Cat()
dog = Dog()

owner.register(cat) 
owner.register(dog)

owner.notify()     
# meow
# bark

이 코드에서 Owner주체이자 객체이고, CatDog옵저버들이다.
owner.register() 로 인해 주체이자 객체인 Owneranimals 속성에 변화가 발생한다. 이 변화 즉, event가 발생했을 때 옵저버를 호출하는 notify() 함수가 실행됨으로써 옵저버는 update() 함수를 실행하여 추가 변화 사항이 생기게 된다.

  1. 옵저버 패턴을 활용한 서비스로는 트위터가 있다.
    앞의 그림처럼 내가 어떤 사람인 주체를 '팔로우'했다면 주체가 포스팅을 올리게 되면 ( 상태가 변경되면 ) 알림 ( 추가 변화 사항 )이 '팔로워 ( 옵저버 )'에게 가야한다.

  2. 옵저버 패턴은 주로 이벤트 기반 시스템에 사용하며 MVC(Model-View-Controller)패턴에도 사용된다.
    예를 들어 주체라고 볼 수 있는 모델에서 변경 사항이 생겨 update() 메서드로 옵저버인 뷰에 알려주고 이를 기반으로 컨트롤러 등이 작동하는 것이다.

profile
호기심·끈기·성장·발전·행복·협력 ٩(๑•̀ㅂ•́)و

0개의 댓글