본문 바로가기

Android169

[Android] 중단(suspend)함수란 무엇이고 어떻게 동작할까? (feat. delay()) 중단(suspend)는 코루틴에서 어떻게 작동되는가?코루틴을 suspending 한다는 것은, 코루틴을 중간에 일시 정지하는 것을 의미합니다. 이것은 비디오 게임을 중간에 멈췄다가 다시 실행하는 것과 유사합니다. 코루틴을 일시 정지 하면 Continuation 객체에게 지금까지 실행한 정보(로컬 변수, 현재 까지 실행된 라인 등)들을 담고, 함수에서 빠져나옵니다. 그리고 다른 함수를 수행하다가 resumeWith() 을 호출 받고 다시 이전 함수를 처리하는 식으로, 일시정지를 구현합니다.  재개(Resume)코루틴 내부에서 일시 중지를 하고 싶다면, suspend 함수를 호출해야 일시 중지가 됩니다.하나의 예를 통해 알아보도록 하겠습니다.suspend fun main() { println("befo.. 2025. 2. 5.
[Android] runBlocking을 왜 주의해서 써야할까? (feat. Deadlock) 시작하기전에 Kotlin은 Android 개발에서 널리 사용되며, 비동기 및 논블로킹 프로그래밍을 지원하는 코루틴 기능을 제공합니다. 코루틴은 launch, async, runBlocking 같은 빌더로 시작할 수 있습니다. 이 중 runBlocking은 실행되는 스레드를 차단하기 때문에 Android의 메인 스레드에서 사용하면 UI 멈춤이나 ANR(Application Not Responding) 오류를 유발할 수 있습니다. 이 글에서는 runBlocking의 내부 메커니즘과 Android 개발 시 주의해야 할 사례들을 살펴보겠습니다.   runBlocking을 살펴보자runBlocking으로 작성하고, 10초의 delay를 걸어주었습니다. 이 코드는 Android UI에서 호출된 코드입니다.clas.. 2025. 2. 3.
[Android] Coroutine 왜 스레드보다 가볍다고 할까? 코루틴은 왜 스레드 보다 가볍다고 할까?코루틴 하나가 새로 생성되어 실행된다는 것이 그와 동시에 새로운 스레드 또한 생성되는 것을 의미하는 것은 아닙니다. (정확히 말하자면 이것은 코루틴 생성 시 스케쥴러 설정에 따라 다릅니다.) 사실, 코루틴은 스케쥴링 가능한 코드 블록 혹은 이러한 코드 블록들의 집합이라고 볼 수 있습니다. 이해를 돕기 위해서 코루틴이 실행되는 과정을 다음과 같이 그림으로 나타내 보았습니다. 제일 왼쪽에 보면 CoroutineScope 가있습니다. 우리가 어떤 코루틴을 실행하기 위해서는 어떤 코루틴 스코프에 속해 있어야 합니다.현재 코루틴 스코프가 갖는 컨텍스트(CoroutineContext) 에서 Dispatcher 는 UI Dispatcher 라고 되어 있습니다. 이것은 현재 스코.. 2025. 1. 31.
[Android] Coroutine Dispatcher에 대한 고찰 - Deep Dive 우리는 Kotlin의 흐름과 몇 가지 기본 개념의 내부 작동을 탐구했지만, 코루틴 디스패처에 대해서는 깊이 파고든 적이 없습니다. 이번 포스팅을 통해 Coroutine DisPatcher에 대해 깊게 알아보는 시간을 갖고자 합니다.이를 분석해서 이것이 코드에 어떤 영향을 미치는지 살펴보겠습니다. Dispatcher란?Dispatcher의 사전적인 의미는 사람이나 차량을 필요한 곳으로 보내는 일을 담당하는 사람입니다.Kotlin 코루틴에서의 Dispatcher는 Coroutine들을 적절하게 쓰레드 또는 쓰레드 풀에 할당하여 실행시키는 Scheduler 역할을 하는 코루틴 Context의 일부라고 할 수 있습니다. Dispactcher의 종류로는 Default / IO / Main / Unconfined가.. 2025. 1. 27.
[Android] 코루틴(Coroutine) 내부적으로 어떻게 동작할까? 코루틴을 사용해보면 약간 궁금한 게 있었다. 어떻게 함수가 중단되고 재개되고 가능한지 의문이 생긴다. 그래서 한번 코루틴 내부를 한번 파헤쳐 보도록 하자.  아래 포스팅한 내용은 KotlinConf 2017 - Deep Dive into Coroutines on JVM by Roman Elizarov 영상의 내용들이다. 결론적으로 말하면, 코루틴은 디컴파일되면 일반 코드일 뿐이다. Continuation Passing Style(CPS, 연속 전달 방식) 이라는 형태의 코드로 전환한다.  아래에서 자세히 알아보자. Continuation Passing Style(CPS)코루틴은 컴파일러에서 CPS 로 변환이 된다. CPS 는 일종의 연속된 콜백의 형태라고 한다. 그래서 어떻게 동작하는지 알아보자. su.. 2025. 1. 24.
[Android] RecyclerView의 원리 및 내부 동작 Android 앱을 개발할 때 리스트를 보여줘야한다면 가장 많이 사용되는 View는 RecyclerView일 것입니다.  우리가 RecyclerView를 사용하면서 아래와 같이 스크롤을 했을 때 체크하지 않은 아이템에도 체크가 돼 있는 현상을 겪었던 적이 있을 것입니다.  왜 이런 현상이 발생하는지 RecyclerView 내부 동작에 대해 깊게 알아보는 시간을 가져보도록 하겠습니다.   🌀 RecyclerView 이전의 시대RecyclerView가 등장하기 전, 안드로이드에선 어떤 리스트를 나타내는 뷰를 만들 때, ListView라는 것을 제공했습니다. 하지만 이 ListView에는 고질적인 문제가 존재했습니다. 대표적인 문제점은 아이템 리스트를 표현하는 ItemView의 갯수가 수 백개 이상으로 많아.. 2025. 1. 23.