안드로이드(kotlin)

KMP(kotlin-multi-platform) 프로젝트의 기본 구조 및 모듈 나누기

기계공학 주인장 2025. 6. 2. 15:22
반응형

먼저 새롭게 KMP용 프로젝트를 만들어야합니다.


안드로이드 스튜디오를 사용해서 새로운 KMP 프로젝트 만들기

 

여기서는 Android Studio를 사용해서 KMP 프로젝트를 생성하기 때문에

 

다음과 같은 플러그인을 필요로 합니다.

 

 

이후 Android Studio로 새로운 프로젝트를 만드려고 하면 다음과 같이 Kotlin Multiplatform app을 볼 수 있습니다.

 

 

이것을 선택하고 나아가다보면 다음과 같은 창을 볼 수 있습니다.

 

기본값

그냥 기본값으로 다 놔둔 다음에 프로젝트를 생성하면됩니다.

 

이렇게 하면 간단하게 Android Studio를 사용해서 KMP 프로젝트를 만들 수 있습니다.


Kotlin Multiplatform 프로젝트 분석하기

처음 생성된 프로젝트의 내부를 보면 다음과 같습니다.

 

 

여기서 제일 중요한건 androidApp, iosApp, shared 이 세 모듈입니다.

 

각각의 역할을 다음과 같습니다.

 

  • androidApp: Android 매니페스트, 권한, 테마 Android 앱 전용 및 진입점 설정
  • iosApp: Info.plist, iOS 권한, 앱 아이콘 등 iOS 앱 전용 및 진입점 설정
  • shared: 공통 또는 별개로 사용할 앱 기능을 정의

그리고 shared의 내부를 보면 다음과 같습니다.

 

 

shared 바로 밑에는 src와 build.gradle.kts가 있고

 

src 밑에는 androidMain, commonMain, iosMain 이렇게 3개의 모듈이 존재합니다.

 

이 부분이 중요하니 각각에 대해 설명해보겠습니다.

 

  • shared/build.gradle.kts: shared 안에서 사용할 기능에 대해 필요한 라이브러리를 정의합니다. Android, iOS 별도로 사용할 수 있도록 지정할수도 있습니다.
  • androidMain: 안드로이드에서만 사용할 기능을 여기에 정의합니다.
  • commonMain: 공통으로 사용할 기능을 여기엣 정의합니다. Kotlin Native로 된 기능만 여기에 정의할 수 있습니다.
  • iosMain: iOS에서만 사용할 기능을 여기에 정의합니다.

 

Kotlin Multiplaform에서 모듈 나누기

Android의 경우에 일반적으로 기능별로 모듈을 나눕니다.

 

예를 들면 다음과 같은 형태로 모듈을 나눌 수 있습니다.

 

 

위와 같이 진입점이 되는 app 모듈이 있고 기능별로 동일한 위치에 모듈을 생성해서 만듭니다.

 

하지만, KMP 프로젝트에서는 위와 같은 방법(=기능 단위 모듈)보다는 패키지 단위로 모듈을 나눕니다.

 

그 이유는 다음과 같습니다.

 

가장 큰 이유는 패키지 단위로 모듈을 분리하는 데는 KMP 특유의 기술적 제약사항과 복잡성 때문입니다.

 

모듈 분리에 따른 Android vs iOS 차이점:
Android: 각 feature 모듈에 직접 의존하거나 일부만 선택적으로 사용 가능
iOS: umbrella framework를 통해 모든 모듈을 한 번에 소비해야 함

 

그렇기 때문에 안드로이드에서 모듈 분리와 KMP에서의 모듈 분리를 생각하면

 

다음과 같으 차이점이 있기 때문에 KMP에서는 패키지 단위의 모듈 분리를 실시합니다.

 

Android 네이티브 모듈화
• 증분 빌드가 매우 효과적
• Gradle 최적화가 잘 되어 있음
• 모듈 간 의존성 관리가 단순함
• Dynamic Feature Module 등 고급 기능 지원


KMP 모듈화의 현실
• iOS 네이티브 컴파일의 복잡성
• Umbrella framework 제약
• 크로스플랫폼 의존성 관리의 복잡성

 

https://github.com/android/kotlin-multiplatform-samples/tree/main/Fruitties

 

kotlin-multiplatform-samples/Fruitties at main · android/kotlin-multiplatform-samples

Samples showcasing the Kotlin Multiplatform Jetpack libraries - android/kotlin-multiplatform-samples

github.com

 

Google의 KMP 예시 프로젝트도 패키지 단위의 모듈 분리를 실시하고 있는 것을 알 수 있습니다.

 


참고가 될 링크로 KMP 프로젝트 만들기 튜토리얼을 첨부합니다.

 

https://developer.android.com/codelabs/kmp-get-started?hl=ko#5

 

Kotlin 멀티플랫폼 시작하기  |  Android Developers

두 개의 별도 Android 및 iOS 프로젝트에서 Kotlin 멀티플랫폼을 시작하는 방법을 알아보세요. 이 Codelab에서는 Kotlin 멀티플랫폼(KMP) 모듈을 추가하여 Android 앱과 iOS 앱 간에 코드를 공유하는 방법을

developer.android.com

 

반응형