💡 코루틴 라이브러리를 활용하는 kotlin.coroutines에서 사용하는 다양한 코루틴 빌더에 대하여 학습하였습니다.코루틴 빌더중단 함수는 컨티뉴에이션 객체를 다른 함수로 전달해야 합니다.즉 중단 함수 → 일반 함수 호출은 가능하지만, 일반 함수 → 중단 함수 호출은 불가능합니다.모든 중단 함수는 또 다른 중단 함수에 의해 호출되어야 하며, 이는 앞서 호출한 중단 함수 또한 마찬가지입니다.중단 함수를 연속으로 호출하면 시작되는 지점이 반드시 있습니다.코루틴 빌더(coroutine builder)가 그 역할을 하며, 일반 함수와 중단 가능한 세계를 연결시키는 다리 역할을 합니다.launchrunBlockingasynclaunch 빌더launch는 thread 함수를 호출하여 새로운 스레드를 시작하는 ..
💡 코틀린 자체 언어의 코루틴(지원)과 코틀린 코루틴 라이브러리(라이브러리)의 차이에 대하여 학습하였습니다. 코루틴 : 언어 차원에서 지원 vs 라이브러리코루틴은 두 가지 개념으로 생각할 수 있습니다.코틀린 언어에서 자체적으로 지원하는 부분코틀린 코루틴 라이브러리둘은 같은 개념으로 보이지만 큰 차이가 있습니다.코틀린 언어에서 지원코틀린 언어에서 자체적으로 지원하는 부분은 아래와 같은 특징이 있습니다.컴파일러의 지원, 코틀린 기본 라이브러리의 요소자유도를 보장하기 위해 코루틴을 최소한으로 지원기본 라이브러리에 포함되어 있으며, kotlin.coroutines 패키지에 포함되어 있음직접 사용하기는 어려움모든 동시성 스타일 허용코틀린 코루틴 라이브러리kotlinx.coroutines 라이브러리를 추가하는 방..
💡 실제 코루틴 내부가 어떻게 작동하는지 이해하기 위한 학습입니다. 코루틴의 실제 구현?중단 함수는 함수가 시작할 때와 중단 함수가 호출되었을 때 상태를 가진다는 점에서 상태 머신(state machine)과 비슷합니다.*state machine : 하나의 상태만을 가지는 추상 기계컨티뉴에이션(continuation) 객체는 상태를 나타내는 숫자와 로컬 데이터를 가지고 있습니다.함수의 컨티뉴에이션 객체가 이 함수를 부르는 다른 함수의 컨티뉴에이션 객체를 장식(Decorate)이라고 합니다.컨티뉴에이션 객체는 실행을 재개하거나 재개된 함수를 완료할 때 사용되는 콜 스택으로 사용됩니다.컨티뉴에이션 전달 방식 (CPS)continuation-passing style프로그램의 흐름을 제어하기 위해 contin..
💡 코루틴에서 중단이 어떻게 동작하는지 학습하였습니다. 중단은 어떻게 작동할까?중단 함수는 코틀린 코루틴의 핵심이 됩니다.코루틴을 중단한다는 것은 실행을 중간에 멈추는 것을 의미합니다.체크포인트에 게임을 저장하고 다른 게임을 동작하는 것과 같으며, 사용자와 컴퓨터는 각각 다른 일에 집중할 수 있습니다.게임을 재개할 경우 저장한 체크포인터에서 실행한다면 이전에 종료했던 순간부터 게임을 즐길 수 있습니다.코루틴은 중단되었을 때 Continuation 객체를 반환합니다.스레드와의 차이점은?스레드는 저장이 불가능하고, 멈추는 것만 가능합니다.코루틴이 Continuation 객체를 반환하여 멈췄던 곳에서 다시 코루틴을 시작하지만 스레드는 저장이 불가능합니다.코루틴은 또한 중단했을 때 어떤 자원도 사용하지 않으며..
💡 시퀸스 빌더에 대해 알아보고, 중단이 왜 필요한지 학습하였습니다.시퀀스 빌더코틀린의 시퀀스는 List나 Set과 같은 컬렉션이랑 비슷한 개념이지만, 필요한 값을 하나씩 계산하는 지연(lazy) 처리를 합니다.요구되는 연산을 최소한으로 수행무한정이 될 가능성 존재메모리 사용이 효율적!코틀린에서는 시퀸스보다 더 좋은 개념인 flow builder를 제공하지만, 이해를 위해서 시퀀스의 개념을 먼저 학습하였습니다.순차적 계산과 반환val seq = sequence { yield(1) yield(2) yield(3)}fun main() { for (num in seq) { print(num) }}위 코드에 사용된 sequence 함수는 DSL 코드입니다.인자로 수신 객..
💡 다양한 비동기 처리 방법에 대하여 알아보고, 예제를 통해서 학습하였습니다.코투린이 없다면?일반적인 비동기 로직일반적인 프론트엔드(안드로이드) 단에서 애플리케이션 로직을 구현하는 방법은 아래와 같습니다.다양한 소스로부터 데이터를 받음API, 뷰 구성요소, 데이터베이스, 다른 앱데이터 처리가공된 데이터로 작업뷰 동기화데이터베이스 저장API로 전송일반적인 비동기 연산 라이브러리는 아래와 같이 사용됩니다.fun onCreate() { val news = getNewsFromApi() val sortedNews = news .sortedByDescending { it.publishedAt } view.showNews { sortedNews }}안드로이드에서는 하나의 앱에서 뷰를 ..