기존 크로스 플랫폼과 무엇이 다른가?
Flutter
dart로 작성된 프로젝트를 flutter compiler를 통해 native app이 만들어진다. 각 플랫폼별 별도의 방법으로 rendering 구현이되어있으며 어플리케이션을 제작하는데 필요한 다양한 라이브러리들이 존재한다.
React Native
리엑트 네이티브는 리엑트 진영에서 만든 AOS, IOS용 크로스 플랫폼 프레임 워크이다.
JavaScriptCore
엔진을 통해 실행되며 부분적이지만 플랫폼별 네이티브 기능을 제공한다. 이를 런타임에서 Bridge를 통해 네이티브기능을 실행하는 방식이다.
Ionic
웹 베이스로 작성된 프로젝트를 assets을 포함하여 감싼형태로 플랫폼별 런타임을 만들어주는 방식. 웹뷰베이스로 실행된다.
Native Project?
위 그림을보면 프로젝트 작업 방식(언어)와 결과물에대한 개략적인 내용을 나타낸다.
기존의 크로스플랫폼 프레임워크의 결과물은 모두 플랫폼별 런타임(apk, ipa, …)인 반면 KMM은 각 플랫폼별 Project 파일인것을 알 수 있다.
이 부분이 본글을 관통하는 핵심 내용이며 KMM의 가장 강력한 장점중 하나라고 생각한다.
기존 크로스플랫폼의 프레임워크의 가장 큰 문제가 웹뷰 또는 프레임워크 내부 구현체(코어, 엔진)로 동작하는 런타임이 생성되기때문에 플랫폼에서 제공하는 최적화나 각종 네이티브 UI 컴포넌트의 이점을 제대로 누리지 못하는 경우가 많다. 이 때문에 네이티브의 7~80%정도의 퀄리티까지는 가능하나 그 이상은 힘들고 복잡한 UI를 구성할수록 퍼포먼스 이슈도 발생한다.
요약
기존 프레임워크는 플랫폼별 런타임이 결과물이다. 반면 KMM은 각 플랫폼별 프로젝트가 결과물이다.
이게 왜 장점인지에 대한 내용들은 별도로 정리해보자.