Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- flutter
- 자이고트
- 운영체제
- apk 빌드 과정
- 프로세스
- Kotlin
- GetX
- Android
- NestedScrollView
- 디자인 패턴
- Dispatchers
- appcompatacitivity
- 리사이클러뷰
- 뷰홀더
- 리사이클러뷰풀
- 플로이드워셜
- 절대 주소
- 내부 단편화
- 물리 메모리
- appcompatactivity
- 안드로이드
- http 역사
- http발전과정
- DiffUtil
- recyclerview
- viewModelScope
- 데코레이터 패턴
- AAC
- 상태관리
- AsyncListDiffer
Archives
- Today
- Total
hong's android
[디자인 패턴] 옵저버 패턴 본문
옵저버 패턴이란?
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다. 주제 - 옵저버로 일대다 관계가 이루어지고 주제의 상태가 바뀌면 옵저버들에게 연락이 간다.
왜 옵저버 패턴을 사용할까?
만약 데이터의 변경사항에 따라 다른 객체에게 알려야하는 로직을 구성할때 아래와 같이 구성된다.
observer1.notify(int data1,int data2,int data3);
observer2.notify(int data1,int data2,int data3);
observer3.notify(int data1,int data2,int data3);
subject 클래스 안에 위 로직으로 구성 할 수 있다.
위 로직은 subject - observer 서로의 정보를 알아야하고 호출이 구체화되어있어 변화에 취약하다.
그리고 실행 중에 옵저버를 제거하거나 더할 수 없다.
옵저버 패턴을 사용하면 느슨한 subject - observer 간 느슨한 결합이 형성되면서 변화에 좀 더 유연해진다. 옵저버,주제 클래스 로직을 구성하지 않아도 데이터를 구독하는 형태를 만들 수 있다.
interface Subject {
fun registerObserver(o : Observer)
fun removeObserver(o : Observer)
fun notifyObservers()
}
Observer를 관리 / 알림을 보내는 역할
interface Observer {
fun update(s : String)
}
다수의 Observer들은 일괄적인 update()메소드를 구현해서 다른 Observer가 추가되어도 update()메소드만 호출하면된다.
class ConcreteSubject : Subject {
var observers : MutableList<Observer>
var word : String
constructor(w : String){
observers = mutableListOf()
word = w
}
override fun registerObserver(o: Observer) {
observers.add(o)
}
override fun removeObserver(o: Observer) {
observers.remove(o)
}
override fun notifyObservers() {
for(o : Observer in observers){
o.update(word)
}
}
fun setData(s:String){
word = s
notifyObservers()
}
}
ConcreteSubject 주제 클래스는 Subject를 구현하게 된다.
Observer를 등록/제거를 하거나 데이터가 변경될때 알림을 보낸다.
* 디자인 패턴 구현 깃허브
'Design-Pattern' 카테고리의 다른 글
| [디자인 패턴] 컴포지트 패턴 (0) | 2023.03.21 |
|---|---|
| [디자인 패턴] 싱글톤 패턴 (1) | 2023.03.13 |
| [디자인 패턴] 커맨드 패턴 (0) | 2023.03.13 |
| [디자인 패턴] 팩토리 패턴 (0) | 2023.03.07 |
| [디자인 패턴] 데코레이터 패턴 (0) | 2023.03.07 |