티스토리 뷰

knowledge/pattern

[Pattern] Observer Pattern

글을 쓰는 개발자 2022. 8. 27. 21:20
반응형

정의


옵저버 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의합니다.

이와 관련된 객체지향의 개념

느슨한 결합(인터페이스를 통한 구현)


Subject는 특정 인터페이스를 구현한다는 사실만 알고 특정 클래스에 대해서는 몰라도 되게끔 구현하는 것이 느슨한 결합
쉽게 정의하자면 어떠한 클래스에 멤버변수를 정의할 때 특정 클래스로 정의하지 않고 인터페이스로 정의함으로써 다양한 클래스들이 참여할 수 있는 환경을 구성하는 것을 의미한다.

느슨하게 결합하는 디자인을 사용하면 변경 사항이 생겨도 무난히 처리할 수 있는 유연한 객체지향 시스템을 구축할 수 있다. 객체 사이의 상호의존성을 최소화하는 작업이기 때문이다.

예시코드 ( 스프링 배치를 통한 예제)

Subject

  • MapJobRegistry

Observer

  • JobFactory

애매한 점
하나의 Subject가 여러개의 Observer 들을 관리한다는 것에서 Observer 패턴으로 보이지만, 그렇다고 해서 Observer 들이 Subject의 내용을 update 하거나 사용하는 것이 없다. 완벽한 옵저버 패턴은 아닌 것 같다.

 

Subject

  • Job
    • AbstractJob
      • FlowJob
      • SimpleJob

Observer

  • JobExecutionListener
    • CompositeJobExecutionListener

AbstractJob에서 여러개의 listener를 등록하고 execute 부분에서 등록된 리스너들을 실행을 한다.

이 때 doExecute(execution) 전에 beforeJob을 실행하고 이 후에 afterJob을 실행함으로써
Subject(AbstractJob)의 상태값이나 기타 정보들을 매개변수를 통해 전달한다는 것에서 Observer Pattern이라고 할 수 있을 것 같다.

반응형

'knowledge > pattern' 카테고리의 다른 글

[Pattern] Factory Pattern  (0) 2022.09.10
[Pattern] Decorator Pattern  (0) 2022.09.10
[Pattern] Strategy Pattern  (0) 2022.08.10
[Pattern] Facade Pattern  (0) 2021.12.12
[Pattern] Composite Pattern에 대하여  (0) 2021.11.29
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함