전체 글

공부, 일상
Language/Kotlin

Coroutines의 Main safety

이번 글에서는 Coroutines가 어떻게 main-safety하게 동작하는 지에 대해 설명해보려한다. 먼저 안드로이드 ViewModelScope에서 실행되는 코루틴은 기본적으로 main thread에서 실행된다. 이는 매우 합리적인 이유가 있는데 우리는 ViewModel에서 UI 관련 작업을 자주 수행하기 때문이다. 우리가 ViewModel에서 아래와 같은 함수를 실행한다고 가정해보자.fun performNetworkRequest() { viewModelScope.launch { val recentVersions = getVersions() // this is a suspend function }} 이렇게 네트워크 작업을 Retrofit으로 수행할 때, main thread blocking..

Language/Kotlin

Coroutine Builder 이해하기

우리는 지금까지 예제에서 코루틴을 실행할 때 async를 사용해 suspend function을 실행해왔다. 명확히 하자면 이번 제목이 코루틴을 실행하는데 필요한 녀석이다. 그래서 뭐임?Coroutine Builder(코루틴 빌더)는 새로운 코루틴을 만들기 위해 필요한 녀석이다. 총 3가지 빌더가 있고 launch, async, runBlocking이 있다. 먼저 launch를 사용해보려고 한다. launch 사용하기fun main() { launch {}} 단순히 이렇게 사용할 순 없다. launch는 최상위 함수가 아닌 CoroutineScope의 확장함수이기 때문이다. 이렇게 launch를 사용하려면 새로운 CoroutineScope가 필요하다. launch는 대체 어떤 경우에 사용하는 걸까? 코루..

Android

Android UDP 통신해보기 in Kotlin

이번 기능은 사실 이전에 생각조차 해보지 않은 기능이었다. 기존 HTTP, TCP 기반 통신에 익숙해져 있었기 때문이다. 그리고 내가 연동해야할 센서는 0으로 1바이트를 보내면 지속적으로 특정값을 형식에 맞게 보내주는 녀석이었다. 그럼 바로 코드를 공유해보도록 하겠다. private fun fetchUdpData() = CoroutineScope(Dispatchers.Default).launch { println("started fetch") val socket = DatagramSocket() val address = InetAddress.getByName(someIp.split(":")[0]) val packet = DatagramPacket( "0".toByteArray(), "0".toByteAr..

BonusTrack02.dev
BonusTrack02.dev