코틀린 동시성 프로그래밍 (예제로 배우는 코틀린 동시성)
Description
코틀린의 코루틴 소개로 시작해 동시성 코드를 어떻게 작성하는지 배우고, 코틀린으로 멀티 스레드 소프트웨어를 개발하는 데 필요한 개념을 이해할 수 있다. 비동기 애플리케이션을 개발할 때 스레드와 코루틴이 어떻게 소통하고 동기화하는지 알게 될 것이다. 또한 에러와 예외를 핸들링하는 방법과 멀티 코어 프로세싱을 활용하는 방법도 배울 수 있다. 추가로 코루틴이 어떻게 내부적으로 동작하는지 파악함으로써 코틀린의 큰 그림을 이해할 수 있을 것이다.

★ 이 책에서 다루는 내용 ★

■ 동시성에 대한 코틀린의 접근 방식
■ 순차적 비동기 일시정지 함수
■ 온 디맨드로 다시 시작되는 일시 정지 데이터 소스의 생성
■ 에러 핸들링의 베스트 프랙티스
■ 코루틴 간의 소통을 위한 채널 사용
■ 코루틴의 내부 동작 방식

★ 이 책의 대상 독자 ★

동시성과 관련한 일반적인 지식을 배우고 싶거나 특정 분야에 코틀린을 적용하려는 개발자를 위한 책이다. 기본적인 코틀린 지식만 있으면 읽을 수 있을 것이다.
저자

미구엘엔젤카스티블랑코토레스

미국에거주하는소프트웨어엔지니어다.글로반트(Globant)에서풀스택기술리더및소프트웨어디자이너로근무하고있으며포브스에서선정한세계기업브랜드가치순위10위,신뢰할만한기업순위5위안에속한회사에서다수의프로젝트를성공적으로이끌었다.
코틀린의얼리어댑터로서코루틴의첫번째베타버전의동시성프리미티브(ConcurrencyPrimitive)에대해저술했으며,항상코틀린의새로운기능을주시하고있다

목차

1장.HelloConcurrentWorld

__프로세스,스레드,코루틴
____프로세스
____스레드
____코루틴
____내용정리
____동시성에대해
____동시성은병렬성이아니다
____CPU바운드와I/O바운드
____CPU바운드알고리즘에서의동시성과병렬성
____I/O바운드알고리즘에서의동시성대병렬성
____동시성이어려운이유
__코틀린에서의동시성
____넌블로킹
____명시적인선언
____코틀린동시성관련개념과용어
__요약

2장.코루틴인액션

__안드로이드스튜디오다운로드및설치
__코틀린프로젝트생성하기
__코루틴지원추가하기
__안드로이드의UI스레드
____CallFromWrongThreadException
____NetworkOnMainThreadException
____백그라운드에서요청하고,UI스레드에서업데이트
__스레드생성
____CoroutineDispatcher
____디스패처에코루틴붙이기
__네트워킹사용권한추가
__서비스호출을위한코루틴생성
__UI요소추가
____UI가블로킹되면발생하는일
__처리된뉴스의수량표시
__UI디스패처사용
____플랫폼별UI라이브러리
__요청보류여부를위한비동기함수생성
____비동기호출자로감싸인동기함수
____미리정의된디스패처를갖는비동기함수
____유연한디스패처를가지는비동기함수
____더좋은방식을선택하기위한방법
__요약

3장.라이프사이클과에러핸들링

__잡과디퍼드
____잡
____디퍼드
__상태는한방향으로만이동
____최종상태의주의사항
__RSS-여러피드에서동시에읽기
____피드목록지원
____스레드풀만들기
____데이터를동시에가져오기
____응답병합
____동시요청테스트
____넌해피패스(Non-happypath)-예기치않은중단
____디퍼드가예외를갖도록하기
____예외를무시하지말것!
__요약

4장.일시중단함수와코루틴컨텍스트

__RSS리더UI개선
____각피드에이름부여
____피드의기사에대한자세한정보가져오기
____스크롤이가능한기사목록추가
____기사별레이아웃
____정보매핑을위한어댑터
____액티비티에어댑터연결
____새UI테스트
__일시중단함수
____동작중인함수를일시중단
__코루틴컨텍스트
____디스패처
____예외처리
____Non-cancellable
__컨텍스트에대한추가정보
____컨텍스트결합
____withContext를사용하는임시컨텍스트스위치
__요약

5장.이터레이터,시퀀스그리고프로듀서

__일시중단가능한시퀀스및이터레이터
__값산출
__이터레이터
____이터레이터와의상호작용
__시퀀스
____시퀀스와상호작용
____시퀀스는상태가없다
____일시중단피보나치
____피보나치수열작성
____피보나치이터레이터작성
__프로듀서
____프로듀서만들기
____프로듀서와상호작용
____프로듀서를사용한일시중단피보나치수열
__프로듀서인액션
____어댑터에서더많은기사요청
____온디멘드피드를가져오는프로듀서만들기
____UI의목록에기사추가하기
__요약

6장.채널-통신을통한메모리공유

__채널이해
____스트리밍데이터사례
____분산작업사례
__채널유형과배압
____언버퍼드채널
____버퍼드채널
__채널과상호작용
____SendChannel
____ReceiveChannel
____읽기전유효성검사
____채널인액션
____협업검색구현하기
__요약

7장.스레드한정,액터그리고뮤텍스

