옵저버(observer) 패턴
옵저버패턴은 생산자와 소비자를 분리해서,서로간에 구현에 영향을 받지않게 하는 패턴임
이거의 상위단계로 생산자-소비자(발행-구독)패턴이 있는데
차이점은 생산자소비자패턴은 중간에 브로커를 둬서,걔가 진짜 생산자와 소비자를 완전히 분리시키고,생산자와 소비자간에는 서로 아무것도 신경쓰지않고,자기가 할일(생산자는 생산해서 밀어넣기,소비자는 있는거 가져가서 일하기)만 신경쓰면됨
옵저버패턴은 생산자소비자보다는 조금 더 낮은단계의 패턴임
이건 주제인터페이스와 옵저버인터페이스 2개를 두고,
주제인터페이스는
- 옵저버추가
- 옵저버제거
- 옵저버에게 알림
가 있고
옵저버인터페이스는
- 업데이트
만 있음
옵저버가 될애들은 옵저버를 구현해야하고,주제(생산)을 할애들은 주제인터페이스를 구현해야함
그래서 주제 구현체는 옵저버배열을 가지고있고,자기가 작업하고 작업물을 어디 넣어둔다음에 옵저버들한테(자기가 가진 배열) 알림만 보내는거(콜백호출,즉 for돌려서 옵저버배열의 업데이트메서드 호출)
그 알림을 받은 옵저버들은 작업을 하는것
즉 주제(생산자)는 생산후에 알림을 보내는일만 추가되고 다른건 신경쓸필요없고
옵저버(소비자)는 항상 감시할필요없이 알림이 울리면 일을 하면됨
즉 옵저버패턴이란
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른객체에게 연락이 가고,자동으로 내용이 갱신되는 일대다 의존성을 정의하는 패턴
여기서 핵심은 주제는 옵저버들이 무슨클래스인지 알필요도 없고 그냥 옵저버인터페이스를 구현한다는거만 알게되니
서로간의 의존성을 약결합으로 만들수있다는데 있음
또한 주제와 옵저버들은 서로 독립적으로 사용할수도 있게되고,서로간에 영향도 주지않음
여기서 생산자소비자패턴과의 차이는,여기서 알림을 보내는일까지도 별개의 브로커로 떼어내고,걔가 모든일을 담당하게하는거(카프카)
또한 이렇게되면 브로커라는 중간매개체가 있으니까,도메인이 서로 달라도 유효하게 작업할수있고,여러프로그램이 한 주제에 대해서도 같이 생산하고 소비하는게 가능해짐