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

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

Pangmoo
April 05, 2024

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

박상권님의 행사 발표자료
[안드로이드 컨퍼런스] Native vs Flutter 그리고 KMP
https://event-us.kr/ted/event/79581

⚠️경고: 희망적인 이야기만 담겨 있습니다 :)

Pangmoo

April 05, 2024
Tweet

More Decks by Pangmoo

Other Decks in Programming

Transcript

  1. 발표자 소개 GDG Songdo Organizer GDSC TUK Lead Kotlin User

    Groups Seoul Organizer 전 아우토크립트 안드로이드 개발 팀장
  2. 코틀린 멀티플랫폼이란? Android에서도 관심있게 보는 중 Android iOS간 로직 공유

    중점 테스트 중 라이브러리 변환 일부 Jetpack 라이브러리 KMP로 변환 중 Annotations, Collections, DataStore, … Android 공식 문서
  3. 컴포즈 멀티플랫폼이란? Compose로 UI까지 공유 Jetpack Compose와 동일 일부 제공되지

    않는 Composable 존재 KMP 안에 CMP가 존재 공통 로직만 공유한다면 KMP UI까지 Compose로 공유한다면 CMP Compose Multiplatform CMP
  4. 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
  5. KMP만의 특별한 점 KMP에서 네이티브로 접근할 수 있는 함수를 제공

    Android, Desktop은 기존에 제공되고 있었음 Android, Desktop의 경우 기존과 동일하게 개발 iOS의 경우 Apple Framework를 Wrapping된 함수로 제공 추가적인 네이티브 개발 없이 코틀린 안에서 모두 개발 가능 물론 제공되지 않는 함수, 기능은 네이티브로 구현 필요 혹은 interop을 통해 코틀린에서 사용 가능 코틀린으로 네이티브 접근
  6. iOS: Torch 제어 setTorchMode로 iOS 토치 제어 Throw 자동으로 Swift

    Exception 변환 실제 코틀린으로 작성되어 아이폰 토치를 제어하는 코드
  7. iOS: 제공되지 않는 기능 구현 Interop for KVO 추가적으로 Gradle에서

    link 및 interop 필요 by interop Flow 그대로 사용 가능 Native에서 제공되는 상수 그대로 사용 가능
  8. KMP만의 특별한 점 KMP로 구현하면서, 필요한 기능은 네이티브로 유연하게 구현

    가능 이는 KMP라는 프레임워크 안에서만 개발하는 것이 아니기 때문 네이티브 기능을 살리다
  9. KMP만의 특별한 점 완벽하게 새로운 기술은 아니다 이미 우리는 Android를

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

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

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

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

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

    (Android) Native UI & Feature (iOS) Common Logic (Kotlin)
  15. KMP 적용 가능한 프로젝트 신규 서비스를 Android, iOS 멀티플랫폼으로 개발하려는

    상황 이때 원코드 멀티플랫폼으로 개발 희망 CMP를 통해 화면과 기능까지 원코드로 작성 신규 프로젝트
  16. 기존 크로스플랫폼과 방향성이 다르다 Flutter와 RN 등 기존 크로스플랫폼은 프레임워크

    안에서 모든 것을 개발한다. 그렇지만 KMP는 KMP 프레임워크 안에서의 모든 개발도 KMP를 모듈/라이브러리로서 개발하여 Native에서 사용도 원하는 것을 선택하여 자유롭게 개발할 수 있다. 단일 프레임워크가 아니다
  17. 기존 크로스플랫폼과 방향성이 다르다 결국 앞의 특징으로 필요한 상황에 유연하게

    네이티브 개발이 가능하다. 이는 기존 네이티브 프로젝트에서 KMP 도입도 CMP로 개발하다 네이티브로 개발도 유연하게 개발 가능하다. 네이티브 동시 개발이 가능하다.
  18. 일자리 있어요? 쓰는 사람 있어요? 그거 누가 써요 ㅋㅋ 레퍼런스

    많아요? Stable하긴 해요? 플러터 킹왕짱 KMP잖아 한잔해…
  19. KMP 미래가 있을까…? iOS 모든 Jetpack Compose의 핵심 API와 구성요소를

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

    디버그 도구 프로젝트 구성을 도와주는 IDE Multiplatform 프로젝트의 모든 부분에 대한 통합되고 향상된 디버깅 경험 Roadmap Tool
  21. KMP 미래가 있을까…? JVM과 마찬가지로 라이브러리에서 동일한 코드 인라인 동작

    구현 라이브러리 공개 API가 호환되지 않는지 확인하는 도구를 제공 Mac 컴퓨터 없이도 라이브러리를 빌드하고 게시 라이브러리를 생성하고 게시하기 위한 템플릿과 광범위한 가이드라인 제공 Roadmap Library ecosystem