목차 열기

티스토리 뷰

728x90
반응형

CH2 - 기상 모니터링 3편 / 옵저버 패턴 방식 변경

이 글은 Excel VBA 에서 객체지향 디자인 패턴을 사용하는 것을 학습하며 정리하기 위한 글입니다.
내용은 책 "헤드 퍼스트 디자인 패턴 : 14가지 GoF 필살 패턴! 유지 관리가 편리한 객체지향 소프트웨어를 만드는 법"을 변형하여 적용하였습니다.
모든 코드는 GitHub의 Commit History에서 변경된 내용을 볼 수 있습니다.
Excel Office 365 with RubberDuck Add-In
GitMind - UML-클래스 다이어그램
GitHub with Visual Studio Code


새로운 데이터 추가와 옵저버 방식에 대한 관점

지금까지의 코딩으로, 하나의 데이터(온도 등)만 바뀌어도 update() 메소드를 통해 모든 데이터가 바뀌었다고 옵저버들에게 알렸습니다. 그런데, 새로운 데이터 값이 추가되면 어떻게 될까요? 풍속 값이 추가된다면 모든 코드에서 update() 메소드 부분을 수정해야할 것입니다. 이러한 점에서 옵저버 방식에 대해 생각해볼 필요가 있습니다.

주제가 옵저버로 데이터를 보내는 푸시(push)이거나, 옵저버가 주제에게서 데이터를 당겨오는 풀(pull)을 사용하는 방법 중 하나를 선택하는 것은 구현 방식에 따라 다릅니다. 대체로 당겨오는 풀(pull) 방식이 좋다고 합니다. 지금까지 구현한 코드에서 옵저버가 필요한 데이터를 당겨오도록 수정하는 것은 그렇게 어렵지 않습니다. 코드를 수정해볼게요!

주제에서 알림을 보낼 때

1. 옵저버의 update() 메소드는 인자 없이 호출하도록 WeatherData 클래스의 ISubject_notifyObservers() 메소드를 수정합니다.

WeatherData 구상 클래스

옵저버에서 알림을 받을 때

1. IObserver 인터페이스 클래스에서 update() 메소드에 매개변수가 없도록 바꾸어 줍니다.

IObserver 인터페이스 클래스

2. update() 메소드를 수정하고, WeatherData의 게터(getter) 메소드로 주제의 날씨 데이터를 가져오도록 수정하여 작성합니다.

CurrentConditionsDisplay / StstisticsDisplay / ForecastDisplay 각 구상 클래스

GitHub Commit History / VBA OOP / CH2 - 기상 모니터링 3편 / 옵저버 패턴 방식 변경

  • JAVA를 VBA로 바꾸는 과정에서 이전 편까지의 코드에 구현 버그가 있어, 수정이 다소 포함되었습니다.
    • weather As ISubject -> weather As weatherData
    • this.weather.registerObserver New "Display" -> this.weather.ISubject_registerObserver Me
    • Dim weather As New weatherData -> Dim weather As weatherData + Set weather = New weatherData

INDEX

다음편 / CH3 - 커피 주문 시스템 1편 /

VBA / INDEX

VBA / OOP / INDEX

728x90
반응형
댓글
글 보관함
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Total
Today
Yesterday