옵저버 패턴은
- 객체 간에 데이터나 상태의 변화를 관찰하고
- 한 객체의 변화를 다른 객체에게 알려줄 때 사용되는 패턴입니다.
주제를 나타내는 Subject 인터페이스와 관찰자인 Observer 인터페이스를 구현해볼까요?
public interface Subject {
void registerObserver(); //옵저버 등록
void removeObserver(); //옵저버 제거
void notifyObservers(); //옵저버에게 알림
}
public interface Observer {
void update();
}
구현체도 구현해볼까요?
public class ConcreteSubject implements Subject{
private List<Observer> observers;
private int data;
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
@Override
public void removeObserver(Observer o) {
observers.remove(o);
}
@Override
public void notifyObservers() {
for(Observer observer : observers) {
observer.update(data);
}
}
}
public class ConcreteObserver implements Observer{
private int data;
@Override
public void update(int data) {
this.data = data;
}
}
subject 구현체는 옵저버들을 등록, 삭제를 통해 관리하고, 변화가 생기면 notifyObservers 메서드를 사용해서 옵저버에게 데이터를 전달합니다.
그럼 옵저버 패턴의 장점은 뭘까요?
- Subject와 Observer 사이의 느슨한 결합을 유지할 수 있다.
- 여러 Observer 객체가 동일한 Subject를 관찰할 수 있으므로 다양한 동작을 수행할 수 있다.
- 변화가 발생한 시점에만 Observer에게 알림을 보내므로 효율적인 이벤트 처리가 가능하다.
출처
에릭 프리먼, 엘리자베스 롭슨, 케이시 시에라, 버트 베이츠. 『헤드퍼스트 디자인패턴 개정판』. 한빛미디어, 2022
'Design Pattern' 카테고리의 다른 글
커맨드 패턴 (Command Pattern) (0) | 2023.09.27 |
---|---|
싱글턴 패턴(Singleton Pattern) (2) | 2023.09.25 |
팩토리 패턴(Factory Pattern) (0) | 2023.09.14 |
데코레이터 패턴(Decorator Pattern) (2) | 2023.09.11 |
전략 패턴(Strategy Pattern) (0) | 2023.09.06 |