티스토리 뷰
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 클래스의 기본 구조는 다음과 같습니다.
get~() 메소드는 각 데이터값을 리턴합니다. 장비로 부터 데이터를 가져오는 것은 WeatherData 객체가 알아서 하므로, 일단은 신경쓰지 않기로 합니다. 대신, WeatherData에서 갱신된 값을 가져올때마다 measurementsChanged() 메소드가 호출된다는 점
만 기억할게요.
구현 목표 생각해보기
먼저 달라지는 부분과 달라지지 않는 부분을 생각해봅시다.
디자인 원칙 1
애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다.
WeatherData 객체와, 세부적인 메소드명이 보이므로 바로 코드 구현에 들어가려고 할 수도 있습니다. 일단 코드 구현에 대해 목표를 세부적으로 생각해볼게요.
디자인 원칙 2
구현보다는 인터페이스에 맞춰서 프로그래밍한다.
- WeatherData에는 getter 메소드가 있습니다.
- 새로운 날씨 데이터가 수집될 때마다 measurementsChanged()가 호출된다는 것만 인지하면 됩니다.
- 3 가지의 디스플레이를 구현해야합니다.
- 데이터가 갱신될때, measurementsChanged() 메소드에 코드를 추가하여 디스플레이가 업데이트되도록 해야합니다.
- 소프트웨어 개발에서 바뀌지 않는 것은
변화
였습니다. 코드의 확장가능성까지 고려해봅시다. 디스플레이가 더 많아질 수도 있으며, 사용자가 디스플레이를 추가하거나 제거하는 기능이 필요할 수도 있습니다.
옵저버 패턴 이해하기
- 블로그 주인이 포스팅을 올립니다.
- 블로그 방문자가 포스팅 구독을 시작하면, 새로운 포스팅이 올라올 때마다 알림을 받을 수 있습니다. 구독을 해지하기 전까지는 말이죠.
- 포스팅을 더 이상 보고 싶지 않다면 구독을 해지합니다. 이제 알림이 오지 않습니다.
- 블로그 플랫폼이 없어지지 않는 이상, 누군가는 계속 구독을 신청하고 해지합니다.
즉, 블로그 주인 + 블로그 구독자 -> 옵저버 패턴이라고 생각하면 됩니다.
옵저버 패턴의 정의
옵저버 패턴(Observer Pattern)은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고, 자동으로 내용이 갱신되는 일대다(one-to-many) 의존성을 정의합니다.
한 객체의 상태가 변경되면, 그 객체에 의존하는(등록된) 모든 객체에게 연락이 갑니다.
옵저버 패턴의 구조 파악하기
디자인 원칙 3
상속보다는 구성을 활용한다. (사실 VBA에는상속
이 없습니다!)
먼저, 주제(Subject)와 옵저버(Observer) 인터페이스 클래스를 만들고, 그 후에 구상(Concrete) 클래스를 만들고, 구현(Implements)하면 될 것 같네요!
느슨한 결합
느슨한 결합(Loose Coupling)은 객체끼리 상호작용할 수 있지만, 서로에 대해 잘 모르는 관계를 의미합니다. 너무 강한 결합은 유연성이 떨어지는 것을 뜻합니다.
- 주제는 옵저버가 특정 인터페이스를 구현한다는 사실만 알고 있습니다.
- 옵저버는 언제든지 추가하거나 제거할 수 있습니다.
- 새로운 형식의 옵저버를 추가할 때에도 주제를 변경할 필요는 없습니다.
- 주제와 옵저버는 서로 독립적으로 재사용할 수 있습니다.
- 주제나 옵저버가 달라져도 서로에게 영향을 미치지 않습니다.
디자인 원칙 4
상호작용하는 객체 사이에는 가능하면 느슨한 결합을 사용한다.
다음 편에서는 이러한 옵저버 패턴을 기반으로 기상 모니터링 시스템을 설계해보겠습니다!
INDEX
'VBA > OOP' 카테고리의 다른 글
VBA OOP / INDEX (0) | 2022.09.22 |
---|---|
CH2 - 기상 모니터링 3편 / 옵저버 패턴 방식 변경 (1) | 2022.09.22 |
CH2 - 기상 모니터링 2편 / 시스템 설계 및 구현 (0) | 2022.09.22 |
CH1 - 오리 시뮬레이션 게임 3편 / 인터페이스 동적 활용 및 정리 (0) | 2022.09.14 |
CH1 - 오리 시뮬레이션 게임 2편 / 인터페이스 확장 (0) | 2022.09.13 |
CH1 - 오리 시뮬레이션 게임 1편 / VBA 객체지향 사용방법 예시 (0) | 2022.09.12 |