본문 바로가기

Java/디자인패턴

디자인 패턴 - 옵저버 패턴

옵저버 패턴은 객체의 상태가 바뀌면 객체를 구독하고 있는 다른 객체들한테 연락이 자동으로 갱신되는 

패턴을 말한다.

 

일대 다 객체 의존 관계를 구성하는 패턴이다.

 

옵저버 패턴은 결합도를 낮추는게 중요하다.

결합도를 낮춰서

- 옵저버를 언제든지 추가 할 수 있게 만들고

- 새로운 옵저버를 추가할때도 주제(subject)를 변경 할 필요가 없고

- 주제와 옵저버가 서로 독립적으로 재사용될 수 있다.

 

 

코드로 살펴보자

 

옵저버 패턴이 없이 구독을 하면 

알람을 보내는 시스템이 있다고 해보자

 

 

 

단순하게 구독을 하면 이메일과 sms 를 보내는 시스템이 있다고 치자.

만약에 여기에 추가로 카카오톡 을 보낸다고 한다면?

생성자가 바뀌게 되고 sendNotification 메소드도 변경이 발생한다.

벌써부터 OCP 법칙에 위반이 된다.

 

옵저버 패턴을 적용해보자

 

 

Subject 를 만들어서 옵저버들을 한번에 관리 할 수 있게 만들고

옵저버들을 리스트로 보관할 수 있게 구현을 해둔다.

 

옵저버 인터페이스를 만들고

각 옵저버들을 만들어서

실행을 시켜보면 정상적으로 구독한 옵저버들의 메소드가 호출이 된다.

 

옵저버 패턴을 사용하면 추가로 구독할 객체가 생기더라도

기존 코드를 다시 작성할 필요가 없어져서 OCP 를 위배하지 않는다.

 

'Java > 디자인패턴' 카테고리의 다른 글

디자인 패턴 - 데코레이터 패턴  (0) 2021.03.16
디자인 패턴 - 팩토리 패턴  (0) 2021.03.15
디자인 패턴 - Strategy 패턴  (0) 2021.03.15