최근, 헤드퍼스트 디자인패턴이라는 책을 통해 디자인 패턴을 공부하고 있다.
오브젝트를 읽고, 해당 책을 보니 내용을 그림으로 설명해주기도 하고 비유를 해주시며 설명을 하니, 머리에 쏙쏙 들어오는 느낌이 들었다.
아무튼, 해당 책을 기반으로 여기서 나오는 디자인 패턴들을 기억하고 리마인드를 해보고자 게시물을 하나씩 적어보려고 한다.
옵저버 패턴 ( Observer Pattern )
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고, 자동으로 내용이 갱신되는 방식으로 일대다 ( One-to-many ) 의존성을 정의한다.
하나의 객체의 상태가 변경되면 그 객체를 의존하는 모든 객체는 연락을 받게 된다.
그림을 통해 알아보면 다음과 같다.
간략하게 그려보는데, 위 내용만 보더라도 일대다 형식임을 확인할 수 있다.
옵저버에는 주제에 포함되어 있고, 만약 주제가 변경이 되었을 시 옵저버에게 정보가 전달되게 된다.
옵저버 패턴은 여러가지 방법으로 구현이 가능하지만, 보통 주제 인터페이스와 옵저버 인터페이스가 들어있는 클래스 디자인으로 구현하게 된다.
옵저버 패턴은, 느슨한 결합을 보여주는 가장 좋은 예인데 알아보기 전, 느슨한 결합이 무엇인지에 대해 한번 살펴보자
느슨한 결합
객체들이 상호작용할 수는 있지만, 서로를 잘 모르는 관계를 의미한다. 즉, 각 객체들 간의 의존성이 느슨한 결합형태를 의미
그렇다면, 옵저버 패턴은 어떻게 느슨한 결합을 만드는 것일까?
주제는 옵저버가 특정 인터페이스 ( Observer Interface )를 구현한다는 사실만 안다.
옵저버 언제든지 새로 추가할 수 있다.
새로운 형식의 옵저버를 추가할 때도 주제를 변경할 필요가 전혀 없다.
주제나 옵저버가 달라져도 서로에게 영향을 미치지 않는다.
옵저버 패턴은 흔히 사용되는 패턴 중 하나로, 이미 수많은 라이브러리와 프레임워크에서도 쉽게 찾아볼 수 있다.
예를 들어 JDK에 있는 자바빈 ( JavaBean ) 그리고 스윙 ( Swing ) 라이브러리에서도 옵저버 패턴을 사용중이라고 한다.
옵저버 패턴을 사용할때 대체적으로 옵저버가 필요한 데이터를 골라서 가져갈 수 있도록 만드는 방법이 제일 좋다.
해당 옵저버 패턴을 이용해 코드를 작성해보았다.
https://github.com/JoeCP17/spring-study/tree/master/disignPattern
옵저버 패턴을 공부하며, 해당 챕터에서 GUI 내용도 그렇고 프런트에서 이벤트 핸들러 등, 이러한 요소가 있을 때 많이 사용될 것 같은 느낌이 들었다.
스터디 멤버분과 이러한 이야기를 나누다, 아는 지인 중 앱 개발자신데 자주 사용 중이라는 이야기를 해주셔서 프런트 개발자분들 혹은 모바일 개발자분들이 자주 사용하실 일이 많은가??라는 생각이 문득 들었다.
이 외에도, 공부를 진행하며 어디에서 주로 사용할까에 대해 조사를 하고 찾아보았고, 이에대한 키워드를 다음과 같이 얻을 수 있었다.
메시지 - 큐 , ervent-driven , pub-sub , 비동기
해당 키워드에서도 옵저버 패턴과 많은 연관들이 있었고 해당 내용에대해서도 공부해야겠다라는 점들을 얻을 수 있었다.
이 책을 통해 앞으로도 꾸준히 디자인 패턴에 대해 공부를 하며 기록을 이어가 보고자 한다.
[Design Pattern] Factory Pattern 팩토리 패턴에 대해 알아보자! (0) | 2023.01.28 |
---|---|
[Design Pattern] Decorator Pattern 데코레이터 패턴에 대해 알아보자! (0) | 2023.01.14 |
프로젝트 회고 : Let's Parking! (5) | 2022.12.27 |
[BOOK : 오브젝트 15장] 디자인 패턴과 프레임워크 (0) | 2022.12.18 |
[BOOK : 오브젝트 14장] 일관성 있는 협력 (0) | 2022.12.10 |