코틀린 언어에서 자체적으로 지원하는 부분(컴파일러의 지원과 코틀린 기본 라이브러리의 요소)코틀린 코루틴 라이브러리(kotlinx.coroutines)코루틴은 두 가지로 구성되어 있다. 코틀린 언어 차원에서는 자유도를 보장하기 위해 코루틴을 최소한으로 지원하고 있다.다른 프로그래밍 언어에서 동시성을 구현한 스타일을 이식 하기 위해 사용할 수 있지만, 직접 다루기 쉽지는 않다.그 예로 suspendCoroutine()이나 Continuation 등이 있다.애플리케이션 개발자들보다는 라이브러리 개발자들에게 적합하다. 언어 차원에서 지원하는 것과 별개로 kotlinx.coroutines 라이브러리가 있다.이 라이브러리를 사용하려면 프로젝트에 별도로 의존성을 추가해야 한다.라이브러리는 코틀린 언어 차원에서 코루..

Continuation 전달 방식Continuation은 함수에서 함수로 인자를 통해 전달된다. Continuation은 마지막 파라미터로 전달된다.suspend fun getUser(): User?suspend fun setUser(user: User)suspend fun checkAvailability(flight: Flight): Boolean위 중단 함수의 실제 함수 시그니처는 아래와 같다.fun getUser(continuation: Continuation): Any?fun setUser(user: User, continuation: Continuation): Anyfun checkAvailability( flight: Flight, continuation: Continuation,)..
중단 함수는 코틀린 코루틴의 핵심이다.코루틴을 중단한다는 건 실행을 중간에 멈추는 것을 의미한다.코루틴은 중단되었을 때 Continuation 객체를 반환한다. Continuation을 이용하면 멈췄던 곳에서 다시 코루틴을 실행할 수 있다.코루틴과 반대로 스레드는 저장이 불가능하고 멈추는 것만 가능하다.코루틴과 스레드는 확연히 다르다. 코루틴이 훨씬 강력한 도구다. 중단했을 때 코루틴은 어떤 자원도 사용하지 않는다.코루틴은 다른 스레드에서 시작할 수 있고, Continuation 객체는 직렬화와 역직렬화가 가능하며 다시 실행될 수 있다. 재개중단 함수는 말 그대로 코루틴을 중단할 수 있는 함수다.즉, 중단 함수가 반드시 코루틴이나 다른 중단 함수에 의해 호출되어야 한다. suspend fun mai..

왜 중단이 필요한지, 중단이 어떤 것인지 알아보기 위해 시퀀스의 작동 방식과 시퀀스 빌더를 알아보자. 시퀀스의 특징 코틀린에서는 제너레이터 대신 시퀀스를 생성 할 때 사용하는 시퀀스 빌더를 제공한다.코틀린의 시퀀스는 List나 Set과 같은 컬렉션이랑 비슷한 개념이지만, 필요할 때마다 값을 하나씩 계산하는 지연(lazy) 처리를 한다.요구되는 연산을 최소한으로 수행한다.무한정이 될 수 있다. (-> while(true))메모리 사용이 효율적이다.sequence()라는 함수를 이용해 값을 순차적으로 계산하고 필요할 때 반환하는 빌더를 정의한다.시퀀스의 람다 표현식 내부에서는 yield() 함수를 호출하여 시퀀스의 다음 값을 생성한다.val seq = sequence { yield(l) yiel..

코루틴 장점멀티플랫폼에서 작동시킬 수 있기 때문에 코틀린을 사용하는 모든 플랫폼에서 사용할 수 있다.기존 코드 구조를 광범위하게 뜯어고치지 않고 코루틴을 도입할 수 있다. 안드로이드에서의 코루틴 사용흔한 애플리케이션 로직은 다음과 같다.하나 이상의 소스(API, 뷰 구성요소, 데이터베이스, 설정, 다른 애플리케이션)로부터 데이터를 얻어온다. 데이터를 처리한다.가공된 데이터로 무엇인가를 한다. (화면에 보여주기, 데이터베이스에 저장, API로 전송) 기존의 구현 방식과 코루틴을 사용한 예제를 비교하여 두 방법이 어떻게 다른지 알아보자.예제 상황 - API로 뉴스를 가져와서 정렬한 후, 화면에 띄운다. 1) 가장 간단한 방법fun onCreate() { val news = getNewsFromApi()..