{"product_id":"138578","title":"코틀린 코루틴의 정석","description":"\u003ccenter\u003e\u003cdiv style=\"text-align:center\"\u003e\u003cimg src=\"https:\/\/tmgdisk01.cafe24.com\/images\/vs\/4172\/sv\/3jXPCfFA4X4OhpyBkSmgzWCgPs2WHV.png?v=1765064711\" style=\"max-width:100%;max-height:10px\"\u003e\u003c\/div\u003e\u003c\/center\u003e\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\u003ccenter\u003e\n\u003cdiv style=\"width:95%\"\u003e\n\u003cdiv style=\"text-align:center;font-size:30px;font-weight:bolder;line-height:1.6em\"\u003e코틀린 코루틴의 정석\u003c\/div\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003cdiv style=\"border-bottom:1px;border-bottom-style:dotted;border-color:;padding-bottom:20px\"\u003e\u003ccenter\u003e\u003ctable align=\"center\" width=\"100%\"\u003e\u003ctbody style=\"border:0px\"\u003e\n\u003ctr\u003e\u003ctd align=\"center\" style=\"line-height:1.2em;text-align:center;font-size:18px;color:black;font-weight:bold;padding-bottom:20px;\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\u003ctr\u003e\u003ctd style=\"text-align:center\"\u003e\u003cimg src=\"https:\/\/image.yes24.com\/goods\/125014350\/XL\" style=\"max-width:100%;height:auto\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/center\u003e\u003c\/div\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003cdiv style=\"width:95%;{split_style6}padding-top:20px;padding-bottom:20px\"\u003e\n\u003cdiv style=\"text-align:left;font-size:16px;font-weight:bold;padding-bottom:20px\"\u003eDescription\u003c\/div\u003e\n\u003cdiv style=\"text-align:left;word-break:break-all;font-size:14px;line-height:1.6em;\"\u003e\n\u003cdiv\u003e \u003ch5\u003e\u003cb\u003e책소개\u003c\/b\u003e\u003c\/h5\u003e \u003c\/div\u003e \u003cdiv\u003e \u003cdiv\u003e \u003cdiv\u003e  많은 개발자들이 어렵게 느끼는 비동기 프로그래밍을 다양한 시각적 자료와 설명을 통해 누구나 쉽게 이해할 수 있도록 쓰인 책이다.\u003cbr\u003e안드로이드, 스프링 등 코틀린을 사용하는 개발자들 중 코루틴을 사용한 비동기 프로그래밍을 기초부터 심화까지 제대로 배워보고 싶은 독자들에게 추천한다.\u003cbr\u003e\u003cbr\u003e \u003c\/div\u003e \u003c\/div\u003e \u003cdiv\u003e \u003cul\u003e \u003cli\u003e 책의 일부 내용을 미리 읽어보실 수 있습니다.\u003cbr\u003e\u003cspan\u003e미리보기\u003c\/span\u003e\n\u003c\/li\u003e \u003c\/ul\u003e \u003c\/div\u003e \u003c\/div\u003e \",\"\u003cdiv\u003e \u003ch5\u003e\u003cb\u003e목차\u003c\/b\u003e\u003c\/h5\u003e \u003c\/div\u003e \u003cdiv\u003e \u003cdiv\u003e  \u003cb\u003e1장 스레드 기반 작업의 한계와 코루틴의 등장 \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e1.1. JVM 프로세스와 스레드\u003cbr\u003e1.2.\u003cbr\u003e단일 스레드의 한계와 멀티 스레드 프로그래밍\u003cbr\u003e1.2.1.\u003cbr\u003e단일 스레드 애플리케이션의 한계 \u003cbr\u003e1.2.2.\u003cbr\u003e멀티 스레드 프로그래밍을 통한 단일 스레드의 한계 극복 \u003cbr\u003e1.3.\u003cbr\u003e스레드, 스레드풀을 사용한 멀티 스레드 프로그래밍\u003cbr\u003e1.3.1.\u003cbr\u003eThread 클래스를 사용하는 방법과 한계 \u003cbr\u003e1.3.2.\u003cbr\u003eExecutor 프레임웍을 통해 스레드풀 사용하기\u003cbr\u003e1.3.3.\u003cbr\u003e이후의 멀티 스레드 프로그래밍과 한계 \u003cbr\u003e1.4.\u003cbr\u003e기존 멀티 스레드 프로그래밍의 한계와 코루틴\u003cbr\u003e1.4.1.\u003cbr\u003e기존 멀티 스레드 프로그래밍의 한계\u003cbr\u003e1.4.2.\u003cbr\u003e코루틴은 스레드 블로킹 문제를 어떻게 극복하는가?\u003cbr\u003e1.5.\u003cbr\u003e요약 \u003cbr\u003e\u003cbr\u003e\u003cb\u003e2장 코루틴 개발 환경 설정 \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e2.1.\u003cbr\u003e인텔리제이 아이디어 설치 및 둘러보기\u003cbr\u003e2.1.1.\u003cbr\u003e인텔리제이 아이디어 설치하기58\u003cbr\u003e2.2.\u003cbr\u003e코틀린 프로젝트 생성하고 화면 구성 살펴보기\u003cbr\u003e2.2.1.\u003cbr\u003e프로젝트 생성하기 \u003cbr\u003e2.2.2. IDE 구성 살펴보기\u003cbr\u003e2.3.\u003cbr\u003e첫 코루틴 실행하기 \u003cbr\u003e2.3.1.\u003cbr\u003e코루틴 라이브러리 추가하기\u003cbr\u003e2.3.2.\u003cbr\u003e첫 코루틴 실행하기\u003cbr\u003e2.4.\u003cbr\u003e코루틴 디버깅 환경 설정하기 \u003cbr\u003e2.4.1.\u003cbr\u003e실행 중인 스레드 출력하기 \u003cbr\u003e2.4.2.\u003cbr\u003e실행 중인 코루틴 이름 출력하기 \u003cbr\u003e2.4.3.\u003cbr\u003elaunch 사용해 코루틴 추가로 실행하기\u003cbr\u003e2.4.4.\u003cbr\u003eCoroutineName 사용해 코루틴에 이름 추가하기 \u003cbr\u003e2.5.\u003cbr\u003e요약 \u003cbr\u003e\u003cbr\u003e\u003cb\u003e3장 CoroutineDispatcher \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e3.1.\u003cbr\u003eCoroutineDispatcher란 무엇인가? \u003cbr\u003e3.1.1.\u003cbr\u003eCoroutineDispatcher의 동작 살펴보기 \u003cbr\u003e3.1.2.\u003cbr\u003eCoroutineDispatcher의 역할 \u003cbr\u003e3.2.\u003cbr\u003e제한된 디스패처와 무제한 디스패처 \u003cbr\u003e3.3.\u003cbr\u003e제한된 디스패처 생성하기 \u003cbr\u003e3.3.1.\u003cbr\u003e단일 스레드 디스패처 만들기 \u003cbr\u003e3.3.2.\u003cbr\u003e멀티 스레드 디스패처 만들기 \u003cbr\u003e3.4.\u003cbr\u003eCoroutineDispatcher 사용해 코루틴 실행하기 \u003cbr\u003e3.4.1.\u003cbr\u003elaunch의 파라미터로 CoroutineDispatcher 사용하기\u003cbr\u003e3.4.2.\u003cbr\u003e부모 코루틴의 CoroutineDispatcher 사용해 자식 코루틴 실행하기 \u003cbr\u003e3.5.\u003cbr\u003e미리 정의된 CoroutineDispatcher \u003cbr\u003e3.5.1.\u003cbr\u003eDispatchers.IO\u003cbr\u003e3.5.2.\u003cbr\u003eDispatchers.Default\u003cbr\u003e3.5.3.\u003cbr\u003elimitedParallelism 사용해 Dispatchers.Default 스레드 사용 제한하기\u003cbr\u003e3.5.4.\u003cbr\u003e공유 스레드풀을 사용하는 Dispatchers.IO와 Dispatchers.Default4\u003cbr\u003e3.5.5.\u003cbr\u003eDispatchers.Main \u003cbr\u003e3.6.\u003cbr\u003e요약\u003cbr\u003e\u003cbr\u003e\u003cb\u003e4장 코루틴 빌더와 Job \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e4.1.\u003cbr\u003ejoin을 사용한 코루틴 순차 처리\u003cbr\u003e4.1.1.\u003cbr\u003e순차 처리가 안 될 경우의 문제 \u003cbr\u003e4.1.2.\u003cbr\u003ejoin 함수 사용해 순차 처리하기 \u003cbr\u003e4.2.\u003cbr\u003ejoinAll을 사용한 코루틴 순차 처리 \u003cbr\u003e4.2.1.\u003cbr\u003ejoinAll 함수\u003cbr\u003e4.2.2.\u003cbr\u003ejoinAll 함수 사용해 보기\u003cbr\u003e4.3.\u003cbr\u003eCoroutineStart.LAZY 사용해 코루틴 지연 시작하기\u003cbr\u003e4.3.1.\u003cbr\u003e지연 시작을 살펴보기 위한 준비\u003cbr\u003e4.3.2.\u003cbr\u003eCoroutineStart.LAZY 사용해 코루틴 지연 시작하기\u003cbr\u003e4.4.\u003cbr\u003e코루틴 취소하기\u003cbr\u003e4.4.1.\u003cbr\u003ecancel 사용해 Job 취소하기\u003cbr\u003e4.4.2.\u003cbr\u003ecancelAndJoin을 사용한 순차 처리\u003cbr\u003e4.5.\u003cbr\u003e코루틴의 취소 확인\u003cbr\u003e4.5.1.\u003cbr\u003edelay를 사용한 취소 확인\u003cbr\u003e4.5.2.\u003cbr\u003eyield를 사용한 취소 확인 \u003cbr\u003e4.5.3.\u003cbr\u003eCoroutineScope.isActive를 사용한 취소 확인 \u003cbr\u003e4.6.\u003cbr\u003e코루틴의 상태와 Job의 상태 변수\u003cbr\u003e4.6.1.\u003cbr\u003eJob의 상태를 출력하는 함수 만들기 \u003cbr\u003e4.6.2.\u003cbr\u003e생성 상태의 코루틴 \u003cbr\u003e4.6.3.\u003cbr\u003e실행 중 상태의 코루틴\u003cbr\u003e4.6.4.\u003cbr\u003e실행 완료 상태의 코루틴 \u003cbr\u003e4.6.5.\u003cbr\u003e취소 중인 코루틴 \u003cbr\u003e4.6.6.\u003cbr\u003e취소 완료된 코루틴 \u003cbr\u003e4.6.7.\u003cbr\u003e상태 정리 \u003cbr\u003e4.7.\u003cbr\u003e요약 \u003cbr\u003e\u003cbr\u003e\u003cb\u003e5장 async와 Deferred \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e5.1.\u003cbr\u003easync 사용해 결괏값 수신하기 \u003cbr\u003e5.1.1.\u003cbr\u003easync 사용해 Deferred 만들기\u003cbr\u003e5.1.2.\u003cbr\u003eawait를 사용한 결괏값 수신 \u003cbr\u003e5.2.\u003cbr\u003eDeferred는 특수한 형태의 Job이다\u003cbr\u003e5.3.\u003cbr\u003e복수의 코루틴으로부터 결괏값 수신하기 \u003cbr\u003e5.3.1.\u003cbr\u003eawait를 사용해 복수의 코루틴으로부터 결괏값 수신하기 \u003cbr\u003e5.3.2.\u003cbr\u003eawaitAll을 사용한 결괏값 수신\u003cbr\u003e5.3.3.\u003cbr\u003e컬렉션에 대해 awaitAll 사용하기\u003cbr\u003e5.4.\u003cbr\u003ewithContext \u003cbr\u003e5.4.1.\u003cbr\u003ewithContext로 async-await 대체하기 \u003cbr\u003e5.4.2.\u003cbr\u003ewithContext의 동작 방식 \u003cbr\u003e5.4.3.\u003cbr\u003ewithContext 사용 시 주의점 \u003cbr\u003e5.5.\u003cbr\u003e요약 \u003cbr\u003e\u003cbr\u003e\u003cb\u003e6장 CoroutineContext \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e6.1.\u003cbr\u003eCoroutineContext의 구성 요소\u003cbr\u003e6.2.\u003cbr\u003eCoroutineContext 구성하기 \u003cbr\u003e6.2.1.\u003cbr\u003eCoroutineContext가 구성 요소를 관리하는 방법\u003cbr\u003e6.2.2.\u003cbr\u003eCoroutineContext 구성\u003cbr\u003e6.2.3.\u003cbr\u003eCoroutineContext 구성 요소 덮어씌우기\u003cbr\u003e6.2.4.\u003cbr\u003e여러 구성 요소로 이뤄진 CoroutineContext 합치기\u003cbr\u003e6.2.5.\u003cbr\u003eCoroutineContext에 Job 생성해 추가하기\u003cbr\u003e6.3.\u003cbr\u003eCoroutineContext 구성 요소에 접근하기\u003cbr\u003e6.3.1.\u003cbr\u003eCoroutineContext 구성 요소의 키\u003cbr\u003e6.3.2.\u003cbr\u003e키를 사용해 CoroutineContext 구성 요소에 접근하기 \u003cbr\u003e6.4.\u003cbr\u003eCoroutineContext 구성 요소 제거하기 \u003cbr\u003e6.4.1.\u003cbr\u003eminusKey 사용해 구성 요소 제거하기 \u003cbr\u003e6.4.2.\u003cbr\u003eminusKey 함수 사용 시 주의할 점 \u003cbr\u003e6.5.\u003cbr\u003e요약 \u003cbr\u003e\u003cbr\u003e\u003cb\u003e7장 구조화된 동시성 \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e7.1.\u003cbr\u003e실행 환경 상속 \u003cbr\u003e7.1.1.\u003cbr\u003e부모 코루틴의 실행 환경 상속\u003cbr\u003e7.1.2.\u003cbr\u003e실행 환경 덮어씌우기\u003cbr\u003e7.1.3.\u003cbr\u003e상속되지 않는 Job \u003cbr\u003e7.1.4.\u003cbr\u003e구조화에 사용되는 Job\u003cbr\u003e7.2.\u003cbr\u003e코루틴의 구조화와 작업 제어 \u003cbr\u003e7.2.1.\u003cbr\u003e취소의 전파\u003cbr\u003e7.2.2.\u003cbr\u003e부모 코루틴의 자식 코루틴에 대한 완료 의존성 \u003cbr\u003e7.3.\u003cbr\u003eCoroutineScope 사용해 코루틴 관리하기\u003cbr\u003e7.3.1.\u003cbr\u003eCoroutineScope 생성하기 \u003cbr\u003e7.3.2.\u003cbr\u003e코루틴에게 실행 환경을 제공하는 CoroutineScope\u003cbr\u003e7.3.3.\u003cbr\u003eCoroutineScope에 속한 코루틴의 범위\u003cbr\u003e7.3.4.\u003cbr\u003eCoroutineScope 취소하기 \u003cbr\u003e7.3.5.\u003cbr\u003eCoroutineScope 활성화 상태 확인하기\u003cbr\u003e7.4.\u003cbr\u003e구조화와 Job \u003cbr\u003e7.4.1.\u003cbr\u003erunBlocking과 루트 Job \u003cbr\u003e7.4.2.\u003cbr\u003eJob 구조화 깨기 \u003cbr\u003e7.4.3.\u003cbr\u003eJob 사용해 일부 코루틴만 취소되지 않게 만들기\u003cbr\u003e7.4.4.\u003cbr\u003e생성된 Job의 부모를 명시적으로 설정하기\u003cbr\u003e7.4.5.\u003cbr\u003e생성된 Job은 자동으로 실행 완료되지 않는다 \u003cbr\u003e7.5.\u003cbr\u003e요약 \u003cbr\u003e\u003cbr\u003e\u003cb\u003e8장 예외 처리 \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e8.1.\u003cbr\u003e코루틴의 예외 전파\u003cbr\u003e8.1.1.\u003cbr\u003e코루틴에서 예외가 전파되는 방식\u003cbr\u003e8.1.2.\u003cbr\u003e예제로 알아보는 예외 전파 \u003cbr\u003e8.2.\u003cbr\u003e예외 전파 제한 \u003cbr\u003e8.2.1.\u003cbr\u003eJob 객체를 사용한 예외 전파 제한 \u003cbr\u003e8.2.2.\u003cbr\u003eSupervisorJob 객체를 사용한 예외 전파 제한 \u003cbr\u003e8.2.3.\u003cbr\u003esupervisorScope를 사용한 예외 전파 제한 \u003cbr\u003e8.3.\u003cbr\u003eCoroutineExceptionHandler를 사용한 예외 처리\u003cbr\u003e8.3.1.\u003cbr\u003eCoroutineExceptionHandler 생성 \u003cbr\u003e8.3.2.\u003cbr\u003eCoroutineExceptionHandler 사용 \u003cbr\u003e8.3.3.\u003cbr\u003e처리되지 않은 예외만 처리하는 CoroutineExceptionHandler\u003cbr\u003e8.3.4.\u003cbr\u003eCoroutineExceptionHandler가 예외를 처리하도록 만들기\u003cbr\u003e8.3.5.\u003cbr\u003eCoroutineExceptionHandler는 예외 전파를 제한하지 않는다\u003cbr\u003e8.4.\u003cbr\u003etry catch문을 사용한 예외 처리\u003cbr\u003e8.4.1.\u003cbr\u003etry catch문을 사용해 코루틴 예외 처리하기 \u003cbr\u003e8.4.2.\u003cbr\u003e코루틴 빌더 함수에 대한 try catch문은 코루틴의 예외를 잡지 못한다\u003cbr\u003e8.5.\u003cbr\u003easync의 예외 처리\u003cbr\u003e8.5.1.\u003cbr\u003easync의 예외 노출 \u003cbr\u003e8.5.2.\u003cbr\u003easync의 예외 전파 \u003cbr\u003e8.6.\u003cbr\u003e전파되지 않는 예외\u003cbr\u003e8.6.1.\u003cbr\u003e전파되지 않는 CancellationException \u003cbr\u003e8.6.2.\u003cbr\u003e코루틴 취소 시 사용되는 JobCancellationException \u003cbr\u003e8.6.3.\u003cbr\u003ewithTimeOut 사용해 코루틴의 실행 시간 제한하기\u003cbr\u003e8.7.\u003cbr\u003e요약 \u003cbr\u003e\u003cbr\u003e\u003cb\u003e9장 일시 중단 함수 \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e9.1.\u003cbr\u003e일시 중단 함수와 코루틴\u003cbr\u003e9.1.1.\u003cbr\u003e일시 중단 함수란 무엇인가? \u003cbr\u003e9.1.2.\u003cbr\u003e일시 중단 함수는 코루틴이 아니다 \u003cbr\u003e9.1.3.\u003cbr\u003e일시 중단 함수를 별도의 코루틴상에서 실행하기\u003cbr\u003e9.2.\u003cbr\u003e일시 중단 함수의 사용 \u003cbr\u003e9.2.1.\u003cbr\u003e일시 중단 함수의 호출 가능 지점\u003cbr\u003e9.2.2.\u003cbr\u003e일시 중단 함수에서 코루틴 실행하기 \u003cbr\u003e9.3.\u003cbr\u003e요약 \u003cbr\u003e\u003cbr\u003e\u003cb\u003e10장 코루틴의 이해 \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e10.1.\u003cbr\u003e서브루틴과 코루틴\u003cbr\u003e10.1.1.\u003cbr\u003e루틴과 서브루틴 \u003cbr\u003e10.1.2.\u003cbr\u003e서브루틴과 코루틴의 차이 \u003cbr\u003e10.2.\u003cbr\u003e코루틴의 스레드 양보 \u003cbr\u003e10.2.1.\u003cbr\u003edelay 일시 중단 함수를 통해 알아보는 스레드 양보 \u003cbr\u003e10.2.2.\u003cbr\u003ejoin과 await의 동작 방식 자세히 알아보기 \u003cbr\u003e10.2.3.\u003cbr\u003eyield 함수 호출해 스레드 양보하기 \u003cbr\u003e10.3.\u003cbr\u003e코루틴의 실행 스레드 \u003cbr\u003e10.3.1.\u003cbr\u003e코루틴의 실행 스레드는 고정이 아니다\u003cbr\u003e10.3.2.\u003cbr\u003e스레드를 양보하지 않으면 실행 스레드가 바뀌지 않는다\u003cbr\u003e10.4.\u003cbr\u003e요약 \u003cbr\u003e\u003cbr\u003e\u003cb\u003e11장 코루틴 심화 \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e11.1.\u003cbr\u003e공유 상태를 사용하는 코루틴의 문제와 데이터 동기화 \u003cbr\u003e11.1.1.\u003cbr\u003e가변 변수를 사용할 때의 문제점\u003cbr\u003e11.1.2. JVM의 메모리 공간이 하드웨어 메모리 구조와 연결되는 방식 \u003cbr\u003e11.1.3.\u003cbr\u003e공유 상태에 대한 메모리 가시성 문제와 해결 방법\u003cbr\u003e11.1.4.\u003cbr\u003e공유 상태에 대한 경쟁 상태 문제와 해결 방법 \u003cbr\u003e11.2.\u003cbr\u003eCoroutineStart의 다양한 옵션들 살펴보기 \u003cbr\u003e11.2.1.\u003cbr\u003eCoroutineStart.DEFAULT \u003cbr\u003e11.2.2.\u003cbr\u003eCoroutineStart.ATOMIC \u003cbr\u003e11.2.3.\u003cbr\u003eCoroutineStart.UNDISPATCHED \u003cbr\u003e11.3.\u003cbr\u003e무제한 디스패처\u003cbr\u003e11.3.1.\u003cbr\u003e무제한 디스패처란?\u003cbr\u003e11.3.2.\u003cbr\u003e무제한 디스패처의 특징 \u003cbr\u003e11.4.\u003cbr\u003e코루틴의 동작 방식과 Continuation \u003cbr\u003e11.4.1.\u003cbr\u003eContinuation Passing Style\u003cbr\u003e11.4.2.\u003cbr\u003e코루틴의 일시 중단과 재개로 알아보는 Continuation \u003cbr\u003e11.4.3.\u003cbr\u003e다른 작업으로부터 결과 수신해 코루틴 재개하기\u003cbr\u003e11.5.\u003cbr\u003e요약 \u003cbr\u003e\u003cbr\u003e\u003cb\u003e12장 코루틴 단위 테스트 \u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e12.1.\u003cbr\u003e단위 테스트 기초\u003cbr\u003e12.1.1.\u003cbr\u003e단위 테스트란 무엇인가? \u003cbr\u003e12.1.2.\u003cbr\u003e테스트 환경 설정하기\u003cbr\u003e12.1.3.\u003cbr\u003e간단한 테스트 만들고 실행하기\u003cbr\u003e12.1.4.\u003cbr\u003e@BeforeEach 어노테이션을 사용한 테스트 환경 설정 \u003cbr\u003e12.1.5.\u003cbr\u003e테스트 더블을 사용해 의존성 있는 객체 테스트하기 \u003cbr\u003e12.2.\u003cbr\u003e코루틴 단위 테스트 시작하기 \u003cbr\u003e12.2.1.\u003cbr\u003e첫 코루틴 테스트 작성하기 \u003cbr\u003e12.2.2.\u003cbr\u003erunBlocking을 사용한 테스트의 한계\u003cbr\u003e12.3.\u003cbr\u003e코루틴 테스트 라이브러리\u003cbr\u003e12.3.1.\u003cbr\u003e코루틴 테스트 라이브러리 의존성 설정하기\u003cbr\u003e12.3.2.\u003cbr\u003eTestCoroutineScheduler 사용해 가상 시간에서 테스트 진행하기\u003cbr\u003e12.3.3.\u003cbr\u003eTestCoroutineScheduler를 포함하는 StandardTestDispatcher\u003cbr\u003e12.3.4.\u003cbr\u003eTestScope 사용해 가상 시간에서 테스트 진행하기\u003cbr\u003e12.3.5.\u003cbr\u003erunTest 사용해 테스트 만들기\u003cbr\u003e12.4.\u003cbr\u003e코루틴 단위 테스트 만들어 보기\u003cbr\u003e12.4.1.\u003cbr\u003e코루틴 단위 테스트를 위한 코드 준비하기\u003cbr\u003e12.4.2.\u003cbr\u003eFollowerSearcher 클래스 테스트 작성하기\u003cbr\u003e12.5.\u003cbr\u003e코루틴 테스트 심화\u003cbr\u003e12.5.1.\u003cbr\u003e함수 내부에서 새로운 코루틴을 실행하는 객체에 대한 테스트\u003cbr\u003e12.5.2.\u003cbr\u003ebackgroundScope를 사용해 테스트 만들기\u003cbr\u003e12.6.\u003cbr\u003e요약 \u003c\/div\u003e \u003cdiv\u003e\u003c\/div\u003e \u003c\/div\u003e \",\"\u003cdiv\u003e \u003ch5\u003e\u003cb\u003e상세 이미지\u003c\/b\u003e\u003c\/h5\u003e \u003c\/div\u003e \u003cdiv\u003e \u003cdiv\u003e \u003cimg src=\"https:\/\/image.yes24.com\/momo\/TopCate4758\/MidCate001\/475705202.jpg\" border=\"0\" alt=\"상세 이미지 1\"\u003e \u003c\/div\u003e \u003c\/div\u003e \",\"\u003cdiv\u003e \u003ch5\u003e\u003cb\u003e출판사 리뷰\u003c\/b\u003e\u003c\/h5\u003e \u003c\/div\u003e \u003cdiv\u003e \u003cdiv\u003e  \u003cb\u003e이 책에서 다루는 내용\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e- 풍부한 시각적 자료를 통해 초보 개발자라도 코루틴을 사용한 비동기 프로그래밍을 쉽게 이해할 수 있도록 설명한다.\u003cbr\u003e- 코루틴 이전의 멀티 스레드 프로그래밍이 어떤 한계를 가졌는지, 코루틴이 그 한계를 어떻게 극복했는지를 설명한다.\u003cbr\u003e- CoroutineContext를 구성하는 다양한 구성 요소의 활용 방법을 설명한다.\u003cbr\u003e- 코루틴의 구조화된 동시성과 예외 처리 방법을 알아보고 비동기 프로그래밍을 안정적으로 하는 방법을 설명한다.\u003cbr\u003e- 코루틴의 동작 방식에 대한 심층적인 이해를 위한 자료를 제공한다.\u003cbr\u003e- 코루틴 유닛 테스트를 작성하는 방법에 대해 기초부터 심화까지 설명한다.\u003cbr\u003e\u003cbr\u003e\u003cb\u003e이 책의 대상 독자\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e- 코틀린 코루틴에 대한 지식을 기초부터 핵심까지 탄탄하게 쌓고 싶은 개발자\u003cbr\u003e- 코루틴의 다양한 기능들을 심층적으로 이해해 기술적으로 성장하고 싶은 개발자\u003cbr\u003e- 코루틴의 구조화된 동시성과 예외 처리를 이해해 비동기 프로그래밍을 보다 안정적으로 하는 방법을 배우고 싶은 개발자\u003cbr\u003e- 코루틴의 동작 원리를 이해하고 싶은 개발자\u003cbr\u003e- 코루틴 유닛 테스트를 작성하는 방법을 배우고 싶은 개발자\u003cbr\u003e\u003cbr\u003e\u003cb\u003e이 책의 구성\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e1장에서는 JVM의 프로세스, 스레드에 대해 다룬다.\u003cbr\u003e기존 멀티 스레드 프로그래밍이 어떤 방식으로 변화했고, 코루틴이 기존 멀티 스레드 프로그래밍의 한계를 어떻게 극복했는지 알아본다.\u003cbr\u003e2장에서는 인텔리제이 아이디어를 사용해 코루틴 개발 환경을 설정하는 방법에 대해 다룬다.\u003cbr\u003e개발 환경을 설정한 후에는 첫 코루틴을 실행해 보고, 어떤 스레드에서 코루틴이 실행 중인지 확인하는 방법에 대해서도 알아본다.\u003cbr\u003e3장에서는 CoroutineDispatcher에 대해 다룬다.\u003cbr\u003e제한된 디스패처를 만드는 방법과 제한된 디스패처를 사용해 코루틴을 실행시키는 방법을 설명한다.\u003cbr\u003e코루틴 라이브러리는 사용자의 편의를 위해 미리 정의된 CoroutineDispatcher를 제공하므로 미리 정의된 CoroutineDispatcher에는 어떤 종류가 있고 언제 사용해야 하는지 살펴본다.\u003cbr\u003e4장에서는 코루틴 빌더 함수인 launch와 launch 호출 시 반환되는 Job 객체를 다룬다.\u003cbr\u003e코루틴은 일시 중단이 가능하므로 작업 간의 순차 처리가 매우 중요하다.\u003cbr\u003eJob 객체의 join 함수를 사용해 코루틴 간의 순차 처리 방법과 Job 객체를 통해 코루틴의 상태를 조작하고 상태 값을 확인하는 방법에 대해 알아본다.\u003cbr\u003e\u003cbr\u003e5장에서는 async 코루틴 빌더에 대해 설명한다.\u003cbr\u003easync와 await를 사용해 코루틴으로부터 반환값을 받는 방법에 대해 알아보고, 코루틴을 실행 중인 스레드의 변경을 위해 withContext를 사용하는 방법에 대해서도 살펴본다.\u003cbr\u003e6장에서는 CoroutineContext에 대해 알아본다.\u003cbr\u003eJob, CoroutineDispatcher, CoroutineName이 CoroutineContext의 구성 요소라는 것을 이해하고, CoroutineContext의 구성 요소를 결합하거나 분리하는 방법을 살펴본다.\u003cbr\u003e7장에서는 코루틴을 안전하게 사용하게 위해 구조화된 동시성이 어떻게 사용되는지 부모 코루틴과 자식 코루틴의 관계를 중심으로 알아본다.\u003cbr\u003e이후에는 구조화에 중요한 역할을 하는 CoroutineScope를 알아보고, 구조화의 중심에 Job이 있다는 것을 살펴본다.\u003cbr\u003e8장에서는 예외 처리에 대해 다룬다.\u003cbr\u003e코루틴에서 예외가 발생했을 때 어떻게 전파되는지 알아보고 예외 전파가 구조화된 동시성으로 인해 일어난다는 것을 확인한다.\u003cbr\u003e그리고 supervisorScope나 SupervisorJob을 사용해 예외가 전파될 수 있는 범위를 제한하는 방법에 대해 다룬다.\u003cbr\u003e추가로 try catch문 또는 Coroutine ExceptionHandler를 사용해 전파된 예외를 처리하는 방법에 대해서도 설명한다.\u003cbr\u003e\u003cbr\u003e9장에서는 일시 중단 함수에 대해 다룬다.\u003cbr\u003e일시 중단 함수가 재사용이 가능한 코드 블록임을 이해하고, 일시 중단 함수를 사용할 때 주의할 점에 대해 알아본다.\u003cbr\u003e이후에는 일시 중단 함수를 호출할 수 있는 지점에 대해 알아보고, 일시 중단 함수 내부에서 구조화를 깨지 않는 CoroutineScope를 생성해 새로운 자식 코루틴을 실행하는 방법에 대해서도 살펴본다.\u003cbr\u003e10장에서는 앞서 다룬 내용을 바탕으로 코루틴에 대한 이해를 더욱 깊게 만드는 주제들을 다룬다.\u003cbr\u003e서브루틴과 코루틴의 차이를 알아보고, 코루틴이 협력적으로 동작하는 데 스레드를 양보하는 것이 왜 중요하고 코루틴이 일시 중단 후 재개될 때 어떤 일이 일어나는지 살펴본다.\u003cbr\u003e11장에서는 코루틴의 심화 주제들을 알아본다.\u003cbr\u003e멀티 스레드 환경에서 공유 상태를 사용하는 복수의 코루틴이 있을 때의 데이터 동기화 문제, CoroutineStart 옵션을 통해 코루틴의 실행 방법을 바꾸는 방법, 무제한 디스패처가 동작하는 방식, 코루틴의 일시 중단과 재개가 일어나는 원리에 대해 설명한다.\u003cbr\u003e12장에서는 코루틴 단위 테스트에 대해 다룬다.\u003cbr\u003e코루틴 테스트 라이브러리를 사용하는 방법과 코루틴 단위 테스트를 어떻게 진행하면 좋을지에 대해 알아본다.\u003cbr\u003e\u003cbr\u003e\u003cb\u003e지은이의 말\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e개발자들은 프로그램을 만들며 비동기 프로그래밍이 필요한 수많은 상황과 맞닥뜨리게 된다.\u003cbr\u003e그 과정에서 수많은 난관을 거쳐 각 상황에 맞는 솔루션을 직접 찾아가며 성장하고 비동기 프로그래밍에 익숙해진다.\u003cbr\u003e성능 좋은 프로그램을 만드는 데는 비동기 프로그래밍이 필수적이므로 실력 있는 개발자가 되기 위해서는 비동기 프로그래밍에 대한 이해가 필요하다.\u003cbr\u003e하지만 비동기 프로그래밍에 대한 학습 자료는 많지 않다.\u003cbr\u003e또한 그 학습 자료들도 대부분 어느 정도 실력이 갖춰진 개발자를 대상으로 작성돼 있어 이제 막 개발을 시작한 개발자들은 이해하기 어렵다.\u003cbr\u003e코틀린 코루틴 또한 예외가 아니다.\u003cbr\u003e코루틴은 성능과 안정성, 가독성을 모두 갖춘 비동기 솔루션으로 향후 오랜 기간 동안 코틀린 비동기 프로그래밍의 표준이 될 것이 명백하다.\u003cbr\u003e이에 따라 많은 개발자가 실무에서 코루틴을 사용하기 시작했지만, 여전히 학습 자료가 부족하고 특히 초보 개발자들은 이해하기 어려운 자료가 대부분이다.\u003cbr\u003e\u003cbr\u003e필자는 그동안 개발자들이 코루틴에 쉽게 접근할 수 있도록 여러 가지 시도를 했다.\u003cbr\u003e영어로 된 책과 강의, 공식 문서 등을 정리한 내용을 시리즈로 기술 블로그에 올리기도 했고, 코루틴 공식 기술 문서를 한국어로 번역해 웹에 배포하기도 했다.\u003cbr\u003e시도들은 좋은 반응을 얻었지만 코루틴을 체계적으로 다루는 데는 한계가 있었다.\u003cbr\u003e그러던 중 책을 통해 코루틴을 보다 체계적으로 전달할 수 있겠다는 생각에 집필을 시작했다.\u003cbr\u003e이 책에서는 코루틴을 체계적으로 다룰 것이다.\u003cbr\u003e기존의 멀티 스레드 프로그래밍은 어떤 특징을 가졌는지, 코루틴이 기존 멀티 스레드 프로그래밍의 한계를 어떻게 극복했는지, 코루틴의 구성 요소는 무엇이고 어떻게 사용하는지 등을 다룬다.\u003cbr\u003e이 책을 통해 단순히 코루틴을 어떻게 사용하는지에 대한 지식을 넘어 코루틴이 무엇을 해결하고자 했는지 알 수 있다.\u003cbr\u003e그리고 코틀린 언어만 알고 있다면 이 모든 내용을 이해할 수 있도록 구성했다.\u003cbr\u003e이 책을 통해 많은 개발자들이 코루틴에 대해 깊이 이해할 수 있게 되길 바란다.\u003cbr\u003e\n\u003c\/div\u003e \u003cdiv\u003e\u003c\/div\u003e \u003c\/div\u003e \"]\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003cdiv style=\"width:95%;padding-top:20px;padding-bottom:20px\"\u003e\n\u003cdiv style=\"text-align:left;font-size:16px;font-weight:bold;padding-bottom:20px\"\u003eGOODS SPECIFICS\u003c\/div\u003e\n\u003cdiv style=\"text-align:left;font-size:14px;line-height:1.6em;\"\u003e\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e- \u003cstrong\u003e발행일 : \u003c\/strong\u003e2024년 02월 29일\u003c\/div\u003e\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e- \u003cstrong\u003e쪽수, 무게, 크기 : \u003c\/strong\u003e452쪽 | 188*235*21mm\u003c\/div\u003e\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e- \u003cstrong\u003eISBN13 : \u003c\/strong\u003e9791161758251\u003c\/div\u003e\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e- \u003cstrong\u003eISBN10 : \u003c\/strong\u003e1161758259\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ccenter\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003cspan\u003e\u003c\/span\u003e\n\u003c\/center\u003e\n\u003c\/center\u003e","brand":"LIBRAIRIE COREENNE","offers":[{"title":"Default Title","offer_id":43893259894826,"sku":"138578","price":44.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0683\/2750\/5962\/files\/16e08bfc71f9a5fd777e0d5aa6f0dadf.jpg?v=1765394454","url":"https:\/\/librairie.coreenne.fr\/ko\/products\/138578","provider":"LIBRAIRIE COREENNE","version":"1.0","type":"link"}