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

안드로이드의 익숙한 BaseXXX class를 알아보고, 설계의 중요성을 알아보자.

Java에서 상속은 매우 익숙하다. 앞에서 적은 상속! 악마의 속삭임, 그 속에 숨겨진 문제점, Kotlin에서는 Delegation을 활용해 보자. 글을 보면 알겠지만 상속에는 숨겨진 문제점이 있다.

상속을 지키리 면 open을 통해 열고 닫고를 잘해야 하고, 설계를 잘 해야 하고 주석도 잘 달아주는 게 좋다.

처음의 의도와 달라질 수 있는 환경이라면 상속보다는 다른 방법을 활용하는 게 좋다.

이 글에서는 Android에서 흔하게 작성하는 class BaseXXX를 알아보고 좀 더 좋은 접근 방법을 알아보려고 한다.


이 글에서 알아볼 내용

  • 안드로이드에서 Lifecycle을 따를 수 있는 상속을 계획할 수 있도록 글을 작성
  • 몇 가지 Base를 살펴보고 좀 더 좋은 방향을 알아보자.

Read More

Callback으로 받은 데이터를 Coroutines에서 활용하는 방법! Flow 활용

Callback Listener에서 전달되어오는 값을 Coroutines Flow에 전달하려면 어떻게 할 수 있을까?에서 시작한 고민을 글로 정리해 둔다.

이 글은 Flow에 대한 설명을 하지는 않을 것이지만 이를 해결하기 위해 사용한 방법은 아래와 같다.

  • Callback으로 들어온 값은 Coroutines의 suspend가 아니다.
  • flow에 emit 하려면 suspend 내에 있어야 한다.
  • SharedFlow와 StateFlow을 사용할 순 있다.

이 글은 방안에 대한 정리만 한 것일 뿐 전반적인 설명을 담고 있지는 않다. 그러니 참고용으론 활용할 수 있겠지 만 잘 이해하지 못하고 사용한다면 사용치 않는 것을 권장한다.

이 글에 도움 될 링크는 아래와 같다.


이 글에서 알아볼 내용

  • Callback으로 들어온 값을 Coroutines에 던져 처리하기 위한 방법을 설명한다.
  • SharedFlow와 StateFlow를 통한 해결 방법을 알아본다.

Read More

상속! 악마의 속삭임, 그 속에 숨겨진 문제점, Kotlin에서는 Delegation을 활용해 보자.

Java에서 설계할 때 매우 익숙하게 하는 게 있다. 바로 Base를 상속 구조로 만드는 것.

상속은 매우 쉽게 생각할 수 있고, 공통 작업을 분리할 때 매우 유용하게 사용할 수 있다.

Kotlin에서는 상속보다는 Delegation을 사용하라고 하는데, 상속 대신 Delegation을 사용할 때의 장점을 알아본다.

이 내용도 결국 Effective Java 3판에 잘 나오는데 아래 내용을 참고하면 좋다.

  • 아이템 18 : 상속보다는 컴포지션(Composition)을 사용하라
  • 아이템 19 : 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라


이 글에서 알아볼 내용

  • 상속을 알아보고, 상속의 단점을 알아보다.
  • Composition을 알아본다.
  • Kotlin의 Delegation을 알아본다.

Read More