요즘 플러터가 인기가 있습니다. 근데 플러터로 개발하다 보면 UI가 네이티브로 개발한 거처럼 맘에 들지 않습니다. 개인적인 생각은 각각의 UI는 네이티브만큼 깔끔한 게 없을거라 생각합니다. 그래서 화면만 각각의 네이티브언어로 만들고 비지니스 로직만 공유해서 개발하면 좋겠다고 생각했었는데 KMP가 그런 식인 거 같습니다.
KMP이란?
Kotlin Multiplatform( KMP )은 크로스 플랫폼 모바일 애플리케이션 생성을 단순화하도록 설계된 SDK입니다. KMP은 기존에 출시되었던 크로스 플랫폼 언어 flutter, React-Native 와는 크로스 플랫폼 개발을 도와주는 점에서 동일합니다. 다만, 개발도구와 언어의 사용에서 기존 플랫폼 개발 언어를 사용한다는 점이 큰 차이를 보입니다.
지난 2년 동안 많은 Kotlin 개발자를 혼란스럽게 만든 이름 불일치와 약어 혼동의 오랜 문제를 해결하기 위해 2023년 8월 22일 기존에 사용해오던 Kotlin Multiplatform Mobile (KMM)이라는 제품의 이름을 사용하지 않기로 했습니다.
이제부터 관련 플랫폼의 조합에 관계없이 코드를 공유하기 위한 Kotlin 기술을 지칭하는 기본 용어로 ‘Kotlin Multiplatform’이 사용됩니다.
KMP 기본 컨셉
android, ios 개발 시 ui 레이어를 제외한 동일하게 처리해야 하는 비지니스 로직 처리를 KMP에서 순수 Kotlin으로 작성되고 이를 컴파일된 코드가 각 플랫폼에서 사용할 수 있게 제공해줍니다.
shared라고 각 플랫폼에 제공되는 순수 코틀린 코드 영역에서는 kmp을 지원하는 라이브러리를 사용하여서 작성해야 합니다.
Fluter와 KMP과 차이점
UI 및 개발언어
Flutter : Dart언어
KMP : android는 Kotlin언어, ios는 Kotlin / Swift언어
안드로이드 개발자들은 Kotlin언어로 개발을 하니 그대로 사용하시면 되고, 아이폰개발자들은 Kotlin/Swift를 사용
개발환경
Flutter : Android Studio / VS Code를 이용해서 개발
KMP : android는 Android Studio, ios는 Android Studio / Xcode
Flutter와 KMP동작 방식
Flutter 아키텍처
기존 네이티브 플랫폼 위에 플러터 프레임워크를 두어 Dart 언어를 처리하도록 구현되어 있습니다.
Flutter 개발시에는 Dart 언어를 필수적으로 사용해 주어야 합니다.
Dart -> Compile -> Native Code
Flutter Architecture
1. Framework (Dart) |
- 실제 플러터 앱 개발자가 사용하는 상위 수준의 기능들을 제공한다. |
2. Rendering Engine (C/C++) |
- 플러터의 핵심으로 대부분 C++ 언어로 작성되어 있다. Skia 엔진을 통한 그래픽, 파일 및 네트워크, Dart 런타임 등 플러터의 핵심 API를 로우 레벨로 구현한다. |
- 엔진은 기본 C++ 코드를 Dart 클래스로 래핑하는 dart:ui를 통해 Flutter 프레임워크에 제공된다. |
3. Embedder (Platform-specific) |
- 운영체제와 직접 닿아있어 플랫폼 종속적인 렌더링, 사용자 입력, 통신 등의 기능을 플랫폼 종속적으로 수행한다. |
- 현재 안드로이드, 맥OS, 윈도우, 리눅스 플랫폼의 임베더가 제공된다. |
KMP 아키텍쳐
기존 네이티브 플랫폼을 사용하며, 추가적으로 공유되는 공통로직만 Kotlin으로 개발하여 사용
Business 로직과 Core 부분을 공통 모듈로 만들어 각 플랫폼과 공유할 수 있는 방식입니다.
Kotlin -> Compile -> Native Code
KMP Architecture
Native Code | |
Android UI | iOS UI |
Shared module(Kotlin / Gradle) | |
Android App (Kotlin / Gradle) | iOS App (Swift / Xcode) |
다음 프로젝트에는 KMP을 이용해서 앱 개발을 진행해 봐야겠습니다. 그리고 또 9월 15일에 Compose Multiplatform 1.5.0도 출시가 되었는데 같이 봐야겠습니다. 이번 릴리즈는 Kotlin용 Jetpack Compose 선언적 UI 프레임워크를 사용하여 Android를 넘어 데스크톱, iOS, 웹으로 확장됩니다.