티스토리 뷰
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() 메소드를 수정합니다.
옵저버에서 알림을 받을 때
1. IObserver 인터페이스 클래스에서 update() 메소드에 매개변수가 없도록 바꾸어 줍니다.
2. update() 메소드를 수정하고, WeatherData의 게터(getter) 메소드로 주제의 날씨 데이터를 가져오도록 수정하여 작성합니다.
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
- weather As ISubject
INDEX
'VBA > OOP' 카테고리의 다른 글
VBA OOP / INDEX (0) | 2022.09.22 |
---|---|
CH2 - 기상 모니터링 2편 / 시스템 설계 및 구현 (0) | 2022.09.22 |
CH2 - 기상 모니터링 1편 / 옵저버 패턴의 이해 및 구조 파악 (1) | 2022.09.22 |
CH1 - 오리 시뮬레이션 게임 3편 / 인터페이스 동적 활용 및 정리 (0) | 2022.09.14 |
CH1 - 오리 시뮬레이션 게임 2편 / 인터페이스 확장 (0) | 2022.09.13 |
CH1 - 오리 시뮬레이션 게임 1편 / VBA 객체지향 사용방법 예시 (0) | 2022.09.12 |