목차 열기

티스토리 뷰

728x90
반응형

CH2 - 기상 모니터링 1편 / 옵저버 패턴의 이해 및 구조 파악

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


기상 모니터링 애플리케이션 제작

날씨 아이콘 / 구글 검색

날씨를 알려주는 기상 모니터링 애플리케이션을 만들어봅시다. 날씨 관측 장비로 부터 날씨 데이터를 얻는 객체는 WeatherData입니다. 이 객체의 데이터를 다양한 디스플레이에 출력할 것입니다. 디스플레이의 종류는 현재의 날씨 상황, 날씨 통계, 날씨 예보입니다. WeatherData 클래스의 기본 구조는 다음과 같습니다.

WeatherData 클래스 다이어그램

get~() 메소드는 각 데이터값을 리턴합니다. 장비로 부터 데이터를 가져오는 것은 WeatherData 객체가 알아서 하므로, 일단은 신경쓰지 않기로 합니다. 대신, WeatherData에서 갱신된 값을 가져올때마다 measurementsChanged() 메소드가 호출된다는 점만 기억할게요.

구현 목표 생각해보기

먼저 달라지는 부분과 달라지지 않는 부분을 생각해봅시다.

디자인 원칙 1
애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다.

WeatherData 객체와, 세부적인 메소드명이 보이므로 바로 코드 구현에 들어가려고 할 수도 있습니다. 일단 코드 구현에 대해 목표를 세부적으로 생각해볼게요.

디자인 원칙 2
구현보다는 인터페이스에 맞춰서 프로그래밍한다.

  • WeatherData에는 getter 메소드가 있습니다.
  • 새로운 날씨 데이터가 수집될 때마다 measurementsChanged()가 호출된다는 것만 인지하면 됩니다.
  • 3 가지의 디스플레이를 구현해야합니다.
  • 데이터가 갱신될때, measurementsChanged() 메소드에 코드를 추가하여 디스플레이가 업데이트되도록 해야합니다.
  • 소프트웨어 개발에서 바뀌지 않는 것은 변화였습니다. 코드의 확장가능성까지 고려해봅시다. 디스플레이가 더 많아질 수도 있으며, 사용자가 디스플레이를 추가하거나 제거하는 기능이 필요할 수도 있습니다.

옵저버 패턴 이해하기

  1. 블로그 주인이 포스팅을 올립니다.
  2. 블로그 방문자가 포스팅 구독을 시작하면, 새로운 포스팅이 올라올 때마다 알림을 받을 수 있습니다. 구독을 해지하기 전까지는 말이죠.
  3. 포스팅을 더 이상 보고 싶지 않다면 구독을 해지합니다. 이제 알림이 오지 않습니다.
  4. 블로그 플랫폼이 없어지지 않는 이상, 누군가는 계속 구독을 신청하고 해지합니다.

즉, 블로그 주인 + 블로그 구독자 -> 옵저버 패턴이라고 생각하면 됩니다.

옵저버 패턴의 정의

옵저버 패턴(Observer Pattern)은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고, 자동으로 내용이 갱신되는 일대다(one-to-many) 의존성을 정의합니다.

한 객체의 상태가 변경되면, 그 객체에 의존하는(등록된) 모든 객체에게 연락이 갑니다.

옵저버 패턴의 구조 파악하기

디자인 원칙 3
상속보다는 구성을 활용한다. (사실 VBA에는 상속이 없습니다!)

옵저버 패턴의 구조 다이어그램

먼저, 주제(Subject)와 옵저버(Observer) 인터페이스 클래스를 만들고, 그 후에 구상(Concrete) 클래스를 만들고, 구현(Implements)하면 될 것 같네요!

느슨한 결합

느슨한 결합(Loose Coupling)은 객체끼리 상호작용할 수 있지만, 서로에 대해 잘 모르는 관계를 의미합니다. 너무 강한 결합은 유연성이 떨어지는 것을 뜻합니다.

  • 주제는 옵저버가 특정 인터페이스를 구현한다는 사실만 알고 있습니다.
  • 옵저버는 언제든지 추가하거나 제거할 수 있습니다.
  • 새로운 형식의 옵저버를 추가할 때에도 주제를 변경할 필요는 없습니다.
  • 주제와 옵저버는 서로 독립적으로 재사용할 수 있습니다.
  • 주제나 옵저버가 달라져도 서로에게 영향을 미치지 않습니다.

디자인 원칙 4
상호작용하는 객체 사이에는 가능하면 느슨한 결합을 사용한다.

다음 편에서는 이러한 옵저버 패턴을 기반으로 기상 모니터링 시스템을 설계해보겠습니다!

INDEX

다음편 / CH2 - 기상 모니터링 2편 / 시스템 설계 및 구현

VBA / INDEX

VBA / OOP / INDEX

728x90
반응형
댓글
글 보관함
«   2025/06   »
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