구글이 KMP를 공식 지원하겠다고 밝힌 이상, 과연 안드로이드에서 코틀린이 빠르게 도입된 것처럼 KMP도 다른 멀티 플랫폼을 제치고 나아갈 수 있을지 궁금하다.
기존 앱에 KMP 적용을 위해서는 RxJava, XML 레이아웃, retrofit 등을 coroutine/flow, compose, Ktor 등 지원되는 기술 스택으로 마이그레이션 해야 한다. 요즘은 거의 coroutine, compose를 사용하기도 하고 clean architecture 구조인 앱이라면 라이브러리 변경은 그렇게 어렵지 않을 것이다.
위 글에 따르면 전체 코드의 9%가 iosMain, 13%가 androidMain에 있다고 한다. 이것도 많은 편이라고 하는데 생각보다 플랫폼 종속 코드가 적어서 놀랐다.
Use case의 실효성에 대한 의견이 분분한 것 같다. Clean architecture 구조에서 domain layer에 속하는 책임 하나로 자리매김 하고 있지만, 그저 repository call을 wrapping 하기만 하는 use case는 복잡성만 더한다.
위 글에서 말한 use case가 지키면 좋을 점 몇 가지를 꼽으면,
아래 영상에서도 비슷한 얘기를 하니 참고하면 좋다.
https://youtu.be/8kGIlALKO-s?si=izdVc8Adkz-Ym5Ui
Android Studio Jellyfish 버전부터 Gemini가 탑재되었다. 아직 멀었다는 얘기도, 생각보다 쓸 만하다는 의견도 있다.
다른 ai에 비해 편리한 점은 gemini가 프로젝트 코드를 알 수 있다는 점이다. 나도 내가 작성한 파일에 대해 테스트 코드를 만들어 달라 했더니 (그대로 쓸 정돈 아니지만..) 어느 정도 뼈대는 참고할 수 있을 정도였다.
이미 구글링에 익숙한 세대라 gemini에게 물어보는 게 더 불편할지도 모르지만, 지금부터 조금씩 익숙해지면 ai의 발전과 더불어 큰 생산성 향상을 불러올 수 있을 지도 모른다.
https://medium.com/@gregkorossy/animating-lazylist-items-in-jetpack-compose-6b40f94aaa1a
기존에는 LazyList에서 아이템 재정렬에 대한 애니메이션만 지원했다.
Modifier.animateItemPlacement()
1.7.0-alpha06 (24년 4월 3일 출시)에서 드디어 아이템 추가/삭제에 대한 애니메이션도 지원하게 되었다.
Modifier.animateItem()
아직은 fade in/out 애니메이션만 지원하지만 향후 더 많은 애니메이션이 추가 지원 될 것이라 생각된다.
LaunchedEffect는 lifecycle-aware하게 side effect를 처리하기 위해 쓰인다. 여기서 side effect(부수 효과)란 composable 한 함수 범위 밖에서 발생하는 앱 상태에 관한 변경사항이다. (링크 참조)
관련 함수들은 마치 kotlin scoped function처럼 맨날 봐도 헷갈린다. 조만간 꼭 정리해야겠다.