Slide 1

Slide 1 text

fun HelloKMP(): GladToMeetYou Incheon/Songdo

Slide 2

Slide 2 text

안녕하세요! 이현우입니다. (전) Mathpresso(QANDA) Android Engineer GDSC Konkuk University Lead (23-24) Kotlin User Groups Seoul Organizer

Slide 3

Slide 3 text

Kotlin User Groups Kotlin User Groups(KUG)는 Kotlin 개발에 지대한 관심을 가지는 개발자들에게 지식 공유의 장을 마련하고 개발에 도움이 되는 컨텐츠를 제공/공유하는 개발 커뮤니티입니다. https://github.com/Kotlin-User-Grou ps-Seoul

Slide 4

Slide 4 text

오늘 저는 이런걸 다뤄보려고 합니다 ● Kotlin Multiplatform ● Kotlin 팀이 그려가고 있는 미래: Compose Multiplatform ● Fleet: Awesome IDE For KMP

Slide 5

Slide 5 text

Kotlin: Myth and Truth Incheon/Songdo

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Kotlin is designed to be a pragmatic tool

Slide 9

Slide 9 text

Supports multi-paradigm, multiplatform

Slide 10

Slide 10 text

- Kotlin/JVM - Kotlin/JS - Kotlin/Wasm - Kotlin/Native - Darwin(macOS/iOS) - Linux - Windows

Slide 11

Slide 11 text

DEVIEW 2023 - 그 여자 APP, 그 남자 SDK: Kotlin Multiplatform 적용기

Slide 12

Slide 12 text

- 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

Slide 13

Slide 13 text

What is Kotlin Multiplatform Incheon/Songdo

Slide 14

Slide 14 text

Server Android iOS Web

Slide 15

Slide 15 text

Server Android iOS Web Desktop

Slide 16

Slide 16 text

Server Android iOS Web Desktop

Slide 17

Slide 17 text

Server Android iOS Web Desktop 공통 로직으로 짜여져 있다면?

Slide 18

Slide 18 text

Server Android iOS Web Desktop “Kotlin” Multiplatform

Slide 19

Slide 19 text

It’s quite different

Slide 20

Slide 20 text

Flutter, React Native ● 이론 ○ 하나의 언어로 UI~전체 로직 구성 가능 ○ 빠르게 기능/화면 ● 현실 ○ OS 의존적인 기능/UI는 네이티브 코드로 작성해야됨 ○ MethodChannel ○ Native Module ○ 네이티브단 코드 이해가 수반됨 ○ (특정 플랫폼) 서드 파티 라이브러리 유지보수 미비

Slide 21

Slide 21 text

Kotlin Multiplatorm

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Kotlin Multiplatform - 절망편 ● (iOS) Coroutines/Flow의 Cancellation이 지원이 안됨 ○ cancel을 할 수 있는 handler 객체를 내주거나 서드파티 라이브러리 활용 ○ rickclephas/KMP-NativeCor outines ● 서드파티 라이브러리/트러블 슈팅 기록들이 타 플랫폼에 비해 많이 부족 ● 객체지향/아키텍처에 관련된 지식 필요

Slide 26

Slide 26 text

Kotlin Multiplatform - 희망편 ● 모바일에서 OS 의존적인 기능들을 활용하기 훨씬 쉬움 ● 안드로이드 개발자 입장에서 친숙한 개발 환경으로 크로스플랫폼 앱 만들 수 있음

Slide 27

Slide 27 text

Kotlin Multiplatform - 희망편 ● Windows, Web 같은 경우 Kotlin/JS, Kotlin/Native 활용하여 구축 가능 ● Jetbrains와 Google에서 지원해주는 First/Second 파티 라이브러리가 많음 ○ Kotlinx libraries ○ Ktor ○ Androidx libraries

Slide 28

Slide 28 text

KMP Ecosystem is skyrocketing

Slide 29

