KMP(Kotlin Multiplatform)로 Android와 iOS 코드 공유하기 – 이제는 한 번만 짜도 되는 시대!

Flutter나 React Native도 좋지만, 안드로이드 개발자라면 Kotlin으로 iOS까지 커버할 수 있다면 어떨까요?
오늘은 JetBrains가 만든 KMP(Kotlin Multiplatform)에 대해 알아볼게요!
KMP가 뭔데요?
KMP는 Kotlin 코드를 Android, iOS, 웹, 데스크톱 등 여러 플랫폼에서 공유할 수 있게 해주는 기술이에요
Google이 공식 지원하고 있고, 안정적이라 프로덕션에서도 사용 가능해요
이름만 봐도 알 수 있듯이, 멀티플랫폼을 지원하는 Kotlin 기술인 거죠!
원래는 KMM(Kotlin Multiplatform Mobile)이라고 불렸는데, 모바일에만 국한된 게 아니라서 이제는 KMP라고 부르고 있어요

이미지 출처: Medium
그래서 뭐가 좋은데?
공통 코드와 플랫폼별 코드를 분리할 수 있어요
shared 모듈에서 비즈니스 로직, 네트워크, 데이터 저장 같은 핵심 기능을 작성하면
Android와 iOS 각각에서 네이티브 코드랑 연동하는 방식이에요
예를 들어볼게요
로그인 처리, API 호출, 데이터 검증 같은 로직은 한 번만 작성하고
UI나 플랫폼 고유 기능(카메라, 푸시 알림 등)만 각각 구현하는 거죠
네이티브 성능도 그대로 유지돼요!
코드가 각 플랫폼의 네이티브 방식으로 컴파일되기 때문에 성능 저하 없이 동작해요
expect/actual로 플랫폼별 구현하기
플랫폼 특화 기능은 어떻게 처리하냐고요?
expect/actual 키워드를 사용하면 돼요
// commonMain
expect fun getPlatformName(): String
// androidMain
actual fun getPlatformName(): String {
return "Android"
}
// iosMain
actual fun getPlatformName(): String {
return "iOS"
}
공통 코드에서 expect로 선언하고, 각 플랫폼에서 actual로 구현하는 방식이에요
Android의 Room이나 iOS의 CoreData 같은 고유 API도 이렇게 처리할 수 있어요
CMP랑 같이 쓰면 더 좋아요
KMP로 로직만 공유할 수도 있지만
CMP(Compose Multiplatform)를 함께 사용하면 UI까지 공유할 수 있어요!
KMP + CMP 조합이 크로스플랫폼 개발의 이상적인 해법으로 평가받고 있어요
Google이나 JetBrains, 커뮤니티에서도 이 조합을 권장하고 있고요
다만 iOS UI 공유(CMP)는 아직 Beta 단계예요
비즈니스 로직 공유는 안정적이니 일단 로직부터 공유해보는 것도 좋을 것 같아요

이미지 출처: velog
시작하는 방법
Android Studio에서 바로 시작할 수 있어요
File → New → Module → Kotlin Multiplatform Shared Module 선택하면 shared 모듈이 생성돼요
// shared 모듈에서 공통 로직 작성
class Greeting {
fun greet(): String {
return "Hello from ${getPlatformName()}!"
}
}
기존 Android/iOS 프로젝트에 shared 모듈만 추가하면 되니까
점진적으로 마이그레이션하기도 좋아요
platform() 함수로 현재 플랫폼 확인도 가능하고
expect/actual로 플랫폼별 구현도 깔끔하게 처리할 수 있어요
실제로 많이 쓰고 있나요?
네! 대기업들이 실제로 사용하고 있어요
Forbes, Philips, Square, McDonald's 같은 곳에서 프로덕션에 적용했어요
Google Workspace 앱에도 적용되어 있고
2024년에 Kotlin 2.0이 출시되면서 K2 컴파일러로 컴파일 속도도 2배나 빨라졌어요
KMP 라이브러리 배포 형식도 계속 개선되고 있어서
서버, 웹, 데스크톱, iOS/Android 간 코드 공유가 점점 더 강화되고 있는 추세예요
Flutter랑 비교하면?
개인적으로 생각하는 차이점을 말씀드려볼게요
Flutter는 자체 UI 프레임워크를 사용하지만
KMP는 각 플랫폼의 네이티브 UI를 그대로 사용할 수 있어요
또 Android 개발자라면 이미 Kotlin을 알고 있으니
새로운 언어(Dart)를 배울 필요 없이 바로 시작할 수 있다는 게 큰 장점이에요
물론 Flutter가 더 나은 부분도 있어요
UI까지 완전히 통일하고 싶다면 Flutter가 더 나을 수 있죠
본인의 백그라운드와 프로젝트 특성에 맞춰 선택하면 될 것 같아요!
지금까지 KMP에 대해 알아봤는데요
Android 개발자라면 한번쯤 시도해볼 만한 기술인 것 같아요
코드 중복을 줄이고, 개발 시간을 단축하고, 일관성도 확보할 수 있으니
일석삼조 아닐까요?
다음 글에서는 실제로 KMP 프로젝트를 만들어보는 과정을 다뤄볼게요!
이전 글 보기