[해결] 옵저버 패턴(Observer Pattern)을 공부하다가 궁금한 점이 생겼습니다.
글쓴이: litmus80 / 작성시간: 수, 2009/01/28 - 8:24오후
안녕하세요. 옵저버 패턴을 공부하다가 궁금한 점이 생겨서 글을 올립니다.
책에서 보면 옵저버 패턴이란 "한 객체의 상태에 변화가 일어나면, 해당 객체의 상태에 관심 있는 모든 다른 객체들에게 자동으로 변화가 발생한 사실을 알려주는 방식"라고 하는데요. 바로 이 부분이 조금 혼동스럽습니다.
첫번째로는 오직 일방적으로 주제 객체에서 옵저버 객체쪽으로 메시지가 전달된다는 건지 아니면 옵저버 객체끼리도 주제 객체를 통해 메시지 전달이 가능하다는 의미인지 말입니다.
두 번째로는 주제 객체를 거점으로 각각의 옵저버들이 다양한 상태값을 공유하고 있다면, 원칙으로는 그것을 변화시키기 위한 주체는 주제객체이거나 주제객체를 참조하는 클라이언트 객체인지, 아니면, 옵저버가 주제객체에 접근하여 상태값을 변경시켜도 괜찮다는 건지 잘 모르겠습니다.
선배님들께 부디 답변을 부탁드립니다 ^^;
Forums:
옵저버는 그저
옵저버는 그저 지켜볼 뿐이니,
보통 주체 객체에 side effect를 주거나 하지는 않습니다.
옵저버 패턴을 사용하는 이유는
보통 주체 객체에 어떤 변경이 일어난 시점을
외부에서 바로 눈치채기는 어렵기 때문입니다.
그래서 주체 객체가 능동적인 일을 하는 것이죠.
그 외의 기능은 이 패턴의 설명과는 상관없다고 해야겠죠.
observer 패턴은
observer 패턴은 subject와, subject의 상태 변화를 read-only로 읽어가려는 여러 객체 간의 단순한 일대다 종속 관계를 위한 것이라고 이해하시는 것이 좋겠습니다.
궁금해 하신 것과 같이 특정 객체를 매개로 상태값을 공유하여 그를 이용해 메시지 전달을 하거나 여러 객체의 동작을 컨트롤하기 위한 패턴으로는 mediator 가 있습니다. observer와 유사해서 혼동하기 쉽고, 상황에 따라 경계가 불분명할 수도 있습니다만 보통 observer 패턴은 read-only 또는 그에 준하는 경우에 한정합니다. (라고 저는 생각합니다. ㅎㅎ)
아 그렇군요! 정말 감사합니다 ㅠㅜ
vacancy님 prio 님
친절하고 세세한 답변 주셔서 정말 감사합니다.
역시 명쾌한 해답을 얻기에는 KLDP 만큼 좋은 곳이 없군요 ㅠㅜ
댓글 달기