__원자성위반
____원자성의의미
__스레드한정
____스레드한정의개요
____코루틴을단일스레드로한정
__액터
____액터란?
____액터생성
____액터를사용해기능확장
____액터상호작용에대한추가정보
__상호배제
____상호배제이해
____상호배제와상호작용
__휘발성변수
____스레드캐시
____@Volatile
____@Volatile이스레드안전카운터문제를해결하지못하는이유
____@Volatile을사용하는경우
__원자적데이터구조
__액터인액션
____UI에라벨추가
____카운터로사용할액터만들기
____결과가로드될때카운터증가시키기
____UI가업데이트에반응하도록채널추가하기
____채널을통해업데이트된값보내기
____변경사항에대한UI업데이트
____구현테스트
____새로운검색시카운터재설정하기
__요약

8장.동시성코드테스트와디버깅

__동시성코드테스트
____가정을버려라
____나무가아닌,숲에집중하라
____테스트에대한추가조언
__테스트작성
____결함이있는UserManager작성하기
____kotlin-test라이브러리추가
____해피패스테스트추가
____에지케이스를위한테스트
____문제점식별
____중단해결
____테스트재시도
__디버깅
____로그에서코루틴식별
____디버거에서코루틴식별
____조건부브레이크포인트
__복원력과안정성
__요약

9장.코틀린의동시성내부

__연속체전달스타일
____연속체
____suspend한정자
____상태머신
__컨텍스트전환
____스레드전환
____예외처리
__요약

출판사 서평

★이책의구성★

1장,‘Hello,ConcurrentWorld!’에서는동시성을쉽게이해할수있는내용위주로구성했다.프로세스,스레드,코루틴과같은개념으로시작해서동시성과병렬처리를비교해소개한다.동시성을코딩할때부딪치는일반적인난관과동시성에대한코틀린의접근방식그리고이책에서전체적으로등장하는용어를소개한다.
2장,‘코루틴인액션’에서는코루틴을개발하는첫번째실습으로안드로이드프로젝트를생성한다.이를통해코루틴으로네트워킹하는방식,비동기작업을위한유형의다양한방식,각방식의장점,저자가추천하는방식을설명한다.
3장,‘라이프사이클과에러핸들링’에서는코루틴의라이프사이클과코루틴을사용할때발생할수있는오류의해결방법을소개하고,2장에서생성한RSS리더에에러핸들링을추가해실제오류를어떻게처리하는지설명한다.
4장,‘일시중단함수와코루틴컨텍스트’에서는코루틴의필수컨텍스트와코루틴이동작을정의하고수정하는설정을소개한다.코루틴의스레드의정의와에러핸들링에필요한컨텍스트를다룬다.
5장,‘이터레이터,시퀀스그리고프로듀서’에서는데이터소싱과처리를일시중단하는데필요한프리미티브를소개한다.언제,어떻게,이러한프리미티브를사용해야하는지와온디맨드데이터로딩을구현하는방식을상세히살펴본다.
6장,‘채널,통신을통한메모리공유’에서는매우중요한채널의개념을설명한다.다양한유형의유즈케이스와차이점으로시작해애플리케이션개발방식을설명하며,RSS피드그룹에서채널을이용해어떻게동시검색할수있는지살펴본다.
7장,‘스레드한정,액터그리고뮤텍스’에서는원자성위반이나레이스컨디션과같은에러를방지하기위해사용되는세개의코루틴프레임워크도구를소개한다.또한동시성코드를작성할때기초가되는스레드한정과액터그리고뮤텍스에대해배울수있다.
8장,‘동시성코드테스트와디버깅’에서는테스트를어떻게최대한활용할수있는지다룬다.기능테스트와동시성코드를테스트할수있는세개의구간그리고프로젝트설정을통해로그를활용하는방법을알아본다.다른스레드또는코루틴에서발생하는노이즈를피하기위해동시성코드를디버그하는방법도살펴본다.
9장,‘코틀린의동시성’에서는내부실행단계에서의일시중단함수와스레드시행그리고예외핸들링을분석한다.컴파일러의역할과stdlib및코루틴라이브러리에존재하는여러개의클래스를구현하는방법을설명하고있어내부동작방식을상세히이해할수있다.

★옮긴이의말★

최신애플리케이션은고성능의멀티코어CPU환경을최대한활용하도록개발되고있다.이런환경에서는동시성을제대로이해하고고려해야할필요가더욱절실하다.코틀린은2017년구글이안드로이드의개발언어로공식지정된후,안드로이드생태계에서메인개발언어로자리매김하고있다.또한코틀린은동시성을뒷받침하기위해다양한언어적지원기능을제공하고있다.
기존Java/Android동시성프레임워크가제공하는단점들을코루틴을통해훨씬쉽고효과적으로처리할수있으며코틀린이언어적으로제공하는다양한기본형들을활용해넌블로킹,비동기코드를마치동기코드처럼쉽게작성할수있다.
이책은코틀린의동시성을학습하기위해필요한코루틴개념과동시성,병렬성의차이점을그림으로쉽게설명해코틀린에서멀티스레드애플리케이션을만들기위해꼭알아야하는기본개념을이해할수있다.코틀린의기본형을활용하는실제예제를만들면서스레드와코루틴간의통신방법과비동기애플리케이션을개발하면서오류와예외처리하는방법을익히고멀티코어처리를활용하는방법도배울수있다.코틀린의동시성프로그램기법과동시성의내부동작방식에대한이해도를높일수있는기회가되리라기대한다.