Upgrade to Pro — share decks privately, control downloads, hide ads and more …

fun HelloKMP(): GladToMeetYou

HyunWoo Lee
December 10, 2023

fun HelloKMP(): GladToMeetYou

2023 GDG Devfest Songdo에서 진행한 fun HelloKMP(): GladToMeetYou 발표의 Speaker Deck입니다.

HyunWoo Lee

December 10, 2023
Tweet

More Decks by HyunWoo Lee

Other Decks in Programming

Transcript

  1. Kotlin User Groups Kotlin User Groups(KUG)는 Kotlin 개발에 지대한 관심을

    가지는 개발자들에게 지식 공유의 장을 마련하고 개발에 도움이 되는 컨텐츠를 제공/공유하는 개발 커뮤니티입니다. https://github.com/Kotlin-User-Grou ps-Seoul
  2. 오늘 저는 이런걸 다뤄보려고 합니다 • Kotlin Multiplatform • Kotlin

    팀이 그려가고 있는 미래: Compose Multiplatform • Fleet: Awesome IDE For KMP
  3. - Kotlin/JVM - Kotlin/JS - Kotlin/Wasm - Kotlin/Native - Darwin(macOS/iOS)

    - Linux - Windows Kotlin Wasm https://kotlinlang.org/docs/wasm-overview.html Kotlin Native https://kotlinlang.org/docs/native-overview.html Kotlin JS https://kotlinlang.org/docs/js-overview.html#kotlin-js-ir-c ompiler
  4. Flutter, React Native • 이론 ◦ 하나의 언어로 UI~전체 로직

    구성 가능 ◦ 빠르게 기능/화면 • 현실 ◦ OS 의존적인 기능/UI는 네이티브 코드로 작성해야됨 ◦ MethodChannel ◦ Native Module ◦ 네이티브단 코드 이해가 수반됨 ◦ (특정 플랫폼) 서드 파티 라이브러리 유지보수 미비
  5. Kotlin Multiplatform - 절망편 • 간단한 기능을 제공하는 모바일 앱이더라도

    Kotlin, Swift 그리고 UI 코드 작성방식을 반드시 알아둬야됨 ◦ iOS 개발자분들도 계신다면 이 부담이 좀 줄어듦 ◦ 그런데 iOS 개발자들은 이 방향을 좋아할까? • shared(common) 모듈이 바이너리로 변환되는 경우 ◦ 디버깅/sealed 타입 대참사
  6. Kotlin Multiplatform - 절망편 • 간단한 기능을 제공하는 모바일 앱이더라도

    Kotlin, Swift 그리고 UI 코드 작성방식을 반드시 알아둬야됨 ◦ iOS 개발자분들도 계신다면 이 부담이 좀 줄어듦 ◦ 그런데 iOS 개발자들은 이 방향을 좋아할까? • shared(common) 모듈이 바이너리로 변환되는 경우 ◦ 디버깅/sealed 타입 대참사 ▪ icerock/moko-kswift
  7. Kotlin Multiplatform - 절망편 • 간단한 기능을 제공하는 모바일 앱이더라도

    Kotlin, Swift 그리고 UI 코드 작성방식을 반드시 알아둬야됨 ◦ iOS 개발자분들도 계신다면 이 부담이 좀 줄어듦 ◦ 그런데 iOS 개발자들은 이 방향을 좋아할까? • shared(common) 모듈이 바이너리로 변환되는 경우 ◦ 디버깅/제네릭 타입 대참사
  8. Kotlin Multiplatform - 절망편 • (iOS) Coroutines/Flow의 Cancellation이 지원이 안됨

    ◦ cancel을 할 수 있는 handler 객체를 내주거나 서드파티 라이브러리 활용 ◦ rickclephas/KMP-NativeCor outines • 서드파티 라이브러리/트러블 슈팅 기록들이 타 플랫폼에 비해 많이 부족 • 객체지향/아키텍처에 관련된 지식 필요
  9. Kotlin Multiplatform - 희망편 • 모바일에서 OS 의존적인 기능들을 활용하기

    훨씬 쉬움 • 안드로이드 개발자 입장에서 친숙한 개발 환경으로 크로스플랫폼 앱 만들 수 있음
  10. Kotlin Multiplatform - 희망편 • Windows, Web 같은 경우 Kotlin/JS,

    Kotlin/Native 활용하여 구축 가능 • Jetbrains와 Google에서 지원해주는 First/Second 파티 라이브러리가 많음 ◦ Kotlinx libraries ◦ Ktor ◦ Androidx libraries
  11. KMP 개발을 위해 알아두면 좋은 라이브러리 소개 DI 프레임워크 찍먹하기

    이후 이상훈님의 세션에서 더 자세한 내용을 확인하실 수 있습니다!
  12. 한국에도 KMP를 활용하는 회사가 있습니다. PRISM Live Studio (NAVER ETECH)

    https://www.youtube.com/watch?v=B27Yu9uQvqY LINGER STUDIO https://www.youtube.com/watch?v=5Q5eSB_1eQE PREAT https://medium.com/preat/launching-on-ios-android-with-kotlin-compose-m ultiplatform-cc90848cc5f3
  13. expect, actual 키워드로 플랫폼간 명세 (추상)과 구현체(구체)를 구분할 수 있음

    중요한 점 • commonMain과 각 OS 구현체는 동일한 패키지에 구현되어야 함 Expected and actual classes(beta)
  14. What is stabilized 플랫폼 Compatibility 보장 보다 쉬운 빌드 환경

    설정 Faster Builds Better Runtime Performance 새로운 공식 문서 (Kt - Swift)
  15. What is stabilized Platform Stability Level Android Stable iOS Stable

    Desktop(JVM) Stable Server-side(JVM) Stable Web based on Kotlin/JS Stable Web based on Kotlin/Wasm Alpha watchOS Best effort (Safe to use in most scenarios) tvOS Best effort (Safe to use in most scenarios)
  16. 안정화 이후의 성능 향상 Gradle Configuration Cache support (Cocoapods) Incremental

    compilation of klib artifacts New custom memory allocator in Kotlin/Native Kotlin/Native compiler cache management
  17. FAQ • 주로 어떤 IDE를 활용하여 코드를 작성하시나요? • 저는

    주로 stable 버전의 Android Studio를 활용하거나 XCode를 활용합니다.
  18. FAQ • Kotlin Multiplatform를 어느 시기에, 어떤 팀에서 채택하면 좋을까요?

    • (Official Answer) • 플랫폼 의존적인 코드가 많은데 (Camera, Bluetooth) 크로스 플랫폼을 사용하고자 할 때 • Kotlin, Jetpack Compose을 활용하여 크로스 플랫폼 앱을 만들고자 할 때 • 안드로이드, 데스크톱 여러 가지 플랫폼이 기존에 개발되어있는데 공통 로직을 빼내어서 단일 팀에서 관리하고자 할 때 • 다양한 플랫폼을 점진적으로 추가를 해야하는 앱을 개발해야할 때
  19. Compose Multiplatform - 1.5.10 Material3 Components - ModalBottomSheet - DropdownMenuBox

    - SearchBar 향상된 iOS에서의 렌더링 성능 New Documentation Compiler Caching Faster Incremental Build
  20. Fleet + KMP = 👍 • Next-Generation IDE • VS

    Code와 같은 에디터 형식의 Light Mode와 IntelliJ Code Engine을 활용한 스마트 모드 병행 운영 가능
  21. Fleet + KMP = 👍 • Remote로 동작 가능 •

    Session 기능으로 타인이 본인의 IDE 접속해서 협업할 수 있는 기능 제공
  22. Fleet with Swift • Kotlin, Swift 언어간 리팩토링, 플랫폼 프로덕트

    디버깅, 코드간 네비게이션 등 KMP를 더욱 잘 활용할 수 있는 기능 지원 예정