반응형
옵저버 패턴( Observer Pattern)
📝 옵저버 패턴이란?
- 관찰자가 관찰하고 있는 대상자의 상태가 변화할 때마다 조치를 취하는 패턴
- 일대다(one to many) 의존성을 가짐
- 발행-구독(pub-sub) 모델로도 알려져 있음
- 주로 MVC 패턴에서 사용됨
옵저버 패턴의 구성 요소
- 주체 혹은 관찰 대상
- 상태를 가지며, 옵저버를 등록하고 제거하는 메서드 제공
- 상태가 변경되면 모든 등록된 옵저버에 전달
- 옵저버(Observer)
- 주제의 상태 변경을 통보받기 위해 등록된 객체
- 주제의 상태 변경시 이를 통보 받아 자신의 상태를 업데이트
옵저버 패턴의 흐름
- 한개의 관찰 대상자와 여러개의 관찰자로 일 대 다 구성
- 관찰 대상의 상태가 바뀌면 변경사항을 옵저버에 통보
- 통보 받은 옵저버는 값을 바꾸거나 삭제하는 등 대응
- 옵저버는 언제든 대상자의 그룹에서 추가/삭제될 수 있음
옵저버 패턴의 특징
장점
- 관찰 대상의 상태 변경을 주기적으로 조회하지 않고 자동으로 감지 가능
- 발행자의 코드를 변경하지 않고도 새 구독자 ㅋ클래스를 도입할 수 있어 개방 폐쇄 원칙을 준수함
- 런타임 시점에서 발행자와 구독 알림 관계
- 상태를 변경하는 객체와 변경을 감지하는 객체의 관계를 느슨하게 유지할 수 있음(낮은 결합도)
단점
- 구독자는 알림 순서를 제어할 수 없고, 무작위로 알림 받음
- 옵저버 패턴을 자주 구성하면 구조와 동작을 알아보기 힘들어져 코드 복잡도 증가
- 다수의 옵저버 객체를 등록 이후 해지하지 않으면 메모리 누수 발생 가능
반응형
옵저버 구현 예시(JavaScript)
class Subject {
constructor() {
this.observers = [];
}
addObserver(observer) {
this.observers.push(observer);
}
removeObserver(observer) {
this.observers = this.observers.filter(obs => obs !== observer);
}
notifyObservers() {
this.observers.forEach(observer => observer.update());
}
}
반응형
'컴퓨터 사이언스(CS) > 기타 CS' 카테고리의 다른 글
[CS] Git의 명령어는 어떤 동작을 할까? (0) | 2024.07.31 |
---|---|
[CS/Javascript] 비동기 처리 및 이벤트 핸들러 (0) | 2024.07.29 |
[CS/Regex] 파일 URL의 형식 및 정규표현식의 활용 (1) | 2024.07.23 |
댓글