코루틴과 일시 중단 함수를 사용하면 단일 값을 비동기적으로 반환받을 수 있다. 하지만 데이터가 시간에 따라 변하고, 이 변하는 데이터에 실시간으로 반응해야 하는 상황이 생기면 새로운 도구가 필요해진다. 여기서 코루틴의 Flow가 등장한다. Flow는 비동기적으로 계산된 여러 값을 순차적으로 반환받을 수 있도록 설계된 코루틴의 핵심 구성 요소로, 코루틴 기반 환경에서 리액티브 프로그래밍을 구현하기 위해 사용된다.
리액티브 프로그래밍은 데이터 흐름을 선언적으로 표현하는 프로그래밍 패러다임으로, 복잡한 데이터 흐름을 간결하게 다룰 수 있도록 한다. 이런 특성 덕분에 복잡한 데이터 흐름을 가진 현대의 애플리케이션들에서 리액티브 프로그래밍은 필수적인 요소로 자리 잡았다.
하지만 코루틴 자체도 이해가 쉽지 않은 주제이고, 리액티브 프로그래밍 또한 학습 곡선이 가파르다. Flow는 두 개념을 모두 요구하는 만큼, 학습 난이도는 매우 높은 편이다. 그럼에도 불구하고 Flow를 다루는 학습 자료는 많지 않으며, 있더라도 독자가 리액티브 프로그래밍에 대한 사전 이해를 갖고 있다고 가정하는 경우가 많아 진입 장벽이 높다.
이 책은 더 많은 개발자들이 코루틴 Flow에 쉽게 다가갈 수 있도록 하기 위해 집필됐다. 전작 『코틀린 코루틴의 정석』에서는 코루틴 자체에 대한 깊이 있는 이해를 제공했다면, 이번 책은 그 기반 위에서 Flow API를 활용한 리액티브 프로그래밍을 체계적으로 설명한다. Flow의 개념과 생성 방식, Flow에서 방출되는 데이터를 소비하는 방법 같은 기초부터, 배압과 뜨거운 Flow와 차가운 Flow 같은 심화 주제까지 폭넓게 다뤄 리액티브 프로그래밍을 깊이 있게 이해할 수 있도록 구성했다.
코틀린과 코루틴에 대한 기본 지식만 갖추고 있다면, 누구나 이해할 수 있도록 설계된 이 책을 통해 더 많은 개발자들이 Flow를 친숙하게 느끼고 실무에 자신 있게 활용하길 바란다.
개발자들은 프로그램을 만들며 비동기 프로그래밍이 필요한 수많은 상황과 맞닥뜨리게 된다. 그 과정에서 수많은 난관을 거쳐 각 상황에 맞는 솔루션을 직접 찾아가며 성장하고 비동기 프로그래밍에 익숙해진다. 성능 좋은 프로그램을 만드는 데는 비동기 프로그래밍이 필수적이므로 실력 있는 개발자가 되기 위해서는 비동기 프로그래밍에 대한 이해가 필요하다. 하지만 비동기 프로그래밍에 대한 학습 자료는 많지 않다. 또한 그 학습 자료들도 대부분 어느 정도 실력이 갖춰진 개발자를 대상으로 작성돼 있어 이제 막 개발을 시작한 개발자들은 이해하기 어렵다.
코틀린 코루틴 또한 예외가 아니다. 코루틴은 성능과 안정성, 가독성을 모두 갖춘 비동기 솔루션으로 향후 오랜 기간 동안 코틀린 비동기 프로그래밍의 표준이 될 것이 명백하다. 이에 따라 많은 개발자가 실무에서 코루틴을 사용하기 시작했지만, 여전히 학습 자료가 부족하고 특히 초보 개발자들은 이해하기 어려운 자료가 대부분이다.
필자는 그동안 개발자들이 코루틴에 쉽게 접근할 수 있도록 여러 가지 시도를 했다. 영어로 된 책과 강의, 공식 문서 등을 정리한 내용을 시리즈로 기술 블로그에 올리기도 했고, 코루틴 공식 기술 문서를 한국어로 번역해 웹에 배포하기도 했다. 시도들은 좋은 반응을 얻었지만 코루틴을 체계적으로 다루는 데는 한계가 있었다. 그러던 중 책을 통해 코루틴을 보다 체계적으로 전달할 수 있겠다는 생각에 집필을 시작했다.
이 책에서는 코루틴을 체계적으로 다룰 것이다. 기존의 멀티 스레드 프로그래밍은 어떤 특징을 가졌는지, 코루틴이 기존 멀티 스레드 프로그래밍의 한계를 어떻게 극복했는지, 코루틴의 구성 요소는 무엇이고 어떻게 사용하는지 등을 다룬다. 이 책을 통해 단순히 코루틴을 어떻게 사용하는지에 대한 지식을 넘어 코루틴이 무엇을 해결하고자 했는지 알 수 있다. 그리고 코틀린 언어만 알고 있다면 이 모든 내용을 이해할 수 있도록 구성했다. 이 책을 통해 많은 개발자들이 코루틴에 대해 깊이 이해할 수 있게 되길 바란다.