홈 > 부모님 > 부모님 > 소설,일반 > 컴퓨터,모바일
코틀린 코루틴 리액티브 프로그래밍 : Flow와 Channel 이미지

코틀린 코루틴 리액티브 프로그래밍 : Flow와 Channel
에이콘출판 | 부모님 | 2026.05.19
  • 정가
  • 36,000원
  • 판매가
  • 32,400원 (10% 할인)
  • S포인트
  • 1,800P (5% 적립)
  • 상세정보
  • 18.8x23.5 | 0.927Kg | 488p
  • ISBN
  • 9791161759524
  • 배송비
  • 2만원 이상 구매시 무료배송 (제주 5만원 이상) ?
    배송비 안내
    전집 구매시
    주문하신 상품의 전집이 있는 경우 무료배송입니다.(전집 구매 또는 전집 + 단품 구매 시)
    단품(단행본, DVD, 음반, 완구) 구매시
    2만원 이상 구매시 무료배송이며, 2만원 미만일 경우 2,000원의 배송비가 부과됩니다.(제주도는 5만원이상 무료배송)
    무료배송으로 표기된 상품
    무료배송으로 표기된 상품일 경우 구매금액과 무관하게 무료 배송입니다.(도서, 산간지역 및 제주도는 제외)
  • 출고일
  • 품절된 상품입니다.
  • ★★★★★
  • 0/5
리뷰 0
리뷰쓰기

구매문의 및 도서상담은 031-944-3966(매장)으로 문의해주세요.
매장전집은 전화 혹은 매장방문만 구입 가능합니다.

  • 도서 소개
  • 출판사 리뷰
  • 작가 소개
  • 목차
  • 회원 리뷰

  도서 소개

코틀린 Flow API와 Channel을 학습할 수 있는 개발서다. 코루틴의 Flow API를 활용한 리액티브 프로그래밍과 Channel을 활용한 코루틴 간 통신을 기초부터 심화까지 다룬다.

명령형 프로그래밍의 한계와 리액티브 프로그래밍의 등장 배경을 설명하고, Flow API의 특징을 정리하였다. Flow 생성 방법과 중간 연산자, 터미널 연산자 활용, 취소와 예외 처리, 결합까지 다뤄 기초 학습이 가능하다.

데이터 생산 속도와 소비 속도 간 불균형 상황에서 배압 처리 방법을 설명하였다. 차가운 Flow와 뜨거운 Flow의 개념과 활용 방식을 정리하였다.

Flow 테스트 방법과 Channel을 활용한 코루틴 간 데이터 통신 방법을 포함하였다.

  출판사 리뷰

◈ 요약 ◈

이 책은 전작 『코틀린 코루틴의 정석』에 이어, 코루틴의 Flow API를 활용한 리액티브 프로그래밍과 Channel을 활용한 코루틴 간 통신을 기초부터 심화까지 체계적으로 다룬다.
풍부한 시각화 자료와 실행 가능한 예제 코드를 통해 동작 원리를 직관적으로 이해할 수 있도록 구성했으며, 안드로이드, 스프링 등 코틀린을 사용하는 개발자 분들 중 Flow와 Channel을 기초부터 심화까지 제대로 배워보고 싶은 독자들에게 추천한다.

◈ 이 책에서 다루는 내용 ◈

◆ 명령형 프로그래밍의 한계와 리액티브 프로그래밍의 등장 배경을 설명하고, 코틀린의 Flow API가 기존 리액티브 라이브러리와 어떤 차별점을 갖는지 소개한다.
◆ Flow를 생성하는 방법부터 다양한 중간 연산자와 터미널 연산자의 활용 방식을 배우고, Flow의 취소, Flow의 예외 처리, Flow의 결합까지 다뤄 기초를 탄탄히 다질 수 있도록 한다.
◆ 데이터 생산 속도와 소비 속도 간 불균형이 발생했을 때 Flow의 배압 처리를 통해 시스템을 안정적으로 유지하는 방법을 설명한다.
◆ 차가운 Flow와 뜨거운 Flow의 개념을 다룬다. 차가운 Flow만을 사용할 때 발생하는 문제에 대해 알아보고 이를 뜨거운 Flow를 통해 어떻게 해결할 수 있는지를 알아본다.
◆ Flow를 테스트하는 방법을 기초부터 심화까지 알아본다.
◆ Channel을 활용해 코루틴 간에 데이터를 주고받는 방법을 알아본다.

  작가 소개

