티스토리 뷰

뭔가 중요한 일이 일어났을 때 객체들한테 새소식을 알려줄 수 있는 패턴이 있다! 옵저버 패턴!!





옵저버 패턴

한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고,
자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다.

쉽게 설명하면! 
우리가 신문이나 잡지를 구독하면 매달 신문과 잡지에 대한 새로운 내용을 알림으로 받게되는데
이 때 잡지사가 subject! 구독하는 우리는 observer 입니다-

Subject

객체에서 observer로 등록하거나 observer목록에서 탈퇴하고 싶을 때는 이 인터페이스에 있는 메소드를 사용

ConcreteSubject

notifyObservers() 메소드를 통해 observer들에게 상태가 바뀔 때마다 연락을 한다

Observer

Subject의 상태가 바뀌었을 때 호출되는 update()메소드가 있다.


일대다 관계

observer 패턴에서 상태를 저장하고 지배하는 것은 subject 객체이다.
따라서 상태가 들어있는 객체는 하나만 있을 수 있다.

하지만 observer는 사용하긴 하지만 반드시 상태를 가지고 있어야 하는 것은 아니다.
결과적으로, observer는 subject객체에서 상태가 바뀌었다는 것을 알려주기를 기다리는, 의존적인 성질을 갖게 된다.
그러므로 하나의 subject와 여러 개의 observer가 연관된 일대 다 관계가 성립된다.


의존성

데이터의 주인은 subject이고, 데이터가 변경되었을 때 갱신을 기다리는 입장은 observer이기 때문에
여러 객체에서 동일한 데이터를 제어하는 방법보다 깔끔한 객체지향 디자인이 된다.

Loose coupling(느슨한 결합)

Loose coupling : 두 객체가 상호작용을 하지만, 서로에 대해 잘 모른다는 것을 의미
  • subject가 observer에 대해서 아는 것은 특정 인터페이스(interface observer)를 구현한다는것 뿐
  • observer가 추가되어도 subject는 변화될 필요가 없다.
  • subject와 observer는 서로 독립적으로 재사용할 수 있다.
  • subject와 observer가 바뀌더라도 서로에게 영향을 주지 않는다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함