상세 컨텐츠

본문 제목

[Design Pattern] Observer Pattern 옵저버 패턴에 대해 알아보자!

Other

by 조킴 2023. 1. 7. 21:14

본문

반응형

 

서론 

최근, 헤드퍼스트 디자인패턴이라는 책을 통해 디자인 패턴을 공부하고 있다. 

 

오브젝트를 읽고, 해당 책을 보니 내용을 그림으로 설명해주기도 하고 비유를 해주시며 설명을 하니, 머리에 쏙쏙 들어오는 느낌이 들었다. 

 

아무튼, 해당 책을 기반으로 여기서 나오는 디자인 패턴들을 기억하고 리마인드를 해보고자 게시물을 하나씩 적어보려고 한다. 

 

옵저버 패턴

옵저버 패턴 ( Observer Pattern ) 
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고, 자동으로 내용이 갱신되는 방식으로 일대다 ( One-to-many ) 의존성을 정의한다. 

 

하나의 객체의 상태가 변경되면 그 객체를 의존하는 모든 객체는 연락을 받게 된다. 

 

그림을 통해 알아보면 다음과 같다. 

 

made by . me

간략하게 그려보는데, 위 내용만 보더라도 일대다 형식임을 확인할 수 있다. 

 

옵저버에는 주제에 포함되어 있고, 만약 주제가 변경이 되었을 시 옵저버에게 정보가 전달되게 된다.

 

옵저버 패턴은 여러가지 방법으로 구현이 가능하지만, 보통 주제 인터페이스옵저버 인터페이스가 들어있는 클래스 디자인으로 구현하게 된다. 

 

옵저버 패턴은, 느슨한 결합을 보여주는 가장 좋은 예인데 알아보기 전, 느슨한 결합이 무엇인지에 대해 한번 살펴보자 

 

느슨한 결합 
객체들이 상호작용할 수는 있지만, 서로를 잘 모르는 관계를 의미한다. 즉, 각 객체들 간의 의존성이 느슨한 결합형태를 의미

 

그렇다면, 옵저버 패턴은 어떻게 느슨한 결합을 만드는 것일까? 

 

주제는 옵저버가 특정 인터페이스 ( Observer Interface )를 구현한다는 사실만 안다.

  • 옵저버의 구상 클래스가 무엇인지, 옵저버가 무엇을 하는지는 알 필요도 없다. 

 

옵저버 언제든지 새로 추가할 수 있다. 

  • 주제는 Observer 인터페이스를 구현하는 객체의 목록에만 의존하기에, 언제든지 새로운 옵저버를 추가하는 것이 가능하다.
  • 실행 중 하나의 옵저버를 다른 옵저버로 바꿔도 주제는 계속해서 다른 옵저버에 데이터 요청이 가능하기에, 제거해도 무관하다. 

 

새로운 형식의 옵저버를 추가할 때도 주제를 변경할 필요가 전혀 없다.

  • 옵저버가 되어야 하는 새로운 구상 클래스가 생겼다고 가정해보자 
    • 새로운 클래스 형식을 받아들일 수 있도록 주제를 바꿀 필요 없이, 새로운 클래스에서 옵저버 인터페이스를 구현하고 옵저버로 등록하면 끝난다. 
  • 즉, 옵저버 인터페이스만 구현하면 어떤 객체에도 연락이 가능하다. 

 

주제나 옵저버가 달라져도 서로에게 영향을 미치지 않는다. 

  • 서로 느슨하게 결합되어 있기에, 주제나 옵저버 인터페이스를 구현한다는 조건만 만족한다면 어떻게 고쳐도 문제가 생기지 않는다. 

 

옵저버 패턴은 흔히 사용되는 패턴 중 하나로, 이미 수많은 라이브러리와 프레임워크에서도 쉽게 찾아볼 수 있다.

 

 

예를 들어 JDK에 있는 자바빈 ( JavaBean ) 그리고 스윙 ( Swing ) 라이브러리에서도 옵저버 패턴을 사용중이라고 한다. 

 

 

옵저버 패턴을 사용할때 대체적으로 옵저버가 필요한 데이터를 골라서 가져갈 수 있도록 만드는 방법이 제일 좋다. 

 

해당 옵저버 패턴을 이용해 코드를 작성해보았다. 

https://github.com/JoeCP17/spring-study/tree/master/disignPattern

 

GitHub - JoeCP17/spring-study: 스프링 TIL 저장소

스프링 TIL 저장소. Contribute to JoeCP17/spring-study development by creating an account on GitHub.

github.com

 

 

마치며 

옵저버 패턴을 공부하며, 해당 챕터에서 GUI 내용도 그렇고 프런트에서 이벤트 핸들러 등, 이러한 요소가 있을 때 많이 사용될 것 같은 느낌이 들었다. 

 

스터디 멤버분과 이러한 이야기를 나누다, 아는 지인 중 앱 개발자신데 자주 사용 중이라는 이야기를 해주셔서 프런트 개발자분들 혹은 모바일 개발자분들이 자주 사용하실 일이 많은가??라는 생각이 문득 들었다. 

 

이 외에도, 공부를 진행하며 어디에서 주로 사용할까에 대해 조사를 하고 찾아보았고, 이에대한 키워드를 다음과 같이 얻을 수 있었다. 

메시지 - 큐 , ervent-driven , pub-sub , 비동기 

 

해당 키워드에서도 옵저버 패턴과 많은 연관들이 있었고 해당 내용에대해서도 공부해야겠다라는 점들을 얻을 수 있었다. 

 

이 책을 통해 앞으로도 꾸준히 디자인 패턴에 대해 공부를 하며 기록을 이어가 보고자 한다. 

 

반응형

관련글 더보기