728x90
반응형
옵저버 패턴
옵저버 패턴은 한 객체(Subject / Observable) 의 상태 변화가 있을 때 그 변화를 여러 객체(Observers) 에게 자동으로 통지해 주기 위한 디자인 패턴입니다.
주요 목적은 발행자(Subject) 와 구독자(Observer) 를 분리하여 결합도를 낮추는 것입니다.
발행자는 누가 구독했는지 몰라도 되고, 구독자는 발행자에게 직접 명령하지 않아도 됩니다.
핵심 요소
Subject 발행자 : Observer 등록/해제/알림 기능을 제공하고 상태를 관리합니다.
Observer 구독자 : Subject의 변경을 받아 처리하는 쪽입니다.
장점
| 느슨한 결합 | Subject와 Observer가 서로를 구체적으로 몰라도 통신 가능합니다. → 재사용성, 유지보수성이 뛰어납니다. |
| 확장성 | 새로운 Observer 추가가 쉽습니다. 기존 코드 수정이 거의 필요 없습니다. |
| 자동 업데이트 | Subject 상태 변경 시 자동으로 Observer에게 반영됩니다. → 데이터 일관성 유지가 쉽습니다. |
| 이벤트 시스템에 적합 | UI 변경, 센서 이벤트, 로그 시스템 등 “변화 감지 → 반응”하는 구조에 이상적입니다. |
단점
| 어려운 디버깅 | Observer가 많으면 누가 언제 Notify를 받는지 추적이 어렵습니다. |
| 예측 어려움 | 한 Subject 변경이 여러 Observer의 Update를 일으켜 도미노처럼 호출될 수 있습니다. |
| 성능 문제 | Observer 수가 많거나 Update 로직이 복잡하면 Notify 한 번에 많은 리소스를 사용해 성능에 문제가 생길 수 있습니다. |
| 메모리 누수 위험 | Observer가 해제되지 않으면 Subject가 계속 참조합니다. → GC(가비지 컬렉션)되지 않기에 메모리 누수 문제가 생길 수 있습니다. |
| 양방향 의존 가능성 | Observer가 Subject를 직접 참조하면 결합도가 다시 높아질 수 있습니다. |
옵저버 패턴의 모델
옵저버 패턴은 Subject와 Observer 사이의 데이터 전달 방식에 따라 두 가지로 나눌 수 있습니다.
Pull모델과 Push모델, 두 가지가 있습니다.
| 구분 | 설명 | 특징 | 장단점 |
| Pull 모델 | Observer가 직접 Subject에서 필요한 데이터를 가져옵니다. | Subject는 단순히 변경됐다고만 알립니다. | 단순하지만 불필요한 데이터 접근이 많을 수 있습니다. |
| Push 모델 | Subject가 변경된 데이터를 Observer에게 전달합니다. | Observer가 Update 호출 시 데이터를 바로 받습니다. | 데이터 전달이 명확하지만 Subject와 Observer 간 결합도가 증가할 수 있습니다. |
'C# > 문법' 카테고리의 다른 글
| C# 스레드 임의로 종료하기 / 스레드의 상태들 (2) | 2025.08.25 |
|---|---|
| C# 프로세스와 스레드 (2) | 2025.08.21 |
| C# object와 박싱, 언박싱 (2) | 2025.08.13 |
| C# 문법 17 -- 데이터 형식 정리 9 (0) | 2024.12.07 |
| C# 문법 16 -- 데이터 형식 정리 8 (0) | 2024.12.06 |