지은이 : 조세영
취미로 안드로이드 개발을 시작했다가 빠져들어 안드로이드 개발자가 됐다. 하이퍼커넥트에서 안드로이드 개발자로서 커리어를 시작했고, 현재는 라인플러스에서 라인 안드로이드 앱을 개발하고 있다.안드로이드 개발을 하면서 어려움을 느낀 부분들을 다른 사람들과 공유하고 싶어 ‘조세영의 Kotlin World’ 기술 블로그를 운영하며 400개 이상의 글을 발행했다.블로그 운영 외에도 기술과 관련된 다양한 활동을 하고 있다. 코루틴 기술 문서를 번역해 웹에 배포하기도 했고, Compose Dynamic Theme이나 Filled Slider Compose 같은 오픈 소스 라이브러리를 만들어 배포해 Google Dev Library에 소개되기도 했다.경력현) 라인플러스 안드로이드 개발자전) 하이퍼커넥트 안드로이드 개발자전) 티맥스데이터 연구원전) 인공위성연구소 대학원생 연구원학력KAIST 전기및전자공학부 석사고려대학교 전기전자전파공학부 학사고려대학교 보건정책관리학부 학사인천외국어고등학교 졸업

  목차

1장 개발 환경 설정
1.1. 인텔리제이 아이디어 설치 및 둘러보기
1.1.1. 인텔리제이 아이디어 설치하기
1.2. 코틀린 프로젝트 생성하고 화면 구성 살펴보기
1.2.1. 프로젝트 생성하기
1.2.2. IDE 구성 살펴보기
1.3. 첫 Flow 만들고 수집하기
1.3.1. 코루틴 라이브러리 추가하기
1.3.2. 첫 Flow 만들기
1.4. Flow 디버깅 환경 설정하기
1.4.1. 실행 중인 스레드 출력하기
1.4.2. 실행 중인 코루틴 이름 출력하기
1.5. 요약

2장 리액티브 프로그래밍의 등장
2.1. 복잡해지는 애플리케이션
2.2. 이전의 방식과 한계
2.2.1. 명령형 프로그래밍
2.2.2. 명령형 프로그래밍의 한계
2.3. 리액티브 프로그래밍의 등장
2.3.1. 리액티브 프로그래밍
2.3.2. 비동기 메시지 통신
2.3.3. 리액티브 프로그래밍의 의의와 한계
2.4. 리액티브 프로그래밍 도입 전 고려해야 할 사항
2.4.1. 가파른 학습 곡선
2.4.2. 높은 도입 비용
2.5. 명령형과 리액티브 방식의 적절한 균형의 필요성
2.6. 요약
코루틴의 비동기 처리와 리액티브 프로그래밍의 비동기 처리
코루틴의 Flow API와 기존의 리액티브 프로그래밍 라이브러리의 차이

3장 리액티브 프로그래밍과 코루틴 Flow
3.1. 리액티브 프로그래밍을 구성하는 핵심 개념들
3.1.1. 데이터 스트림
3.1.2. 옵저버 패턴
3.1.3. 선언형 프로그래밍 패러다임
3.2. 코루틴 Flow API의 구성 요소
3.2.1. Flow 빌더 사용해 데이터 방출하기
3.2.2. 터미널 연산자 사용해 데이터 수집해 처리하기
3.2.3. 중간 연산자와 선언형 프로그래밍
3.2.4. 전체 과정 정리
3.3. 요약
리액티브 스트림의 등장
리액티브 스트림과 코루틴 Flow

4장 Flow 빌더
4.1. Flow 빌더로 Flow 만들기
4.1.1. flow 함수
4.1.2. flowOf 함수
4.1.3. asFlow 함수
4.1.4. 람다식에 대한 asFlow 함수
4.2. Flow 인터페이스 구현해 Flow 생성하기
4.3. Flow의 실행 컨텍스트 확인하고 전환하기
4.3.1. Flow가 동작하는 방식
4.3.2. flowOn 함수 사용해 업스트림의 실행 컨텍스트 전환하기
4.4. flowOn 함수 심화
4.4.1. CoroutineDispatcher가 변경될 때만 새로운 코루틴이 생성된다
4.4.2. 새롭게 생성된 코루틴은 기존의 코루틴과 구조화된다
4.4.3. flowOn의 인자로 Job을 넘기면 안 된다
4.5. 요약

