(240528) Medium Daily Digest

Godomin·2024년 5월 28일

Medium-Daily-Digest

목록 보기
7/24

Never Use Exceptions for Logic in Kotlin!

https://medium.com/android-ideas/never-use-exceptions-for-logic-in-kotlin-982609ce32c1

이 글에서는 그냥 예외를 던지는 것이 위험하고, 예측하지 못한 스파게티가 되며(catch 하는 것을 잊을 수 있기 때문에), 효율적이지 못하다고 한다.
코틀린 내장 Result를 사용할 수도 있지만 역시 이 클래스도 실패 시 throwable(또는 exception)을 던지기 때문에 stack trace가 나온다는 자체가 문제라고 한다. 때문에 커스텀 한 클래스를 만들어 사용하기를 권장한다.
보통 sealed interface를 사용해서 result를 캐스팅 할 수 있도록 만드는데, 특히 에러에 대해 ui단에서 사용할 수 있는 메시지까지 만들어두면 더 좋은 것 같다.

What is CoroutineContext and how does it work internally?

https://medium.com/@sahilthakar10/what-is-coroutinecontext-and-how-does-it-work-internally-801401921ecd

CoroutineContext는 코루틴을 어떻게 처리할 것인지에 대한 여러 정보(Element)를 가지고 있는 인터페이스이다.

  • get: key에 해당하는 context element를 반환

  • fold: initial value를 시작으로 element들을 병합하여 반환

  • plus: 현재 context에 파라미터로 받은 context의 element들을 합친 context를 반환

  • minusKey: key에 해당하는 element를 제외한 context를 반환

  • Element: id, name, dispatchers, interceptor, exceptionHandler 등을 의미, CoroutineContext를 상속

Understanding yield() in Android Coroutines

https://medium.com/@mohamed.ma872/understanding-yield-in-android-coroutines-4c5f654b53d2

yield() 는 suspend function으로 현재 코루틴이 suspend될 수 있고 다른 코루틴이 실행될 수 있도록 dispatcher에게 알려준다. 오래 걸리는 작업이 스레드를 독점하지 않도록 할 수 있다.

yield()의 동작 방식

  1. 코루틴은 yield()가 불린 시점에 pause 된다.
  2. dispatcher는 준비 된 다른 코루틴이나 작업으로 context switch를 할 수 있어 어플리케이션의 전반적인 효율성과 응답성을 높일 수 있다.
    yield()의 장점
  • 한 코루틴이 스레드를 독점하지 못하게 한다.
  • 긴 연산 작업을 컨트롤하여 UI가 responsive하게 한다.
  • 어플리케이션이 CPU 리소스를 더 효율적이게 사용할 수 있도록 한다.

0개의 댓글