Slide 1

Slide 1 text

코틀린으로 멀티플랫폼 만들기 Kotlin with Multiplatform

Slide 2

Slide 2 text

발표자 소개

Slide 3

Slide 3 text

발표자 소개 GDG Songdo Organizer GDSC TUK Lead Kotlin User Groups Seoul Organizer 전 아우토크립트 안드로이드 개발 팀장

Slide 4

Slide 4 text

모든 소스코드 및 발표자료는 다음에서 확인 가능합니다.

Slide 5

Slide 5 text

https://github.com/kisa002

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

코틀린 멀티플랫폼이란?

Slide 8

Slide 8 text

코틀린 멀티플랫폼이란? Kotlin Multiplatform 이하 KMP 코틀린 코드를 여러 플랫폼 멀티플랫폼 에서 사용 가능 Jetbrains에서 개발

Slide 9

Slide 9 text

코틀린 멀티플랫폼이란? 지원 플랫폼

Slide 10

Slide 10 text

코틀린 멀티플랫폼이란? Android에서도 관심있게 보는 중 Android iOS간 로직 공유 중점 테스트 중 라이브러리 변환 일부 Jetpack 라이브러리 KMP로 변환 중 Annotations, Collections, DataStore, … Android 공식 문서

Slide 11

Slide 11 text

컴포즈 멀티플랫폼이란?

Slide 12

Slide 12 text

컴포즈 멀티플랫폼이란? Compose로 UI까지 공유 Jetpack Compose와 동일 일부 제공되지 않는 Composable 존재 KMP 안에 CMP가 존재 공통 로직만 공유한다면 KMP UI까지 Compose로 공유한다면 CMP Compose Multiplatform CMP

Slide 13

Slide 13 text

KMP vs CMP KMP와 CMP의 차이? Kotlin Multiplatform Compose Multiplatform New Project Existing Project

Slide 14

Slide 14 text

NO KMM. YES KMP.

Slide 15

Slide 15 text

NO KMM. YES KMP. KMM Kotlin Multiplatform Mobile 이전까지 KMP와 KMM 혼용 사용 레퍼런스 검색 시 KMP, KMM 혼용 실제 사이트에서도 KMM으로 사이트 소개 현재까지 남아있음 KMM deprecated. Now KMP 그러나 2023년 7월. Jetbrains 공식 발표 KMM 용어 대신 KMP로 통합 사용 Compose Multiplatform CMP

Slide 16

Slide 16 text

KMP만의 특별한 점

Slide 17

Slide 17 text

KMP만의 특별한 점 KMP에서 네이티브로 접근할 수 있는 함수를 제공 Android, Desktop은 기존에 제공되고 있었음 Android, Desktop의 경우 기존과 동일하게 개발 iOS의 경우 Apple Framework를 Wrapping된 함수로 제공 추가적인 네이티브 개발 없이 코틀린 안에서 모두 개발 가능 물론 제공되지 않는 함수, 기능은 네이티브로 구현 필요 혹은 interop을 통해 코틀린에서 사용 가능 코틀린으로 네이티브 접근

Slide 18

Slide 18 text

iOS: Torch 제어 실제 코틀린으로 작성되어 아이폰 토치를 제어하는 코드

Slide 19

Slide 19 text

iOS: Torch 제어 Apple Framework 코틀린으로 바로 사용 실제 코틀린으로 작성되어 아이폰 토치를 제어하는 코드

Slide 20

Slide 20 text

iOS: Torch 제어 setTorchMode로 iOS 토치 제어 Throw 자동으로 Swift Exception 변환 실제 코틀린으로 작성되어 아이폰 토치를 제어하는 코드

Slide 21

Slide 21 text

iOS: 제공되지 않는 기능 구현 Interop for KVO 추가적으로 Gradle에서 link 및 interop 필요 by interop Flow 그대로 사용 가능 Native에서 제공되는 상수 그대로 사용 가능

Slide 22

Slide 22 text

KMP만의 특별한 점 KMP로 구현하면서, 필요한 기능은 네이티브로 유연하게 구현 가능 이는 KMP라는 프레임워크 안에서만 개발하는 것이 아니기 때문 네이티브 기능을 살리다

Slide 23

Slide 23 text

KMP만의 특별한 점 네이티브 기능을 살리다 Desktop Android iOS

Slide 24

Slide 24 text

KMP만의 특별한 점 완벽하게 새로운 기술은 아니다 이미 우리는 Android를 개발할 때 코틀린으로 개발하고 있었음 Desktop의 경우에도 AWT, Swing, JavaFX로 개발하고 있었음 즉, 수십년의 개발 역사를 지니고 있다. 강력한 상호운영성 이를 통해 Android, Desktop을 개발할 때 기존 개발 환경 그대로 개발 가능 각 플랫폼에서는 기존 Android/Desktop 라이브러리를 그대로 사용 가능 검증된 Android, Desktop

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

KMP만의 특별한 점 백엔드에서 만든 모델을 그대로 사용 가능 Kopring, Ktor 등 데이터 모델은 결국 코틀린 데이터 클래스 Client에서 같은 모델을 중복으로 만들 필요 없음 팀간 아키텍처/브랜치 전략은 필수 논의 사항 백엔드에서 모델 변경 시 Client에도 영향이 발생 이에 프로젝트 내 모듈 구성 및 Git 관리 방식은 팀간 충분한 협의 필요 ex 브랜치만 분리, SubModule로 분리 등… 백엔드 모델을 그대로 사용

Slide 27

Slide 27 text

KMP만의 특별한 점 백엔드 모델을 그대로 사용

Slide 28

Slide 28 text

