본문 바로가기
Design Pattern

옵저버 패턴(Observer Pattern)

by 밍상 2023. 9. 7.

옵저버 패턴은

  • 객체 간에 데이터나 상태의 변화를 관찰하고
  • 한 객체의 변화를 다른 객체에게 알려줄 때 사용되는 패턴입니다.

주제를 나타내는 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