5장 중간 연산자
5.1. 변환 연산자
5.1.1. map 함수 사용해 데이터 변환하기
5.1.2. map 함수의 사용
5.1.3. map 함수 직접 만들어 보기
5.2. 필터 연산자
5.2.1. filter 함수 사용해 데이터 필터링하기
5.2.2. filterIsInstance 함수로 특정 타입의 데이터만 필터링하기
5.2.3. filter 함수의 사용
5.2.4. filter 함수 직접 만들어 보기
5.3. 중복 제거 연산자
5.3.1. distinctUntilChanged 함수 사용해 중복 제거하기
5.3.2. distinctUntilChanged의 사용
5.3.3. distinctUntilChanged 함수 직접 구현해 보기
5.4. take, drop 연산자
5.4.1. take 함수
5.4.2. drop 함수
5.5. -notNull 연산자
5.5.1. mapNotNull 함수
5.5.2. filterNotNull 함수
5.6. 중간 연산자의 동작
5.6.1. 중간 연산자의 실제 동작 방식
5.6.2. 지연 실행되는 중간 연산자
5.7. 요약

6장 터미널 연산자
6.1. collect 일시 중단 함수 사용해 Flow에서 방출된 원소 처리하기
6.1.1. collect 일시 중단 함수
6.1.2. collect 일시 중단 함수 사용 시 주의할 점
6.1.3. collectIndexed 일시 중단 함수
6.2. first 일시 중단 함수 사용해 첫 값 가져오기
6.2.1. first 일시 중단 함수
6.2.2. first 일시 중단 함수 사용 시 주의할 점
6.2.3. firstOrNull 일시 중단 함수
6.3. last 일시 중단 함수 사용해 마지막 값 가져오기
6.3.1. last 일시 중단 함수
6.3.2. lastOrNull 일시 중단 함수
6.4. 수집된 값을 컬렉션으로 만드는 함수
6.4.1. toList 일시 중단 함수
6.4.2. toSet 일시 중단 함수
6.4.3. toCollection 일시 중단 함수
6.5. 누적 계산을 통해 하나의 값을 반환하는 함수
6.5.1. reduce 일시 중단 함수
6.5.2. fold 일시 중단 함수
6.6. 원소의 총 개수를 반환하는 함수
6.6.1. count 일시 중단 함수
6.6.2. count 일시 중단 함수 사용해 특정 조건을 만족하는 원소의 개수 구하기
6.7. 터미널 연산자 사용 시 주의할 점
6.8. 요약

7장 Flow의 이해
7.1. Flow의 동작 원리
7.1.1. 추상화에 감춰진 Flow의 동작 원리
7.1.2. Flow 동작 원리 이해하기
7.2. Flow의 특징
7.2.1. collect 일시 중단 함수가 호출돼야 데이터 생성과 방출이 시작된다
7.2.2. 동일한 코루틴 내에서 방출과 수집이 이뤄지면 Flow의 방출과 수집은 순차적으로 실행된다
7.3. 생산자 코루틴과 소비자 코루틴 분리하기
7.3.1. flowOn 함수 사용해 생산자 코루틴과 소비자 코루틴 분리하기
7.3.2. 버퍼 통해 방출된 원소 저장하기
7.3.3. buffer 함수 사용해 생산자 코루틴과 소비자 코루틴 분리하기
7.3.4. buffer 함수 사용 시 주의할 점
7.4. Flow의 완료
7.4.1. Flow의 완료 시점 이해하기
7.4.2. 무한히 방출되는 Flow에 collect를 호출하면 다음 라인의 코드가 실행되지 않는다
7.5. Flow의 컨텍스트 보존
7.6. flow 함수의 컨텍스트 변경 제한
7.7. SafeFlow와 unsafeFlow
7.8. 요약

8장 Flow 취소
8.1. Flow 취소하기
8.2. flow 함수의 취소 확인
8.3. 취소 확인 지점이 없는 Flow의 취소 확인
8.3.1. flowOf, asFlow 함수를 통해 만들어지는 Flow의 문제
8.3.2. 취소 확인 지점 넣어 취소 확인되게 만들기
8.3.3. cancellable 함수 사용해 취소 확인하도록 만들기
8.4. 요약

9장 Flow 예외 처리
9.1. try-catch 문을 사용한 Flow 예외 처리
9.1.1. try-catch 문으로 collect 호출부 감싸 예외 처리하기
9.1.2. 중간 연산자에서 데이터 처리 시 발생하는 예외 처리
9.1.3. try-catch 문의 동작을 handleException 중간 연산자로 만들어 보기
9.1.4. 예외 투명성을 위반하는 handleException 함수
9.2. catch 함수를 사용한 Flow 예외 처리
9.2.1. catch 함수 사용해 예외 처리하기
9.2.2. catch 함수에서 예외를 처리한 후 다시 전파하기
9.2.3. catch 함수가 다운스트림에서 발생한 예외를 구분하는 방법
9.3. retry 함수를 통해 예외 발생 시 재시도하기
9.3.1. retry 함수
9.3.2. retryWhen 함수
9.4. 요약