Slide 29 text

https://github.com/terrakok/kmp-awesome

Slide 30

Slide 30 text

KMP에 사용할 수 있는 라이브러리를 더 자세히 알아보고 싶다면?

Slide 31

Slide 31 text

KMP 개발을 위해 알아두면 좋은 라이브러리 소개 DI 프레임워크 찍먹하기 이후 이상훈님의 세션에서 더 자세한 내용을 확인하실 수 있습니다!

Slide 32

Slide 32 text

Many companies select KMP kotl.in/kmp-case-studies

Slide 33

Slide 33 text

한국에도 KMP를 활용하는 회사가 있습니다.

Slide 34

Slide 34 text

한국에도 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

Slide 35

Slide 35 text

이런 멋진 기술들을 직접 활용한 Sample App들을 보고 싶다면?

Slide 36

Slide 36 text

https://www.jetbrains.com/help/kotlin-multiplatform-dev/multiplatform-samples.html

Slide 37

Slide 37 text

KMP로 번역기 만들기 이후 유광무님의 세션에서 더 자세한 내용을 확인하실 수 있습니다!

Slide 38

Slide 38 text

Simple KMP Project Analysis Incheon/Songdo

Slide 39

Slide 39 text

Project init

Slide 40

Slide 40 text

Project init https://www.jetbrains.com/help/kotlin-multiplatform -dev/multiplatform-setup.html

Slide 41

Slide 41 text

Project init

Slide 42

Slide 42 text

Project init

Slide 43

Slide 43 text

Project init

Slide 44

Slide 44 text

Project init

Slide 45

Slide 45 text

Project init https://www.jetbrains.com/help/kotlin-multiplatform -dev/multiplatform-project-configuration.html

Slide 46

Slide 46 text

Project init - New Template Wizard 󰩃 kmp.jetbrains.com

Slide 47

Slide 47 text

Project init - New Template Wizard 󰩃

Slide 48

Slide 48 text

TroubleShooting - :shared:testClasses not found

Slide 49

Slide 49 text

TroubleShooting - :shared:testClasses not found

Slide 50

Slide 50 text

Project Structure

Slide 51

Slide 51 text

Project Structure - Android App

Slide 52

Slide 52 text

Project Structure - Android App

Slide 53

Slide 53 text

Project Structure - iOS App

Slide 54

Slide 54 text

Project Structure - iOS App

Slide 55

Slide 55 text

Project Structure - iOS App

Slide 56

Slide 56 text

Project Structure - iOS App

Slide 57

Slide 57 text

Project Structure - shared module

Slide 58

Slide 58 text

Project Structure - shared module

Slide 59

Slide 59 text

Project Structure - shared module

Slide 60

Slide 60 text

Project Structure - shared module 플랫폼별로 사용할 함수 추상화

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

expect, actual 키워드로 플랫폼간 명세 (추상)과 구현체(구체)를 구분할 수 있음 중요한 점 ● commonMain과 각 OS 구현체는 동일한 패키지에 구현되어야 함 Expected and actual classes(beta)

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

Stablized Kotlin Multiplatform Stable 🎉 since 10/31 What’s different? Incheon/Songdo

Slide 65

Slide 65 text

EXPER. ALPHA STABLE BET A 2020 2021 2022 2023 2024

Slide 66

Slide 66 text

STABLE

Slide 67

Slide 67 text

What is stabilized 플랫폼 Compatibility 보장 보다 쉬운 빌드 환경 설정 Faster Builds Better Runtime Performance 새로운 공식 문서 (Kt - Swift)

Slide 68

Slide 68 text

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)

Slide 69

Slide 69 text

Template for configuring multiplatform project

Slide 70

Slide 70 text

Template for configuring multiplatform project

Slide 71

Slide 71 text

Template for configuring multiplatform project

Slide 72

Slide 72 text

