본문 바로가기

Java

디자인 패턴6 - 옵저버 패턴(Observer pattern)

옵저버 패턴(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