10장 생명주기 연산자
10.1. onStart 함수
10.2. onCompletion 함수
10.2.1. onCompletion 함수 사용해 Flow가 완료된 후에 실행될 동작 정의하기
10.2.2. onCompletion 함수 사용해 Flow가 취소됐을 때 실행될 동작 정의하기
10.3. onEach 함수
10.4. onEmpty 함수
10.4.1. onEmpty 사용해 방출될 원소가 없을 때 동작 정의하기
10.4.2. onEmpty 함수의 람다식에서 값 방출하기
10.5. launchIn 함수
10.5.1. onEach 함수와 함께 사용하기
10.5.2. 코루틴을 생성하는 launchIn 함수
10.6. 요약

11장 배압
11.1. 배압 처리가 필요한 경우 이해하기
11.1.1. 배압 처리가 필요하지 않은 경우
11.1.2. 배압 처리가 필요한 경우
11.2. collectLatest 일시 중단 함수를 활용한 배압 처리
11.2.1. collectLatest 일시 중단 함수 사용해 배압 처리하기
11.2.2. collectLatest 일시 중단 함수의 동작 원리
11.2.3. collectLatest 일시 중단 함수를 사용한 배압 처리의 한계
11.3. conflate 함수를 활용한 배압 처리
11.3.1. conflate 함수의 동작 방식
11.3.2. 코루틴을 분리하는 conflate 함수
11.4. buffer 함수를 사용한 배압 처리
11.4.1. buffer 함수의 기본 동작
11.4.2. capacity 사용해 버퍼 크기 설정하기
11.4.3. onBufferOverflow 사용해 버퍼가 가득 찼을 때 실행 전략 설정하기
11.5. 요약

12장 결합 연산자
12.1. zip 함수
12.1.1. zip 함수 사용해 Flow 결합하기
12.1.2. zip 함수의 동작 방식
12.1.3. zip 함수의 완료
12.2. combine 함수
12.2.1. combine 함수 사용해 Flow 결합하기
12.2.2. 여러 개의 Flow 결합하기
12.2.3. combine 함수의 완료
12.3. 요약

13장 평탄화 연산자
13.1. 평탄화 이해하기
13.1.1. 평탄화가 필요한 경우
13.1.2. 평탄화 연산자 사용하지 않고 평탄화해 보기
13.2. flattenConcat 함수와 flatMapConcat 함수
13.2.1. flattenConcat 함수
13.2.2. flatMapConcat 함수
13.2.3. flattenConcat, flatMapConcat 함수의 한계
13.3. flatMapMerge 함수
13.3.1. flatMapMerge 함수의 동작 방식
13.3.2. flatMapMerge가 동시에 실행할 수 있는 작업 수 제한하기
13.4. flatMapLatest 연산자
13.5. 요약

14장 차가운 Flow와 뜨거운 Flow
14.1. 차가운 Flow와 뜨거운 Flow
14.1.1. 차가운 Flow
14.1.2. 뜨거운 Flow
14.2. SharedFlow
14.2.1. SharedFlow의 개념과 기본 동작
14.2.2. SharedFlow 만들고 데이터 방출하기
14.2.3. replayCache 사용해 collect 호출 이전에 방출된 값 수집하기
14.2.4. 완료되지 않는 SharedFlow
14.3. StateFlow
14.3.1. StateFlow의 개념과 기본 동작
14.3.2. StateFlow 만들고 데이터 방출하기
14.3.3. 최신 상태만 처리하는 StateFlow
14.3.4. 완료되지 않는 StateFlow
14.3.5. MutableStateFlow의 동시성 제어
14.4. 요약

15장 뜨거운 Flow의 활용
15.1. 차가운 Flow를 뜨거운 Flow로 변환하기
15.1.1. 차가운 Flow를 SharedFlow로 직접 변환해 보기
15.1.2. shareIn 함수 사용해 Flow를 SharedFlow로 변환하기
15.1.3. stateIn 사용해 Flow를 StateFlow로 변환하기
15.2. MutableSharedFlow에 버퍼 설정하기
15.2.1. MutableSharedFlow에 대한 emit 일시 중단 함수의 동작
15.2.2. MutableSharedFlow에 버퍼 설정하기
15.3. MutableSharedFlow의 emit 일시 중단 함수와 tryEmit 함수의 차이
15.4. 뜨거운 Flow 캡슐화 전략
15.4.1. MutableSharedFlow로 방출하고 SharedFlow로 노출하기
15.4.2. MutableStateFlow로 방출하고 StateFlow로 노출하기
15.4.3. 외부로 노출하는 객체를 asSharedFlow, asStateFlow를 사용해 변환해야 하는 이유
15.5. 요약

