옵져버 패턴


옵저버 패턴


옵저버 패턴이란?

옵저버 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고

자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다.

옵져버 패턴은 여러 가지 방법으로 정의할 수 있지만, 보통은 주제 인터페이스와

옵저버 인터페이스가 들어있는 클래스 디자인으로 구현하다.


느슨한 결합


느슨한 결합(Loose Coupling)은 객체들이 상호작용할 수는 있지만, 서로를 잘 모르는

관계를 의미한다. 느슨한 결합을 활용하면 유연성이 아주 좋아진다. 지금 공부하고 있는

옵저버 패턴은 느슨한 결합을 보여주는 훌륭한 예이다. 그렇다면 옵저버 패턴이 어떻게

느슨한 결합을 만들까?


1. 인터페이스

주제는 옵저버가 특정 인터페이스를 구현한다는 사실만 안다.

즉, 주제는 옵저버의 구상클래스가 무엇인지, 옵저버가 무슨 역할을 하는지 전혀 알필요가 없다.


2. 언제든 새로 추가할 수 있다.

주제는 Observer 인터페이스를 구현하는 객체의 목록에만 의존하므로 언제든지 새로운

옵저버를 추가할 수 있다. 마찬가리도 아무때나 옵저버를 제거해도 된다.


3. 새로운 형식의 옵저버를 추가

옵저버가 되어야 하는 새로운 구상 클래스가 생겼다고 가정해보자. 이때도 새로운 클래스

형식을 받아들일 수 있도록 주제를 바꿔야 할 필요는 없다. 새로운 클래스에는 Observer

인터페이스를 구현하고, 옵저버를 등록하기만 하면 되기 때문이다.


4. 재사용

주제나 옵저버르 다른 용도로 활용할 일이 있다고 해도 손쉽게 재사용할 수 있다.


5. 서로 영향을 미치지 않는다.

서로 느슨하게 결합되어 있으므로 주제나 옵저버 인터페이스를 구현한다는 조건만

만족한다면 어떻게 고쳐도 문제가 생기지 않는다.


디자인 원칙 적용


1. 애플리케이션에서 달라지는 부분과 달라지지 않는 부분을 분리한다.

옵저버 패턴에서 변화하는 것은 주제의 상태와 옵저버의 개수, 형식이다.

옵저버 패턴에서는 주제를 바꾸지 않고도 주세의 상태에 의존하는 객체들을 바꿀수 있다.

나중에 바뀔 것을 대비해 두면 편하게 작업할 수 있다.


2. 구현보다는 인터페이스에 맞춰서 프로그래밍한다.

주제와 옵저버에서 모두 인터페이스를 사용했다. 주제는 Subject 인터페이스로

Observer 인터페이스를 구현하는 객체들의 등록과 탈퇴를 관리하고, 그런 객체들에게

연락을 돌린다. 이러면 위에서 봤던 것 처럼 느슨한 결합을 만들 수 있다.


3. 상속보다는 구성을 활용한다.

옵저버 패턴에서는 구성을 활용해서 옵저버들을 관리한다. 주제와 옵저버 사이의 관계는

상속이 아니라 구성으로 이루어져있기 때문이다.