ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Observer Pattern
    Java/디자인패턴 2024. 1. 4. 18:07

     

    🍄 Observer Pattern이란 무엇인가? 

    • 한 객체의 상태가 바뀌면, 그 객체에 의존하는 모든 객체들에 연락이 가고 자동으로 내용이 갱신되는 방식
    • 주제에서 중요한 데이터 관리 → 주제 데이터 바뀌면 옵저버에게 바뀐 값 / 바뀌었다는 소식이 전해진다.
    • 옵저버 객체들은 주제를 구독하고 있으며(주제 객체에 등록되어 있음), 주제 데이터가 바뀌면 갱신 내용을 전달받는다. 
    • Subject : Observer = 1 : N 관계

     

    public interface Subject {
    	public void registerObserver(Observer o);
    	public void removeObserver(Observer o);
    	public void notifyObservers(); // 모든 옵저버들에게 변경내용을 알리려 호출하는 메소드
    }
    
    public interface Observer {
    	public void update(float temp, float humidity, float pressure);
    } // 기상 정보가 변경되었을 때 옵저버에게 전달되는 상태값들

     

    • 여기까지는 Subject가 Observer들에게 Push 하는 방식 
    • 반대로 Observer들이 Pull 해오는 방식도 있다. 
    // Subject : 알림 보내기 
    public void notifyObservers() {
    	for (Observer observer : observers) {
    		observer.update();
    	} // update 메소드 인자 없이 호출하도록 
    }
    
    
    // Observer : 알림 받기 
    public interface Observer {
    	public void update();
    }
    
    // CurrentConditionsDisplay 클래스라면 업데이트를 아래처럼 구현하면 된다. 
    public void update() {
    	this.temperature = weatherData.getTemperature();
    	this.humidity = weather.getHumidity();
    	display();
    } // 원하는 데이터만 (온도, 습도) 받아올 수 있다!

     

     

    🍄 활용 방안 

    • 애플리케이션에서 달라지는 부분을 찾아내고 달라지는 않는 부분과 분리
      • 옵저버 패턴에서 변하는 것은 주제의 상태와 옵저버의 개수, 형식
      • 옵저버 패턴에서는 주제를 바꾸지 않고도 주제의 상태에 의존하는 객체를 바꿀 수 있음
      • 나중에 바뀔것을 대비해두면 편하게 작업할 수 있다
    • 구현보다 인터페이스에 맞춰서 프로그래밍하자
      • 주제는 Subject interfcae, 옵저버는 Observer interface
      • Observer 인터페이스를 구현하는 객체들의 등록과 탈퇴를 관리하고, 그런 객체들에 연락 돌림
    • 상속보다는 구성을 활용하자 

     

     

     

    'Java > 디자인패턴' 카테고리의 다른 글

    Factory Pattern  (0) 2024.01.17
    Decorator Pattern  (0) 2024.01.11
Designed by Tistory.