오늘도 더 나은 코드를 작성하였습니까?

코틀린 멀티 플랫폼 모바일(Kotlin multiPlatform) 본문

kotlin Multiplatform

코틀린 멀티 플랫폼 모바일(Kotlin multiPlatform)

hik14 2022. 6. 8. 12:05

다중 플랫폼(Android, Ios, JS) 프로그래밍 지원은 Kotlin의 중요한 장점.

네이티브 프로그래밍의 유연성과 이점을 유지하면서 다른 플랫폼에 대해 동일한 코드를 작성하고 유지 관리하는 데 소요되는 시간을 줄임

 

- Andoroid / Ios

모바일 플랫폼 간에 코드를 공유하는 것은 주요 Kotlin 다중 플랫폼 사용 사례 중 하나입니다. Kotlin Multiplatform Mobile을 사용하면 플랫폼 간 모바일 애플리케이션을 구축하고 Android와 iOS 간에 비즈니스 로직, 연결성 등의 공통 코드를 공유할 수 있습니다.

 

- Full stack web service

코드 공유가 이점을 가져올 수 있는 또 다른 시나리오는 브라우저에서 실행되는 서버와 클라이언트 측 모두에서 논리를 재사용할 수 있는 연결된 응용 프로그램입니다. 

 

Multiplatform libraries

Kotlin Multiplatform은 라이브러리 작성에도 유용합니다.

JVM, JS 및 기본 플랫폼에 대한 공통 코드 및 해당 플랫폼별 구현을 사용하여 다중 플랫폼 라이브러리를 생성할 수 있습니다.

다중 플랫폼 라이브러리를 다른 플랫폼 간 프로젝트에서 종속성으로 사용할 수 있습니다.

 

- 모바일 및 웹 애플리케이션을 위한 공통 코드

Kotlin Multiplatform을 사용하는 또 다른 인기 있는 사례는 Android, iOS 및 웹 앱에서 동일한 코드를 공유하는 것입니다. 프론트엔드 개발자가 코딩하는 비즈니스 로직의 양을 줄이고 제품을 보다 효율적으로 구현하여 코딩 및 테스트 노력을 줄입니다

 

Kotlin 다중 플랫폼 작동 방식

Kotlin 다중 플랫폼 작동 방식

 

Common Kotlin

- 언어, 핵심 라이브러리 및 기본 도구가 포함.

- common Kotlin으로 작성된 코드는 모든 플랫폼의 모든 곳에서 작동

- common 코드는 HTTP(Ktor-client), 직렬화(.serialization.kotlinx) 및 코루틴 관리와 같은 일상적인 작업을 다루는 라이브러리 세트에 의존성을 가짐

 

platform version Kotlin

- 플랫폼과 상호 운용하려면 플랫폼별 버전의 Kotlin을 사용

- 플랫폼별 Kotlin 버전(Kotlin/JVM, Kotlin/JS, Kotlin/Native)에는 Kotlin extention, 플랫폼별 라이브러리 및 도구가 포함

- 플랫폼을 통해 플랫폼 네이티브 코드(JVM, JS 및 네이티브)에 액세스하고 모든 네이티브 기능을 활용.

 

 

공유 코드에서 플랫폼별 API에 액세스해야 하는 경우 예상 및 실제 선언의 Kotlin 메커니즘을 사용

Kotlin 다중 플랫폼 라이브러리를 사용하면 공통 및 플랫폼별 코드에서 로직을 재사용

 

Android Native Code

Android App

IOS Native Code

IosApp

Shared Code

commonMain (Pure Kotlin , expect) 

androidMain (Kotlin/Android, actual)

IosMain (Kotlin / Ios, actual)

 

commonMain / Platform.kt

expect fun getOsVersion(): String

expect fun httpClient(config: HttpClientConfig<*>.() -> Unit = {}): HttpClient

IosMain / Platform.kt

import platform.UIKit.UIDevice

actual fun getOsVersion() {
    return UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
}

 

androidMain / Platform.kt

actual fun getOsVersion() {
    return "Android ${android.os.Build.VERSION.SDK_INT}"
}