[디자인패턴] 옵저버 패턴(Observer Pattern)이란 무엇인가?
2023. 3. 8. 11:58
Programming/Design Pattern
정의 정말 많이 쓰이는 디자인 패턴 중 하나인 옵저버 패턴은 아래와 같은 정의를 가지고 있다. 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로, 일대다(one-to-many) 의존성을 정의한다. 아래의 그림과 같이, 한 Subject가 자신의 상태가 바뀌었음을 다수의 Observer 들에게 통지(Notify)하는 방식을 가지고 있는 패턴이다. 옵저버 패턴은 RxJava, Swing 라이브러리 등 많은 곳에서 활용하고 있는 디자인 패턴이다. 문제 상황 한 신문사가 있고, 이 신문사에서 출간되는 신문을 구독하는 다수의 구독자가 있는 상황을 고려해 보자. 구독자들은 신문이 배달될 때마다 바로 신문을 읽고 싶은 상황이다. 이를 위의 그림과 같이 정리하면 ..
[RxJava] 생산자(Publisher)와 소비자(Consumer), 연산자(Operator)
2022. 11. 15. 18:33
Programming/Java
Backpressure Starategy (배압 기능) RxJava의 기본이 되는 Flowable, Observable 등을 다루기에 앞서 Backpressure Strategy를 이해해야 한다. Backpressure Strategy는 배압 기능이라고 번역되며, 이는 통지하는 데이터의 개수를 제어하는 기능이라고 생각하면 된다. 아래와 같은 상황을 보자. 위의 상황과 같이 만약 소비자의 입장에서 한 번에 처리할 수 있는 데이터가 5개로 제한된다고 한다면, 아무리 생산자가 많은 데이터를 통지할 수 있더라도 소비자에게 최대 5개의 데이터만 전달해야 할 것이다. 이럴 때 배압 기능을 이용해 데이터의 최대 전달량을 5로 설정할 수 있는 것이다. Flowable vs Observable RxJava에서의 대표적인..
[RxJava] Reactive Streams, RxJava란 무엇인가?
2022. 11. 15. 18:22
Programming/Java
RxJava란 무엇인가? RxJava는 자바에서 리액티브 프로그래밍(Reactive Programming)을 구현하는 데 사용하는 라이브러리이다. 리액티브 프로그래밍(Reactive Programming) 이란? 데이터가 통지될 때마다 관련 프로그램이 반응(Reaction)해 데이터를 처리하는 프로그래밍 방식.이 때, 통지되는 데이터의 흐름을 데이터 스트림(Data Stream) 이라고 한다. RxJava는 데이터를 통지하는 생산자를 생성하고, 통지한 데이터를 소비자가 받아 처리하는 방식을 취하고 있다. 이러한 방식은 디자인 패턴인 옵저버(Observer) 패턴을 확장한 구조라고 볼 수 있다. 아래와 같은 예시 코드를 참고하자. public static void main(String[] args) { F..