깨알 개념 87

[Kotlin] Coroutines - suspend 키워드

본 게시글의 Coroutine 개념은 Android 내에서 사용되는 것을 전제로 작성되었다. #1 이전 글 [Kotlin] Coroutines - 동기 코드, 비동기 코드#1 동기 코드 vs 비동기 코드 #1-1 구분하기 코루틴을 제대로 사용하기 위해선 먼저, '동기 코드'와 '비동기 코드(= 코루틴 코드)'를 명확하게 구분할 줄 알아야 한다. 둘을 구분하는 기준은 쉽게 말kenel.tistory.com해당 게시글을 읽어야 본 게시글을 이해할 수 있다. #2 suspend 키워드#2-1 suspend와 resume비동기 코드, 즉 코루틴은 suspend(기다림)이 필요한 코드다. 기다림이 있다는 건 resume(다시 움직임, 재개)도 있다는 말이다. 코루틴을 기다리게(suspend) 만들면, 해당 코루틴..

[Kotlin] Coroutines - Coroutine builder

#1 Coroutine builder kotlinx-coroutines-coreCore primitives to work with coroutines. Coroutine builder functions: Coroutine dispatchers implementing CoroutineDispatcher: More context elements: Synchronization primitives for coroutines: Top-level suspending functions: NameDescriptiondelayNon-blockingkotlinlang.orgrunBlocking을 제외한 코루틴 빌더는 CoroutinesScope의 확장 함수(Extension functions)다. CoroutineScop..

[Kotlin] Coroutines - CoroutineScope, CoroutineContext

본 게시글의 Coroutine 개념은 Android 내에서 사용되는 것을 전제로 작성되었다. #1 CoroutineScope...import kotlinx.coroutines.*class MainActivity: AppCompatActivity() {    ...    val btnDownloadSampleData = findViewById(R.id.btnDownloadSampleData)        btnDownloadSampleData.setOnClickListener {        // 코루틴의 영역        CoroutineScope(Dispatchers.IO).launch {            sampleFunction()        }    }        ...}코루틴은 기본적으로..

[Kotlin] Coroutines - Suspend vs Block

#1 이전 글 [Kotlin] Coroutines - 동기 코드, 비동기 코드#1 동기 코드 vs 비동기 코드 #1-1 구분하기 코루틴을 제대로 사용하기 위해선 먼저, '동기 코드'와 '비동기 코드(= 코루틴 코드)'를 명확하게 구분할 줄 알아야 한다. 둘을 구분하는 기준은 쉽게 말kenel.tistory.com이전 글에서 다룬 Suspend라는 개념은, "스레드를 Block한다"라고 말할 때의 Block과 비슷하면서도 다른 개념이다. 둘의 공통점과 차이점을 짚어본다. #2 Suspend vs Block#2-1 공통점둘 다 스레드의 동작을 멈춘다. 하지만, 이 '멈춤'이라는 것은 2가지 양상을 띄며, 서로 구분된다. #2-2 차이점비유를 통해 설명하겠다.어떤 재미있는 동영상이 재생되고 있는 상황이다.1...

[Kotlin] Coroutines - 동기 코드, 비동기 코드

#1 동기 코드 vs 비동기 코드#1-1 구분하기코루틴을 제대로 사용하기 위해선 먼저, '동기 코드'와 '비동기 코드(= 코루틴 코드)'를 명확하게 구분할 줄 알아야 한다. 둘을 구분하는 기준은 쉽게 말하자면 작업이 순차적으로 실행되는 지의 여부다. 순차적이라는 것은, 이전 작업이 완료될 때까지 다음 작업이 실행되지 않음을 의미한다. 비동기 코드는 동기 코드가 아닌 코드다. #1-2 비동기 코드의 예시import kotlinx.coroutines.CoroutineScopeimport kotlinx.coroutines.Dispatchersimport kotlinx.coroutines.delayimport kotlinx.coroutines.launchsuspend fun main() { println(..

[Kotlin] Coroutines - 기초

본 게시글의 Coroutine 개념은 Android 내에서 사용되는 것을 전제로 작성되었다. #1 다중 스레드 구현#1-1 코루틴 Android의 Kotlin 코루틴  |  Android DevelopersAndroid의 Kotlin 코루틴 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동developer.android.com컴퓨터 과학에서의 멀티태스킹(Multitasking)에는 크게 2가지 종류이 있는데, 첫 번째 종류는 운영체제가 알아서 프로세스들을 전환하는 방법이고, 두 번째 종류는 프로세스 자체에서 스스로의 동작을 제어하는 방법이다. 전자는 운영체제의 스케쥴러가 수행한다. 개발..

[Android] RecyclerView - Adapter에 인자(Argument) 전달

#1 이전 글 [Android] RecyclerView - 기초 #1 ListView vs RecyclerView 화면에 요소(Item)을 100개 표현한다고 해보자. ListView나 GridView 등의 전통적인 Container Widget들은 이 100개의 아이템을 모두 불러온(load)다. 그리고 화면을 스크롤하면 미리 Load되 kenel.tistory.com 이전 글의 완성된 앱이, Adapter가 인자(Argument)를 전달받도록 수정해본다. 추가로, ViewHolder에 클릭 리스너를 구현하는 예시와 그 클릭 리스너 또한 인자(Argument)로 전달하는 코드도 살펴본다. #2 Adapter가 인자를 전달받게 만들기 #2-1 Menu.kt 만들기 // package com.example..

[Android] RecyclerView - 기초

#1 ListView vs RecyclerView화면에 요소(Item)을 100개 표현한다고 해보자. ListView나 GridView 등의 전통적인 Container Widget들은 이 100개의 아이템을 모두 불러온(load)다. 그리고 화면을 스크롤하면 미리 Load되어있는 아이템들이 보이는 방식이다. 메모리 효율이 낮다. 반면, RecyclerView는 아이템들을 미리 Load해두지 않는다. 아이템이 화면이 보이기 직전에, 이전 아이템의 껍데기를 재활용(Recycle)해서 그때 그때 Load한다. #2 Adapter RecyclerView.Adapter | Android Developersandroidx.appsearch.builtintypes.propertiesdeveloper.android.c..

[Kotlin] 람다(Lambda) 표현식

#1 람다 대수와 람다 표현식#1-1 람다 대수// 수학 - 함수의 표현f(x) = x + 1g(x, y) = x * y + 1// 수학 - 람다 대수로 함수 표현λx. x + 1λx. λy. x * y + 1프로그래밍에서의 람다 표현식(Lambda Expression)은 수학에서의 람다(λ) 대수(Lambda Calculus)에서 비롯된 개념이다. 람다 대수는 함수에 f나 g와 같은 이름을 붙이지 않는다. 함수의 몸통 즉, 계산 부분만을 단순하게 표현한다. #1-2 람다 표현식// 코틀린 - 함수의 표현fun f(x: Int): Int {    return x + 1}fun g(x: Int, y: Int): Int {    return x * y + 1}// 코틀린 - 람다 표현식으로 함수 표현{ x:..