KMM(Kotlin Multiplatform Mobile) 설명

jeonghwan, lee·2023년 8월 16일
0
post-thumbnail

어쩌다보니 블로그 첫 주제로 KMM을 하게 되었네요.

native를 사랑하는 개발자로서 KMM을 굉장히 매력적인 기술이라 생각합니다.
그동안 멀티플랫폼이라하는 자마린, RN, Flutter등 많은 도구가 있지만
제 머릿속에는 UI는 Native지! 라는 생각이.... 떨쳐지지가 않았어요.

하지만 괜찮습니다.
그토록 원하던 구조를 이젠 KMM으로 통해 구현 할 수 있게 되었습니다!!

시작하기전


KMM은 UI는 native에서, 비즈니스로직은 KMM에서 작업하는 구조가 만들어집니다.
여기서 의문!
왜 UI는 Native가 아닌 KMM에서 안해줍니까???

비즈니스로직은 매우 추상적입니다.
그래서 어떤 플랫폼에서든지 개념만 가지고있다면 구현 할 수 있어요.
하지만 UI는 다릅니다. 각 각의 플랫폼에서 돌아가는 그래픽엔진이 따로있을거구요.
해당 엔진에따른 UI그리는 방식도 달라 질 수 있고
플랫폼별 사용되는 View들은 추상이 아니라 이미 구현되어있기때문에 일일이 대응을 다 해 주기에는 비용이 너무 큽니다!!
(위에서 말씀드린 자마린, RN, Flutter는 각자의 방식으로 다 해주고있습니다.)

KMM

KMM은 Kotlin Multiplatform Mobile 이란 뜻으로 JetBrains사에서 만든 프레임워크입니다.
Kotlin코드로 Android, iOS에서 공용으로 사용될 모듈이라고 생각하면 됩니다.
개발하려는 domain의 밀접한 비즈니스로직을 담당하게 될겁니다.
(데이터를 가져오거나 특수한 연산, 비즈니스로직에서 구현되어야 하는 코드등 만들기나름이라 생각합니다.)

위 이미지는 JetBrains사의 KMM 공식 홈페이지에서 가져왔습니다.
모바일뿐만아니라 server쪽과도 연계하여 공통로직을 처리 할 수 있군요.🎉 (근데 그럼 너무 커지는데?)

실제 server는 KMM을 사용되지 않을것입니다.(이름자체가 코틀린 멀티플랫폼 '모바일' 입니다!!!)
server는 client 와 달리 상대적으로 처리속도가 매우매우매우매우 중요합니다.
대부분의 client 로직은 속도보다 가독성, 유지보수에 치우쳐진 코드를 작성하게 될거라 서버에서는 사용 할 이유가 없다고 생각합니다.
(common에 enum, model, CONST 변수 등은 공유가 가능할 수도 있을것 같네요...)

그럼 여기서!

  1. iOS는 JVM이 없는데 어떻게 kotlin compile을 하나요?!
    답변. 실제 iOS app에 kotlin 컴파일 관련 모듈을 추가하여 사용하게 됩니다.
    그렇게 앱 실행시 kotlin compile에서 만들어진 바이너리파일을 통해 ios에서 빌드되게됩니다.
  2. AOS는 그럼 JAVA로 App을 작성하게되면 KMM을 어떻게 빌드하나요?
    답변. AOS도 마찬가지입니다. App을 build하는 compiler와 KMM Module을 build하는 compiler는 다른 컴파일러입니다.
    App은 gradle에 작성된 Dalvik or ART를 통해 빌드되지만 KMM Module은 Kotlin native compiler가 사용됩니다.

결론. KMM을 사용하여 build할때 순수 native보다 느려질 수 있습니다.

profile
Mobile Fullstack(?) dev를 꿈꿉니다.😑

2개의 댓글

comment-user-thumbnail
2023년 8월 16일

좋은 글 감사합니다. 자주 올게요 :)

1개의 답글