[Android][KMP] KMP 기본 프로젝트 시작해보기

윤찬·2025년 9월 22일

Android

목록 보기
23/38

KMP란?

KMP(Kotlin Multiplatform)는 하나의 Kotlin 코드베이스를 여러 플랫폼(Android, iOS, Desktop, Web 등)에서 공유할 수 있도록 해주는 기술

이제 Flutter나 React Native 앱 처럼 KMP를 이용하여 Kotlin 언언를 이용해 크로스 플랫폼을 만들 수 있도록 지원하고 있다.

안드로이드 CodeLab에 Kotlin 멀티플랫폼 시작하기가 있어 KMP 프로젝트를 만드는 법을 알아보자

  • 기본 요건
    • Jetpack Compose 앱 빌드 방법에 관한 지식
    • Kotlin 사용 경험
    • Swift 문법에 관한 기본적 이해
  • 필요한 항목
    • 최신 안정화 버전의 Android 스튜디오(Meerkat 이상)
    • iOS 16.0 이상을 실행하는 Xcode 16.1 및 iPhone 시뮬레이터가 설치된 macOS 시스템

시작하기 전에..

IOS 에뮬레이터 동작을 확인하기 위해서는 Xcode를 다운로드 해야한다.
Xcode는 App Store에서 다운로드 받을 수 있다. 위 조건이 만족하는 버전으로 다운로드하면 된다.

설치하고 IOS 버전 추가한 후 진행하면 된다.


KMP 설명

KMP는 코드베이스의 어느 부분을 얼마나 공유해야하는지 지정이 안되어 있으며, 이 공유할 부분을 정하는 것이 개발자의 역할이라고 한다.

개발자가 공유할 부분을 결정을 하면 플랫폼 전반의 일관성을 유지하고 중복을 줄일 수 있다고 한다.(보통 데이터베이스, 액세스, 네트워크 엑세스 등 비즈니스 로직과 테스트를 공유한다고 적혀있음)

KMP가 Android와 다른 키워드가 도입되었다. expect와 actual이다.

참고: expect/actual 클래스는 현재 실험적 기능입니다. expect/actual 함수의 인터페이스를 구현할 수도 있습니다. 모든 옵션은 문서를 참고하세요.

  • expect
    • 공통 모듈(shared code)에서 플랫폼마다 다르게 구현될 부분의 "인터페이스(약속)"를 정의할 때 사용한다.
    • 구현 내용은 없고 함수/클래스 시그니처만 사용
    • 이 기능은 반드시 플랫폼에서 구현해야한다는 선언역할
// 공통 모듈 (expect 선언)
expect class PlatformLogger {
    fun log(message: String)
}
  • actual
    • 플랫폼별 모듈(androidMain, iosMain)에서 expect로 정의된 것을 실제로 구현할 때 사용한다.
    • expect와 시그니처가 동일해야 하며, 각 플랫폼의 네이티브 API를 사용해 구현할 수 있다.
// Android 실제 구현 (actual)
actual class PlatformLogger {
    actual fun log(message: String) {
        Log.d("KMP", message)
    }
}

// iOS 실제 구현 (actual)
actual class PlatformLogger {
    actual fun log(message: String) {
        println("iOS Log: $message")
    }
}

KMP 프로젝트 만들어보기

먼저 plugins에서 KMP를 설치하자. 설치 완료되면 restart IDE가 뜰 것이다.

이제 New Project를 실행하고 아래쪽에 보면 Kotlin Multiplatform이 뜨는 것을 볼 수 있다.

프로젝트 이름까지 작성이 되면 위와 같이 어떤 플랫폼을 설치할지 나오는데 일단 Android와 IOS만 선택하고 프로젝트를 실행

프로젝트를 만들었는데 아래와 같이 No Apple Simulator Runtime found.가 뜬 경우

앱스토에서 Xcode를 설치하고 실행만 하면 되는 것이 아니라 기본 프로젝트까지 생성을 해보자.
그러면 자동으로 아래와 같이 Ios Simulator가 설치가 될 것이다.

설치가 끝나고 프로젝트를 재실행하니 아래와 같이 실패는 사라졌다.

또한 에뮬레이터 실행화면에 IOS를 선택할 수 있는 부분이 생기는 것을 볼 수 있다.

아이폰 16으로 실행을 해보면...

홀뤼... 아이폰 에뮬레이터로 실행이 되는 것을 볼 수 있다.

프로젝트 생성 및 아이폰 에뮬레이터 실행까지의 과정을 진행해봤다. 물론 프로젝트 기본으로 생성하는 폴더는 봐도 하나도 모르겠다.. 조금씩 공부하면서 익숙해져보자

profile
좋은 개발자가 되기까지

0개의 댓글