Callback으로 전달받은 데이터를 Coroutines의 Channel로 처리해보자.

Callback 이벤트로 받은 데이터를 Coroutines의 Flow를 활용한 방법에 대해서 소개했었다. 최근 Medium에서 Channel을 사용한 방법을 소개한 글이 있어 Channel을 사용하는 방법을 정리해보려고 한다.

여기에서 사용한 샘플은 단순한 테스트를 한 것이고, 네트워크가 포함되어 있지 않다.

다만 단순한 테스트로도 발생하는 문제가 있어 정리해두려고 한다.

참고한 글은 Kotlin Channel and WebSocket Complete Example (Also Why Not Flow)이다.

이 글에 도움 될 문서는 아래와 같다.


이 글에서 알아볼 내용

  • Flow와 Channel의 간단한 사용법을 알아본다.
  • Callback으로 전달된 데이터를 Channel으로 넘기기 위한 방법을 알아본다.
  • 데이터의 순서가 보장되는지 확인해보고, 해결 방법을 알아본다.

Read More

2021년도 잘 부탁드려요. - 이건 회고인가 자랑인가?

2021년도 3일이 지나가고 있다. 역시 휴일은 빠르게 흘러간다.

2016년 thdev.tech 도메인을 구입하고 벌써 5년이 흘러가고 있다.

도메인은 사실 tech가 처음 나오고 10%에($5) 구입할 수 있어 구입했던 도메인인데 현재는 매년 $50의 유지비가 발생한다.(슬픈 사실)

Read More

Kotlin CoroutineScope을 알아보고, cancel 처리에 대해서 알아보자.

runBlocking과 GlobalScope에 대해서 알아보았다.

이 두 가지의 코루틴은 이유 없이 사용해서는 안 되는 것들이다. 그럼 사용할 수 있는 건 가장 기본적인 CoroutineScope이 남는다.

필자가 한참 코루틴을 학습할 때 적었던 내용에 CoroutineScope의 활용 방법은 이미 다양하게 나온다.

이 글에서는 CoroutineScope의 사용 방법을 좀 더 알아보고(MainScope, CoroutineScope), 무한 루프 상의 cancel 처리 동작을 알아보려고 한다.


이 글에서 알아볼 내용

  • CoroutineScope 사용 방법을 알아본다.
  • CoroutineScope 안에서 동작하는 무한 루프에서의 cancel의 동작을 알아본다.
  • AAC-ViewModel의 viewModelScop을 알아본다.

Read More

Kotlin Coroutines의 GlobalScope을 어떻게 사용할 수 있을까? - 사실 추천하지 않는다.

코루틴의 runBlocking에 대해서 이야기했다. Kotlin Coroutines의 runBlocking은 언제 써야 할까? 잘 알고 활용하자! 결국 잘 알고 사용하는 건 문제가 없다. 역시나 잘 못 알고 사용하는 경우라면 사실 사용치 않는 게 맞는다고 생각한다.

이번 글은 코루틴 관련 2 번째 글로 GlobalScope에 대해서 알아보려고 한다.

이 역시 Android 개발에서는 lifecycle과 관련이 깊다. 일반적인 서버나 웹에서도 역시 GlobalScope을 무작정 사용하는 건 맞지 않을 것이다.

CoroutineScope은 각각의 라이프 사이클을 별도로 가지고 종료를 할 수 있는 반면 GlobalScope은 싱글톤으로 만들어져있어, 잘못 활용한다면 프로그램 전체에 악영향을 미칠 수 있다.

싱글톤 자체만으로도 사실 악영향을 미칠 수 있는데, GlobalScope을 이용해 새로운 컨텍스트를 만들어 사용하는 케이스도 있다.

결국 상황에 따라 잘 활용하면 이득을 볼 수 있으니 이 글에서는 GlobalScope에 대해서 좀 더 알아보려고 한다.


이 글에서 알아볼 내용

  • GlobalScope의 내부 코드를 살펴본다.
  • GlobalScope을 이용한 Android UI 코드를 살펴본다.
  • GlobalScope을 사용할 때 그나마 할 수 있는 예외를 살펴본다.

Read More

Kotlin Coroutines의 runBlocking은 언제 써야 할까? 잘 알고 활용하자!

코루틴을 활용하다 보면 문서에 나오는 것 외에도 다양하게 활용될 수 있다. 하지만 모든 Scope이 정답은 아니고, 상황에 맞는 게 있다.

안드로이드에서는 당연하게도 CoroutineScope을 사용해 lifecycle을 따르도록 개발하는 걸 권장하는데 onDestroy 시점에 cancel() 할 수 있는 형태로 만들어져있다.

Lifecycle을 따르는 건 매우 자연스럽다.

이 글에서는 다양하게 사용할 수 있는 Scope 중 먼저 runBlocking을 알아본다.


이 글에서 알아볼 내용

  • runBlocking을 UI에서 사용해도 괜찮을까?
  • runBlocking의 내부 코드를 알아보자.
  • 그럼 runBlocking은 언제 쓰는 게 좋을까?

Read More