16장 Flow 테스트
16.1. 테스트 환경 설정하기
16.2. 코루틴 라이브러리와 코루틴 테스트 라이브러리로 Flow 테스트하기
16.2.1. toList 일시 중단 함수 사용해 Flow 테스트하기
16.2.2. toList 일시 중단 함수를 사용한 테스트의 한계
16.2.3. take 함수 사용해 원소를 무한히 방출하는 Flow 테스트하기
16.2.4. first 일시 중단 함수 사용해 Flow 테스트하기
16.2.5. 시간의 흐름에 따라 방출되는 값이 변화하는 Flow 테스트
16.2.6. 코루틴 테스트 라이브러리 사용해 일시 중단 지점이 포함된 Flow 테스트하기
16.2.7. 원소가 무한히 방출되는 Flow 테스트하기
16.2.8. backgroundScope 사용해 테스트하기
16.3. Turbine을 사용한 코루틴 테스트
16.3.1. test 터미널 연산자09
16.3.2. awaitItem과 awaitComplete 사용해 방출되는 원소 순차적으로 확인하기
16.3.3. cancelAndIgnoreRemainingEvents 사용해 남은 이벤트 무시하기
16.3.4. expectMostRecentItem 사용해 특정 시점의 최신 원소 테스트하기
16.3.5. awaitError 사용해 예외 테스트하기
16.3.6. awaitEvent 사용해 수신된 이벤트 확인하기
16.3.7. test 일시 중단 함수에 name 설정하기
16.3.8. test 일시 중단 함수에 timeout 설정하기
16.3.9. turbineScope와 testIn 사용해 테스트 구성하기
16.3.10. SharedFlow, StateFlow 테스트하기
16.4. 요약

17장 Channel
17.1. Channel 기초
17.1.1. Channel 인터페이스
17.1.2. Channel 만들고 코루틴 간 통신하기
17.1.3. for 문 사용해 데이터 수신하기
17.1.4. close 함수 호출해 Channel 닫기
17.2. Channel에 버퍼 설정하기
17.2.1. 기본값이 설정된 Channel의 동작
17.2.2. capacity 설정해 버퍼 크기 지정하기
17.2.3. onBufferOverflow 통해 버퍼가 가득 찼을 때의 동작 설정하기
17.2.4. onUndeliveredElement 통해 수신되지 못한 데이터 처리하기
17.3. Channel 취소와 닫기의 이해
17.3.1. cancel 함수 사용해 Channel 취소하기
17.3.2. Channel을 닫는 것과 취소하는 것의 차이
17.3.3. 닫힌 Channel에는 원소를 송신하지 못한다
17.3.4. isClosedForSend 프로퍼티 확인해 닫힌 Channel 확인하기
17.4. Channel에 데이터를 송신하는 다양한 방법
17.4.1. send 일시 중단 함수
17.4.2. trySend 함수
17.4.3. trySendBlocking 함수
17.5. 특수한 동작을 하는 Channel
17.5.1. CONFLATED가 설정된 Channel
17.5.2. BUFFERED가 설정된 Channel
17.6. consume 함수
17.6.1. consume 함수 사용해 특정 작업 후 Channel 취소하기
17.6.2. consumeEach 일시 중단 함수 사용해 데이터 수신하기
17.7. produce 함수
17.7.1. produce 함수 사용해 Channel 생성하기
17.7.2. produce 함수 이해하기
17.8. Fan-in과 Fan-out
17.8.1. Fan-in
17.8.2. Fan-out
17.9. 요약

18장 channelFlow와 callbackFlow
18.1. channelFlow 함수 사용해 복수의 코루틴에서 원소 방출하기
18.2. awaitClose 일시 중단 함수 사용해 Channel이 닫힐 때의 동작 정의하기
18.3. callbackFlow 사용해 콜백 기반 API를 Flow로 래핑하기
18.4. awaitClose 호출을 강제하는 callbackFlow
18.5. 요약

  회원리뷰

리뷰쓰기

    이 분야의 신상품