Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- jpa
- jsp
- spring
- 코드테스트
- 자바
- 디자인 패턴
- 오라클
- Next.js
- 알고리즘
- 코드 테스트
- 정리
- java
- 서버
- 데이터베이스
- BACK-END
- 쿼리
- node.js
- 프로그래머스
- oracle
- MySQL
- 프런트엔드
- 프론트엔드
- 스프링부트
- web
- 스프링
- 백엔드
- JavaScript
- 미니정리
- 자바스크립트
- SQL
Archives
- Today
- Total
참치코더의 꿈 메모장
디자인 패턴 / 옵저버 패턴 정리 본문
728x90
옵저버 패턴(Observer Pattern)이란?
- 행동(Behavioral) 디자인 패턴 중 하나.
- 한 객체(Subject, 주제)의 상태가 변경되었을때, 그 객체에 의존하는 다른 객체들(Observer, 관찰자)에게
자동으로 알림을 보내는 패턴.
- 발행-구독(Publish-Subscribe) 모델과 비슷하다.
특징
* 장점
- 느슨한 결합 : Subject와 Observer는 인터페이스로 연결(서로 독립적이다.)
- Subject 상태 변화 -> Observer 자동 업데이트
* 단점
- 옵저버 수가 많아지면 성능 저하
- 이벤트 순서를 제어하기 어려움
|
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
// 옵저버 인터페이스
interface Observer {
void update(String message);
}
// 주제(Subject) 인터페이스
interface Subject{
void attach(Observer o); // 등록
void detach(Observer o); // 취소
void notifyObservers(String message); // 주제의 상태가 바뀔때 옵저버에게 알리는 메서드
}
// 주제(Subject) 구현체
class NewsAgency implements Subject {
private List<Observer> observers = new ArrayList<>();
@Override
public void attach(Observer o){ // 해당 옵저버 객체를 주체 List에 저장
observers.add(o);
}
@Override
public void detach(Observer o){ // 해당 옵저버 객체를 주체 List에서 삭제
observers.remove(o);
}
@Override
public void notifyObservers(String message){
for(Observer o : observers){
o.update(message);
}
}
// 새로운 뉴스 발행
public void addNews(String news){
System.out.println("뉴스 속보: " + news);
notifyObservers(news);
}
}
// 옵저버 구현체 (구독자들)
class Subscriber implements Observer {
private String name;
public Subscriber(String name){
this.name = name;
}
@Override
public void update(String message){
System.out.println(name + "이(가) 알림을 받음: " + message);
}
}
// 실행
public class ObserverPatternExample {
public static void main(String[] args){
NewsAgency agency = new NewsAgency();
Observer sub1 = new Subscriber("홍길동");
Observer sub2 = new Subscriber("김철수");
Observer sub3 = new Subscriber("이영희");
agency.attach(sub1);
agency.attach(sub2);
agency.attach(sub3);
agency.addNews("디자인 패턴 공부가 시작되었습니다.");
agency.addNews("옵저버 패턴은 정말 유용합니다.");
}
}
|
cs |
728x90
'디자인 패턴' 카테고리의 다른 글
| 디자인 패턴 / 커맨드 패턴 정리 (0) | 2025.09.28 |
|---|---|
| 디자인 패턴 / 싱글톤 디자인 패턴 정리 (0) | 2025.09.24 |
| 디자인 패턴 / 팩토리 패턴(Factory Pattren) (0) | 2025.09.19 |
| 디자인 패턴 / 데코레이터 패턴 (포장지 패턴) (0) | 2025.09.07 |
| 전략패턴(Strategy Pattern) 이란? (0) | 2025.08.22 |
Comments