도서/코틀린 코루틴24 2장 코루틴 라이브러리 - Coroutine Buidler 개요 모든 중단 함수에서 일반 함수를 호출하는 것은 문제가 없지만, 일반 함수에서 중단 함수를 호출할 수는 없다. 모든 중단 함수는 다른 중단함수에서 호출이 되어야 한다. 중단 함수는 어떻게 시작할 수 있을까? 바로 Coroutine Builder를 통해 시작할 수 있다. launch builder launch builder 가 동작하는 방식은 개념적으로 thread 함수를 사용해서 thread 를 시작하는 것 과 비슷하다. 독립적으로 코루틴이 실행이 되며 아래 예제와 같이 사용할 수 있다. fun main() { GlobalScope.launch { delay(1000L) println("World!") } GlobalScope.launch { delay(1000L) println("World!") }.. 2024. 2. 3. 코틀린 코루틴 이해하기 + 코루틴 실전 대입하기 해당 글은 사내에서 세미나를 한 것을 정리한 것이다. 핵심목표 코루틴의 작동 방식에 대해 간략하게 이해하기 기존에 사용하던 코루틴의 적절한 사용 여부 확인하기 잘못 사용된 경우, 그 수정 방법에 대해 고민하기 코루틴을 배워야 하는 이유? 예시를 들어보자. 아래 예시는 AP로부터 뉴스를 가지고 와서 정렬한 다음, 스크린에 띄우는 로직을 구현하는 경우다. fun onCreate() { val news = getNewsFromApi() val sortedNews = news .sortedByDescending{ it.publishedAt } view.showNews(sortedNews) } 위의 예제는 안타깝게도 위와 같은 방식으로 개발할 수 없다. 이유는 안드로이드에서는 하나의 앱에서 뷰를 다루는 스레드가 .. 2024. 1. 23. 1장 코틀린 코루틴 이해하기 - 중단은 어떻게 작동할까? 시퀀스 빌더 시퀀스 빌더는 시퀀스를 만드는 도구이다. 시퀀스 빌더를 사용하면, 단계별로 데이터를 추가하면서 시퀀스를 구성할 수 있다. 예를 들어, yield 함수를 사용하면 하나의 요소를 시퀀스에 추가할 수 있고, yieldAll 함수를 사용하면 여러 요소를 한번에 추가할 수 있다. 간단히 말하면, 시퀀스 빌더는 단계별로 데이터를 추가하면서 '지연 계산'이 가능한 시퀀스를 만드는 도구이다. 시퀀스란 시퀀스는 코틀린에서 지원하는 특별한 종류의 컬렉션이다. 시퀀스의 주요 특징은 '지연 계산'이다. 즉, 시퀀스의 각 요소는 필요할 때까지 계산이 미루어지며, 이는 큰 데이터 셋을 다룰 때 메모리 사용량을 줄여준다. ※ 컬렉션(Collection) : 여러 개의 데이터를 그룹으로 관리할 수 있는 데이터 구조 특징.. 2024. 1. 9. 1장 코틀린 코루틴 이해하기 - 코틀린 코루틴을 배워야 하는 이유 코틀린 코루틴을 배워야 하는 이유 예시를 들어보자. 아래 예시는 AP로부터 뉴스를 가지고 와서 정렬한 다음, 스크린에 띄우는 로직을 구현하는 경우다. fun onCreate() { val news = getNewsFromApi() val sortedNews = news .sortedByDescending{ it.publishedAt } view.showNews(sortedNews) } 위의 예제는 안타깝게도 위와 같은 방식으로 개발할 수 없다. 이유는 안드로이드에서는 하나의 앱에서 뷰를 다루는 스레드가 단 하나만 존재하기 때문에 Main쓰레드는 블로킹되서는 안된다. 때문에 getNewsFromApi() 함수가 쓰레드를 블로킹 할 것이고, ANR 이 생길 것 이다. 위의 문제를 해결하기 위해 아래와 같이 .. 2024. 1. 8. Retrofit 과 Coroutine 간의 Viewmodel에선 Dispacher.IO로 전환해야 할까? 요즘 코루틴을 공부하며 서버 통신 및 내부 저장은 Dispacher.IO안에서 실행 한 후 Main으로 넘겨줘 ui에 반영해준다는 말을 지겹게 들었다. 이유는 Dispacher.IO는 필요에 따라 추가적으로 스레드를 더 생성하거나 줄일 수 있으며 최대 64개까지 생성이 가능하기 때문이라고 한다. 또한 Main을 점유하고 있으면 UI에서 작업하기에 ANR이 발생 할 수 있다고 한다. 그래서 구글에 나온 예시 코드를 보면 ViewModel.scope 안에 Dispacher.IO를 감싼 형태거나 먼저 Dispacher.IO 에서 코루틴 스코프를 설정하여 데이터를 가져온 후 내부에서 Dispacher.Main 으로 감싼 형태를 볼 수 있다. 이후 UseCase - Reopository - DataSorce - .. 2023. 11. 30. [DroidKnights 2023] 김준비 - Coroutine Deep Dive - Android 실전편 이번 글은 DroidKnights 2023에 나온 김준비님의 Coroutine Deep Dive의 내용을 정리한 글입니다. What is Coroutine? Routine : 컴퓨터 프로그램의 일부로써 특정한 일을 실행하기 위한 일련의 명령 SubRoutine? 프로그램 가운데 하나 이상의 장소에서 필요할 때마다 되풀이 해서 사용할 수 있는 부분적 프로그램이며 실행 후에는 메인 루틴이 호출한 장소로 되돌아간다. fun a() { b() c() } Coroutine 이란? 일시 중단(suspend)과 재개(resume)가 가능한 루틴이며 특정 Thread에 결합되지 않으며, 하나의 Thread에서 중단하고 다른 Thread에서 재개 가능한 부분적 프로그래밍이다. How does suspension.. 2023. 11. 14. Coroutine, Thread 와의 차이와 그 특징 Coroutine, Thread 와의 차이와 그 특징 처음 Kotlin 를 사용하던 중에 비동기 처리를 위해 Coroutine 개념을 마주했었습니다. 동기란 요청을 보낸 후 요청에 대한 반환값을 얻기 이전까지 대기하는걸 의미하고, 비동기는 그 대기시간동안 aaronryu.github.io Process & Thread Process: Program 이 메모리에 적재되어 실행되는 인스턴스 Thread: Process 내 실행되는 여러 흐름의 단위 먼저 Thread 는 Process 보다 작은 단위의 실행 인스턴스로만 알고 있는데, 메모리 영역도 조금 다르다. Process 는 독립된 메모리 영역(Heap)을 할당받고 각 Thread도 독립된 메모리 영역(Stack)을 할당받는다. Thread 는 본질적으로.. 2023. 7. 17. Coroutine 완벽 정리 면접 공부를 하면서 Coroutine을 정말 어설프게 써왔던 내 자신을 반성하며 다시한번 잘 정리해보도록 해보자. Coroutine이란 쓰레드가 아니고 쓰레드와 비교하면 메모리를 덜쓰고오버핸드가 적은 비동기 프로그램을 실행 할 수 있는 모듈 코루틴은 AsyncTask라는 비동기 프로그래밍이 메모리 누수등 어려 문제가 생겨 API 30부터 deprecated 되었다. 이후, 구글에서는 코루틴을 원장하게 되었다. 먼저 코루틴을 알아 보기전에 루틴이란 개념에 대해 알아보도록 하자. 프로그램은 메인루틴, 서브 루틴 흐름의 루틴이 존재한다. 메인루틴은 프로그램에서 메인함수 main() 에 진입했을때 위에서 부터 아래로 순차적으로 실행되는 전체적인 흐름이고 서브 루틴은 메인 루틴이 실행되다 개별 함수를 만나면 잠시.. 2023. 2. 14. Thread VS Coroutine 나는 코틀린을 사용하다보니 코루틴을 사용하는데 이를 가지고 비동기 처리를 했다. 하지만 쓰레드와 비슷한 동작을 하지만 다르다고 한다. 그 차이점을 작성해보고자 한다. 그전에 잠깐 기본 CS에 대해 알아보도록 하자. Process : 보조기억장치의 '프로그램'이 메모리 상으로 적재되어 실행되면 '프로세스'가 된다. Thread : 같은 Process 내에서 실행되는 여러 작업 (흐름)의 단위 동시성 (Concurrency) 동시성 프로그래밍은 말 그대로 동시에 여러 작업을 수행하는 것이다. 하지만 눈으로 보기에 동시에 실행되는 것이지, 사실 시분할(Interleaving) 기법을 활용하여 여러 작업을 조금씩 나누어서 번갈아가며 실행하는 것이다. 위 예제를 살펴보면, Task 1 과 Task 2 를 잘개 쪼.. 2022. 9. 29. 이전 1 2 다음