옵저버 패턴(Observer pattern)
뜻을 보면 뭔가 변화가 발생하면 어떠한 행위를 해야할 때 쓰는 패턴 같아 보인다.
즉, 한 객체의 변화에 따라 다른 객체의 상태도 연동되도록 1:다 객체 의존관계를 구성할 때 사용된다.
데이터 변경이 일어나면 어떠한 행위가 일어나야 한다.
만약에 생각없이 코딩을 한 경우 아래와 같이 짤 것이다.
onChanged() { // 변경이 일어난 경우
class1.function();
class2.function();
....
}
이렇게 되면
1. class1의 function()이 변경된 경우 해당 클래스까지 수정해야 되므로 OCP에 위반된다.
2. 변경이 일어난 경우 어떠한 행위를 추가해야 한다면??? 해당 클래스 전체가 바뀌어 버린다..... ( 말도 안되는 재사용성... )
public class Class1 implements Observer {
// 동작
}
public class Test {
List <Observer> observers;
public void attach(Observer observer) { //더하기 }
public void notifyObservers() { // observers들한테 노티하기 }
public void onChanged() {
// 동작
notifyObservers()
}
}
아래와 같이 수정을 하면 변경이 일어났을 때 기능을 추가하고 싶은 경우 Test 클래스는 변경이 일어나지 않는다.
참고 : https://gmlwjd9405.github.io/2018/07/08/observer-pattern.html
'Java' 카테고리의 다른 글
Java8 람다(Lambda) 제대로 쓰기 (0) | 2019.04.25 |
---|---|
디자인패턴7 - Proxy pattern(프록시 패턴) (0) | 2019.04.24 |
디자인 패턴5 - 컴포지트 패턴 ( Composite pattern ) (0) | 2019.03.08 |
디자인 패턴4 - 템플릿 메소드 패턴이란(Template method pattern) (0) | 2019.03.08 |
디자인 패턴2 - 어댑터 패턴(Adapter Pattern) (0) | 2019.03.04 |