KMP만의 특별한 점 백엔드 모델을 그대로 사용 Client Plugin

Slide 29

Slide 29 text

KMP만의 특별한 점 백엔드 모델을 그대로 사용 Backend Ktor

Slide 30

Slide 30 text

KMP 적용 가능한 프로젝트

Slide 31

Slide 31 text

기존 프로젝트

Slide 32

Slide 32 text

KMP 적용 가능한 프로젝트 이미 Android, iOS 각각 Native로 개발한 상황 기능 구현을 위해 신규 API 구현 필요 KMP를 통해 공통 모듈을 구현하고 이를 각 Native에서 사용 기존 프로젝트

Slide 33

Slide 33 text

KMP 적용 가능한 프로젝트 기존 프로젝트 Android iOS API Kotlin Backend

Slide 34

Slide 34 text

KMP 적용 가능한 프로젝트 이미 Android, iOS 각각 Native로 개발한 상황 신규 화면 및 필요 기능을 원코드로 개발 희망 KMP와 CMP를 통해 화면과 기능까지 원코드로 작성 Native에서 해당 화면 호출 기존 프로젝트

Slide 35

Slide 35 text

KMP 적용 가능한 프로젝트 기존 프로젝트 Android Menu Compose Notice Terms Contact License iOS

Slide 36

Slide 36 text

신규 프로젝트

Slide 37

Slide 37 text

KMP 적용 가능한 프로젝트 신규 서비스를 Android, iOS를 Native로 개발하려는 상황 비즈니스 로직은 멀티플랫폼으로 구현하면서 UI는 Native 개발 희망 비즈니스 로직은 KMP로 구현 UI는 Native로 구현하면서 KMP로 구현된 모듈 호출 신규 프로젝트

Slide 38

Slide 38 text

KMP 적용 가능한 프로젝트 신규 프로젝트 Native UI & Feature (Android) Native UI & Feature (iOS) Common Logic (Kotlin)

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

KMP 적용 가능한 프로젝트 신규 서비스를 Android, iOS 멀티플랫폼으로 개발하려는 상황 이때 원코드 멀티플랫폼으로 개발 희망 CMP를 통해 화면과 기능까지 원코드로 작성 신규 프로젝트

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

모든 프로젝트에 적합하다

Slide 43

Slide 43 text

모든 프로젝트에 적합하다 가능은 합니다.

Slide 44

Slide 44 text

굳이 KMP를 사용해야할까요?

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

기존 크로스플랫폼과 방향성이 다르다

Slide 47

Slide 47 text

기존 크로스플랫폼과 방향성이 다르다 Flutter와 RN 등 기존 크로스플랫폼은 프레임워크 안에서 모든 것을 개발한다. 그렇지만 KMP는 KMP 프레임워크 안에서의 모든 개발도 KMP를 모듈/라이브러리로서 개발하여 Native에서 사용도 원하는 것을 선택하여 자유롭게 개발할 수 있다. 단일 프레임워크가 아니다

Slide 48

Slide 48 text

기존 크로스플랫폼과 방향성이 다르다 단일 프레임워크가 아니다 라이브러리

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

KMP로 만들어진 토치 제어 기능

Slide 51

Slide 51 text

Swift에서 그대로 사용

Slide 52

Slide 52 text

Swift에서 Flow Observe 구현

Slide 53

Slide 53 text

기존 크로스플랫폼과 방향성이 다르다 단일 프레임워크가 아니다 프레임워크

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

기존 크로스플랫폼과 방향성이 다르다 결국 앞의 특징으로 필요한 상황에 유연하게 네이티브 개발이 가능하다. 이는 기존 네이티브 프로젝트에서 KMP 도입도 CMP로 개발하다 네이티브로 개발도 유연하게 개발 가능하다. 네이티브 동시 개발이 가능하다.

Slide 56

Slide 56 text

KMP 미래가 있을까…?

Slide 57

Slide 57 text

일자리 있어요? 쓰는 사람 있어요? 그거 누가 써요 ㅋㅋ 레퍼런스 많아요? Stable하긴 해요? 플러터 킹왕짱 KMP잖아 한잔해…

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

KMP 미래가 있을까…? iOS 모든 Jetpack Compose의 핵심 API와 구성요소를 멀티플랫폼화 모든 유형의 리소스를 공유하기 위한 공통 API iOS 및 데스크탑 접근성 API 통합 Web 기존 앱을 이식하고 모든 공통 코드를 재사용 다양한 화면 크기, 방향 및 해상도를 지원 마우스, 터치스크린, 물리적 키보드 또는 화면 키보드를 통한 입력 지원 성능 및 바이너리 크기를 개선 Roadmap Compose Multiplatform

Slide 63

Slide 63 text

KMP 미래가 있을까…? Fleet Compose Multiplatform 실시간 미리보기 및 시각적 디버그 도구 프로젝트 구성을 도와주는 IDE Multiplatform 프로젝트의 모든 부분에 대한 통합되고 향상된 디버깅 경험 Roadmap Tool

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

KMP 미래가 있을까…? JVM과 마찬가지로 라이브러리에서 동일한 코드 인라인 동작 구현 라이브러리 공개 API가 호환되지 않는지 확인하는 도구를 제공 Mac 컴퓨터 없이도 라이브러리를 빌드하고 게시 라이브러리를 생성하고 게시하기 위한 템플릿과 광범위한 가이드라인 제공 Roadmap Library ecosystem

Slide 67

Slide 67 text

KMP는 지속적인 발전을 하고 있다.

Slide 68

Slide 68 text

황금의 땅 코틀린 멀티플랫폼

Slide 69

Slide 69 text

감사합니다.