티스토리 뷰
옵저버 패턴 (Observer Pattern)
🔥 다수의 구독자 객체 ( Subscribe Object )가 발행자 객체 ( Publish Object ) 상태 변화를 감지하고 알림을 받는 패턴 🔥
의존관계도
🎯 내용
여러 개의 Observer가 Subject에 구독(subscribe)하고 Subject 는 스스로의 변화가 감지될 때 자신에게 구독하고 있는 Observer 들에게 이 변화 사실을 알린(notify)다.
이러한 방식을 통해 각 Observer 들이 Subject 에게 변화가 있는지 확인할 필요가 없어지기 때문에 Observer 의 수가 다 수일 때도 효율적으로 변화 사실을 알릴 수 있다.
🎭 예시
여러 명의 유튜브 유저가 유튜브 채널에 구독하고 유튜브 채널은 영상이 올라 올 때 자신에게 구독하고 있는 구독자들 에게 새 영상이 올라왔다고 알람을 보낸다.
👉 옵저버 패턴의 장•단점 👈
장점
- 상태를 변경하는 객체 (Publisher)와 변경 감지 객체(Subscriber)의 의존성을 느슨한 결합으로 가져갈 수 있다.
- 상태 변경을 위해 Subscriber가 주기적으로 확인해줄 필요가 없다.
- 동적으로 옵저버 추가/삭제가 가능하다.
단점
- 코드 복잡도가 증가한다.
- 등록된 옵저버 객체를 관리하지 않으면 Memory Leak이 발생할 수 있다.
- 완료( Complete )의 개념이 없어 구독자들 에게 이벤트 종료를 알릴 방법이 없다.
- Error 발생 시 대처 방법이 존재하지 않는다.
구현
👉 YoutubeChannel ( Subject )
유튜브 채널은 구독, 구독취소, 푸시알림 기능을 제공하고 있다.
구독을 할 수 있는 타입은 SubscribedUser 다.
1️⃣ 구독하기 (subscribe) 메서드를 통해 SubscribedUser 타입의 객체를 등록할 수 있다.
2️⃣ 구독취소 (unsubscribe) 메서드를 통해 등록된 객체 삭제가 가능하다.
3️⃣ 푸시전송(notifyPush) 메서드를 통해 등록된 유저들 에게 푸시전송이 가능하다.
👉 User는 SubscribedUser를 구현(implements) 하고 있어 YoutubeChannel에 구독할 수 있다.
1️⃣ notifyUsers는 YoutubeChannel 에 notifyPush 에서 알림을 보내기 위해 호출할 메서드
👇 예제 코드 확인하고 싶다면? 👇
👉 예제 코드 👈
느낀점
아직 학습을 하지는 못했지만 Spring Webflux, Reactive Stream, Event Driven 등의 키워드의 기초가 될 수 있는 옵저버 패턴인 만큼 앞으로 중요하게 다가올 것으로 판단된다.
사실 서버 개발 기초과정에 잘 등장 하지 않았던 내용이다 보니 익숙하지 않고 쉽게 다가오지 않는다. (앱 개발 에서는 많이 쓰이는듯 한데… RX 부터 해서…) 하지만 다음 스텝으로 넘어가기 위해서는 반드시 필요한 스킬로 보인다.
참조
'architecture > Design Pattern' 카테고리의 다른 글
[디자인 패턴] 프로토타입 ( Prototype ) 패턴 (0) | 2022.09.14 |
---|---|
[디자인 패턴] 빌더 패턴 ( Builder Pattern ) with. Java (0) | 2022.09.12 |
[디자인패턴] 팩토리 메소드 패턴 ( Factory Method Pattern ) with.Java (0) | 2022.09.10 |
[디자인 패턴] 추상 팩토리(Abstract Factory) 패턴 with. Java (0) | 2022.09.09 |
[디자인 패턴] 싱글턴 패턴 (Singleton Pattern ) with.Java (0) | 2022.09.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 클린 아키텍처
- Sticky Session
- OOP
- 수직 분할
- 정적 타입 언어
- pass by reference
- 세션 불일치
- SpringBoot 2.2
- Session
- 동적 디스패치
- 외부 단편화
- 메모리 단편화
- 동적 타입 언어
- 메모리 파편화
- multimap
- RestAssured
- pool
- 뾰족함
- Object Pool
- pass by value
- java
- 육각형 아키텍처
- 객체 풀
- 수평 분할
- 장애 해결기
- 컴포짓 패턴
- 내부 단편화
- Memory Fragmentation
- ATDD
- Clean Architecture
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함