옵저버 패턴 (Observer Pattern)
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고 자동으로 내용이 갱신되는 방식을 말한다.
》》 1 : N (다) 의 의존성으로 정의
》》 일방적 통지방식의 패턴
》》 주체는 특정 데이터를 감시하고 있다가 변화를 감지한다.
옵저버 객체는 언제든지 삭제, 추가가 가능하며 옵저버 객체에서 삭제가 되면 주체의 새로운 값을 받을 수 없게된다.
여기서 주체와 옵저버 객체는 느슨하게 결합되어있다.
느슨하게 결합되어있다는 것은 상호작용을 하긴 하지만 서로에 대해 잘 모른다는 것을 뜻한다.
》》 주체가 옵저버에 대해서 아는 것은 옵저버거 특정 인터페이스를 구현한다는 것뿐
》》 느슨하게 결합되어있는 디자인을 사용하면 변경사항이 생겨도 무난히 처리 가능
옵저버 패턴은 언제 사용될까?
한 객체의 변경으로 변경되어져야하는 객체 수가 많은 경우에 사용된다.
추후에 발생하는 유지 / 보수에 유용하다.
자바 내장 옵저버 패턴
옵저버 패턴을 직접 코딩해서 구현할 수 있지만 자바에서 API를 통해 지원하기도 한다.
하지만 JDK 내장 옵저버 패턴에는 몇가지 단점이 있다.
1. Observable은 클래스다
: 이말은 즉, 옵저버 기능을 추가하고자 하는 클래스가 이미 다른 클래스를 확장하고 있다면 그 클래스는
Observable의 기능을 추가할 수 없다.
2. Observable 클래스의 핵심 메소드를 외부에서 호출할 수 없다.
: setChanged() 메소드 등이 접근 제한자가 protected로 선언되어 있다.
이말은 즉, Observable의 서브클래스에서만 호출할 수 있다는 것을 뜻한다.
이런 디자인은 상속보다 구성을 활용한다는 디자인 원칙에도 위배된다.
때에 따라 직접 구현하거나 자바 내장 옵저버 패턴을 사용한다. 중요한것은 제대로 이해하고 사용하는 것.
'Knowledge > Design Pattern' 카테고리의 다른 글
추상 팩토리 패턴 (Abstract Factory Pattern) (0) | 2017.01.19 |
---|---|
팩토리 메소드 패턴 (Factory Method Pattern) (0) | 2017.01.16 |
데코레이터 패턴 (Decorator Pattern) (0) | 2017.01.16 |
전략패턴 (Strategy Pattern) (0) | 2017.01.13 |
디자인 패턴 (Design Pattern) 이란 ? (0) | 2017.01.13 |