Template for configuring multiplatform project Kotlin 1.9.20부터 sourceSet을 Gradle Plugin 단에서 자동으로 설정

Slide 73

Slide 73 text

Template for configuring multiplatform project

Slide 74

Slide 74 text

Template for configuring multiplatform project

Slide 75

Slide 75 text

Template for configuring multiplatform project 등록되어있지 않은 target의 sourceSet을 사용할 경우 컴파일 단에서 친절한 경고를 띄움

Slide 76

Slide 76 text

안정화 이후의 성능 향상 Gradle Configuration Cache support (Cocoapods) Incremental compilation of klib artifacts New custom memory allocator in Kotlin/Native Kotlin/Native compiler cache management

Slide 77

Slide 77 text

kotl.in/kmp-portal

Slide 78

Slide 78 text

FAQ ● Android는 반드시 Jetpack Compose로 작성해야하나요? ● 아닙니다. XML 기반으로 뷰 작성하셔도 됩니다.

Slide 79

Slide 79 text

FAQ ● 주로 어떤 IDE를 활용하여 코드를 작성하시나요? ● 저는 주로 stable 버전의 Android Studio를 활용하거나 XCode를 활용합니다.

Slide 80

Slide 80 text

FAQ ● Kotlin Multiplatform를 어느 시기에, 어떤 팀에서 채택하면 좋을까요? ● (Official Answer) ● 플랫폼 의존적인 코드가 많은데 (Camera, Bluetooth) 크로스 플랫폼을 사용하고자 할 때 ● Kotlin, Jetpack Compose을 활용하여 크로스 플랫폼 앱을 만들고자 할 때 ● 안드로이드, 데스크톱 여러 가지 플랫폼이 기존에 개발되어있는데 공통 로직을 빼내어서 단일 팀에서 관리하고자 할 때 ● 다양한 플랫폼을 점진적으로 추가를 해야하는 앱을 개발해야할 때

Slide 81

Slide 81 text

Compose Multiplatform Incheon/Songdo

Slide 82

Slide 82 text

Compose Multiplatform jb.gg/compose 기존 크로스플랫폼 프레임워크처럼 UI도 Compose 기반으로 작성할 수 있게 해주는 프레임워크 Kotlin Multiplatform과 호환

Slide 83

Slide 83 text

Compose Multiplatform

Slide 84

Slide 84 text

Compose Multiplatform

Slide 85

Slide 85 text

Compose Multiplatform

Slide 86

Slide 86 text

Compose Multiplatform - Init

Slide 87

Slide 87 text

Compose Multiplatform - Init

Slide 88

Slide 88 text

Compose Multiplatform - 1.5.10 Material3 Components - ModalBottomSheet - DropdownMenuBox - SearchBar 향상된 iOS에서의 렌더링 성능 New Documentation Compiler Caching Faster Incremental Build

Slide 89

Slide 89 text

Fleet with KMP Incheon/Songdo

Slide 90

Slide 90 text

Fleet + KMP = 👍 ● Next-Generation IDE ● VS Code와 같은 에디터 형식의 Light Mode와 IntelliJ Code Engine을 활용한 스마트 모드 병행 운영 가능

Slide 91

Slide 91 text

Fleet + KMP = 👍 ● Remote로 동작 가능 ● Session 기능으로 타인이 본인의 IDE 접속해서 협업할 수 있는 기능 제공

Slide 92

Slide 92 text

Fleet is polyglot

Slide 93

Slide 93 text

Fleet with KMP

Slide 94

Slide 94 text

Fleet with Swift ● Kotlin, Swift 언어간 리팩토링, 플랫폼 프로덕트 디버깅, 코드간 네비게이션 등 KMP를 더욱 잘 활용할 수 있는 기능 지원 예정

Slide 95

Slide 95 text

감사합니다. Kotlin Multiplatform 같이 키워나가봐요 l2hyunwoo l2hyunwoo l2hyunwoo