본문 바로가기
반응형

[Android/Kotlin]4

[Android/Kotlin] Gson -> kotlinx.serialization으로 Migration하기 코다 앱에선 객체 - Json 간 변환을 Gson, 그리고 이를 Retrofit2의 Converter.Factory를 통해 진행하고 있었다. 이제 Gson을 놓아주고, kotlinx.serialization으로 Migration 하려고 한다. 모든 작업엔 이유가 필요하다. 왜 kotlinx.serialization을 사용하려 하는가? 코다 앱의 안드로이드 개발은 혼자 맡아서 진행하고 있기 때문에 그동안 이런 Migration작업에 그냥 스스로 결정해서 진행했다. 실무 프로젝트에선 어떨까? 실무 프로젝트에서 Migration하는 시나리오를 상상하여 나름 과정을 정리해봤다. 1. 문제점 발견, 기술부채 확인 2. 해결 방안 생각 a. Migration 비용 b. Migration으로 얻는 이득 c. 도입할 .. 2022. 12. 15.
[Android/Kotlin] Retrofit2은 어떻게 Interface의 구현 없이 사용할 수 있을까? 제가 가진 의문과 생각을 정리한 글입니다~! 틀린 내용이 있다면 알려주세요 :) TL;DR - 프로그래머는 Interface에 추상적인 API 함수들을 Retrofit Annotaion과 함께 정의해둔다. - Retrofit.create(Class) 함수에 정의한 Interface의 Java Class 타입을 넘긴다. 반환 값은 해당 Interface의 구현체이다. - 우리는 Interface의 구현체 내용을 작성하지 않았다. 이는 Retrofit이 담당한다. - Java의 Reflection API에서 제공하는 newProxyInstance() 메서드를 이용해 동적으로 Proxy 인스턴스를 만든다.(Dynamic Proxy) - 이 Proxy Instance는 우리가 정의한 Interface의 구현체이.. 2022. 12. 11.
[Android/Kotlin] Coroutine은 왜 Light Thread이고 어떤 식으로 동작할까? 제가 가진 의문과 생각을 정리한 글입니다~! 틀린 내용이 있다면 알려주세요 :) Coroutine이란? Coroutine은 협력형 멀티 태스킹과 루틴을 통해서 구조화된 동시성을 구현하는 것이다. 협력형 멀티태스킹? 우선 Coroutine은 비선점형 스케쥴링이다. 비선점형이란 멀티태스킹의 각 작업을 운영체제가 강제로 중단시키고 다른 작업을 실행하게 할 수 없는 것을 말하는데, 그럼에도 불구하고 Coroutine이 여러 작업을 교체하며 수행할 수 있는 이유는 각 Coroutine들이 자발적으로 CPU 자원을 포기하며(yield) 여러 Coroutine이 협력적으로 실행을 주고받으면서 작동하기 때문이다. 구조화된 동시성? Coroutine은 CoroutineScope을 제공해주는데, 이 스코프 내에 Corou.. 2022. 9. 19.
[Android/Kotlin] Retrofit2(+Coroutine)은 왜 Main Thread에서 사용해도 될까? 제가 가진 의문과 생각을 정리한 글입니다~! 틀린 내용이 있다면 알려주세요 :) 💁‍♂️??? Retrofit2과 Coroutine은 Android 프로젝트에 빠지지 않는 조합이다. 그런데 혹시, ViewModel에서 Retrofit의 API 함수를 호출할 때 Thread를 바꾸고 있진 않은가? 처음 예제를 짜 볼 땐 당연히 Networking 작업이니까 IO Dispatcher로 바꾸어주고 뿌듯해했다. 당연히 Room이나 Retrofit2같은 무거운 작업은 Main-Safety하게 해야 하지 않나? Main Thread에서 호출했다가 화면 버벅거리면 어떡해?? 뭐 코루틴이야 일반적으로 호출자 스레드를 블락하지 않지만, Room이나 Retrofit2 같은 무거운 작업은 다른 Thread에서 작업하는 게 .. 2022. 8. 10.
반응형