개발/Java

[Java] Observer Pattern

hojak99 2018. 4. 5. 17:53

Observer

Observer Pattern 은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메소드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는데 사용된다.

위의 내용은 wikipedia 에 정의된 내용이다. 좀 더 쉽게 말하면, 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가서 자동으로 내용이 갱신되는 방식 이라고 생각하면 될 것 같다.

보통 옵저버 패턴은 subject 혹은 publisher (이하 publisher 라 칭하겠음) 가 observer 의 리스트와 상태를 저장하고, observer 는 publisher 를 의존하고 있는 Observer Interface 를 구현하는 형태를 가지고 있다. 그래서 observer 의 주인은 publisher 가 된다.

다음은 옵저버 패턴의 개념도이다.

          (update)
publisher ---- Observer
         |
          ---- Observer
         |
          ---- Observer

위와 같이 옵저버 패턴은 publisher 와 observer 의 관계를 느슨한 결합을 이용해 관리한다 느슨한 결합을 이용해 관계를 관리할 때는 다음과 같은 이점이 있다고 한다.

  • 옵저버의 추가, 제거가 자유롭다.
  • 새로운 형식의 옵저버를 추가해도 주제를 변경할 필요가 없다.
  • 변경이 생겨도 서로에게 영향을 주지 않는다.
  • 등 등

뭔가 느슨한 결합이 Spring 의 Dependency Injection 를 떠오르게 한다.

즉, 상호의존성이 낮기 때문에 좀 더 변화에 대해 유연하다는 장점을 가지게 되는 것 같다.

그리고 상태를 전달하는 방법은 2가지가 있다고 한다.

  • PUSH : publisher 가 observer 에게 상태를 보내는 방식
  • PULL : observer 가 publisher에게서 상태를 요청하거나 가져가는 방식

다음 시간에 이 옵저버 패턴에 대해서 구현해보도록 하는 시간을 가지도록 하겠다.

js 에서도 옵저버 패턴을 사용할 수 있을까란 생각이 든다. 모르면 알아보자~ (존재함)


반응형