์ต์ ๋ฒ ํจํด(Observer Pattern)
๋ง์ฝ ์ ์ ์ ๊ฒ์ ๋จธ๋๊ฐ ์ ๋ฐ์ดํธ๋์ด UI, ์ด๋ฒคํธ ๋ฑ ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ๋ณ๊ฒฝ์ด ํ์ํ๋ค๋ฉด ์ด๋ป๊ฒ ๊ตฌํํ ๊ฒ์ธ๊ฐ? ๋งค๋ฒ ๋ค๋ฅธ ์ค๋ธ์ ํธ๊ฐ ๊ฒ์ ๋จธ๋ ์ ๋ฐ์ดํธ๊ฐ ๋๋์ง ํ์ธํ ์ ์์ ๊ฒ์ด๋ค.
์ด๋ด ๋ ํ์ํ ๊ฒ์ด ์ต์ ๋ฒ ํจํด์ด๋ค. Sudject(๊ฒ์ ๋จธ๋)๋ก๋ถํฐ ์ด๋ ํ ๋ณํ๊ฐ ์๊ธด๋ค๋ฉด, Observer๋ ์ด ๋ณํ๋ฅผ ๊ฐ์งํ ์ ์๋ค.

- ๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ๊ด์ฐฐํ๋ ๊ด์ฐฐ์(์ต์ ๋ฒ)๊ฐ ์๋ค. ๊ด์ฐฐ์๋ฅผ ๊ฐ์ฒด๊ฐ ๊ฐ๊ณ ์๋ค๊ฐ ์ํ ๋ณํ๊ฐ ์์ ๋ ๋ฉ์๋ ๋ฑ์ ํตํด ๊ฐ์ฒด๊ฐ ๊ฐ ์ต์ ๋ฒ์๊ฒ ํต์งํ๋ค.
- ์ฃผ๋ก ๋ถ์ฐ ์ด๋ฒคํธ ํธ๋ค๋ง ์์คํ ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ฌ๊ธฐ์ ํต์ฌ์ ๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ๊ด์ฐฐํ๋ ๊ฒ์ธ๋ฐ, ๊ณผ์ฐ ์ด๋ป๊ฒ ๊ด์ฐฐํ๋ค๋ ๊ฒ์ผ๊น?
1. ๊ตฌํ
1) Observer
- ConcreteObserver๋ Observer์ ๊ตฌํ์ฒด์ด๋ค.
- notify()๊ฐ ํธ์ถ๋๋ฉด Subject๋ก๋ถํฐ ์ํ ๋ณํ๊ฐ ์๋ค๋ ์๋ฆผ์ ๋ฐ์ ๊ฒ์ด๋ค.
public interface Observer {
void notify();
}
public class ConcreteObserver implements Observer {
private ConcreteSubject subject;
public ConcreteObserver(ConcreteSubject subject) {
this.subject = subject;
}
@Override
public void notify() {
System.out.println("value : " + subject.getValue());
}
}
2) Subject
- Subject์ ๊ตฌํ์ฒด๋ ์ํ ๋ณํ๊ฐ ๋ฐ์ํ๋ ์ค๋ธ์ ํธ์ด๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋์์ํค๋ ๋ฉ์๋ ์ธ์ ์ต์ ๋ฒ๋ฅผ ๋ฑ๋กํ๋ ๋ฉ์๋(registerObserver())์ ์ต์ ๋ฒ์๊ฒ ์ํ ๋ณํ๋ฅผ ์๋ฆฌ๋ ๋ฉ์๋(notifyObservers())๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ์ํ ๋ณํ๊ฐ ์๋ค๋ฉด ์ต์ ๋ฒ์๊ฒ notifyObservers()๋ก ์ํ ๋ณํ๊ฐ ์์์ ์๋ฆฐ๋ค.
public class Subject {
private List<Observer> observers;
private int value;
public Subject() {
observers = new ArrayList();
}
public int getValue() {
return value;
}
public void registerObserver(Observer observer) {
observers.add(observer);
}
public void unregisterObserver(Observer observer) {
if (observers.indexOf(observer) > -1) {
observers.remove(observer);
}
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.notify();
}
}
}
3) ๋ค๋ฅธ ๊ตฌํ ๋ฐฉ๋ฒ
ํ์ฌ๋ ConcreteSubject subject๋ก Subject๋ฅผ ์ ์ธํ์ฌ ๊ฐ์ ์ง์ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์์ง๋ง notify()๋ฅผ ํธ์ถํ ๋ ์ํ ๋ณํ์ ๋ํ ๊ฐ์ ํจ๊ป ์ ๋ฌํ๋ ๋ฐฉ๋ฒ๋ ์๋ค. ์๋ฅผ ๋ค์ด GUI ํ๋ก๊ทธ๋๋ฐ์์๋ ๋ง์ฐ์ค ํด๋ฆญ, ์ด๋, ํค ์ ๋ ฅ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ด๋ฒคํธ๋ฅผ ๋ฐ์ดํฐ ํด๋์ค์ ํํ๋ก EventListener๋ฅผ ์ ๋ฌํ๋ค.
2. ์ฐธ๊ณ
https://seolin.tistory.com/127?category=861285
๋์์ธ ํจํด 3. ์ต์ ๋ฒ ํจํด(Observer Pattern)
์ต์ ๋ฒ๋ ํ๋กํ ์ค์ ์ ์ฐฐ๊ธฐ ์ ๋์ด ์๋๋ค ์ํค๋ฐฑ๊ณผ์์๋ ์ต์ ๋ฒ ํจํด์ ์๋์ ๊ฐ์ด ์ค๋ช ํ๊ณ ์์ต๋๋ค. ์ต์๋ฒ ํจํด(observer pattern)์ ๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ๊ด์ฐฐํ๋ ๊ด์ฐฐ์๋ค, ์ฆ ์ต์ ๋ฒ๋ค
seolin.tistory.com