Skip to content

Latest commit

 

History

History

ch2-observer

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Observer pattern

  • 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one to many) 의존성을 정의
  • 일대다 관계는 주제와 옵저버에 의해 정의하고, 옵저버는 주제에 의존

방법

  • 주제(subject)가 옵저버(observer)에 대해서 아는 것은 옵저버가 특정 인터페이스(observer의 interface)를 구현한다는 것
    • 옵저버의 구상 클래스가 무엇인지, 무엇을 하는지에 대해서 알 필요 없음
  • 옵저버는 언제든지 새로 추가/삭제할 수 있어야 함
  • 새로운 형식의 옵저버를 추가하려고 할 때도 주제를 전혀 변경할 필요 없어야 함
  • 주제와 옵저버는 서로 독립적으로 재사용할 수 있어야 함
  • 주제나 옵저버가 바뀌더라도 서로한테 영향을 미치지 않아야 함

구현 관련

  • before의 경우 observer 구현체(display)에서 생성 시에 subject를 파라미터로 받고 있음
    • 이로 인해서 observer 구현체에 subject 패키지가 import
    • observer 구현체들을 display 패키지를 별도로 두지 않고, observer 패키지에서 위치시키는 경우 import cycle not allowed 발생
  • after에서는 observer 구현체의 필드에 subject를 두지 않고, 클라이언트(메인)에서 register하는 방법으로 구현
    • 이로 인해서 observer 구현체에 subject 패키지가 import되지 않기 때문에 import cycle not allowed를 방지할 수 있음

Reference