내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Kotlin Multiplatform은 동일한 프로그래밍 언어(Kotlin)로 코드를 작성할 수 있는 도구로, 휴대폰, 컴퓨터, 웹페이지 등 다양한 장치에서 동시에 실행할 수 있습니다. 이렇게 하면 각 장치에 대해 동일한 기능을 다시 작성할 필요가 없으므로 시간이 절약됩니다.
특징 1: 코드 공유 - 계산 함수와 같은 논리 코드를 한 번 작성하면 Android 및 iOS 앱 모두에서 사용할 수 있습니다.
기능 2: 플랫폼별 코드 – 장치의 카메라 사용과 같은 플랫폼 고유의 기능을 처리하기 위해 각 플랫폼에 대한 특정 코드를 작성할 수 있습니다. 예를 들어, Android의 Camera API를 사용하여 Android 애플리케이션에서 사진을 찍고, iOS 애플리케이션에서 iOS의 UIImagePickerController를 사용하여 사진을 찍습니다.
기능 3: 상호 운용성 – Kotlin Multiplatform은 기존 Java, Swift 또는 Objective-C 코드와 상호 운용할 수 있으므로 기존 프로젝트에 쉽게 통합할 수 있습니다.
특징 4: 다양한 컴파일 기간 - androidMain의 코드는 kotlin/jvm을 사용하여 Android가 이해할 수 있는 코드로 컴파일되고, iosMain의 코드는 kotlin/native를 사용하여 iOS가 이해할 수 있는 코드로 컴파일됩니다.
단계:
1. 공유 로직 정의: 먼저 공유 모듈(즉, commonMain)에서 공통 비즈니스 로직을 정의합니다. 이러한 코드는 어떤 플랫폼에도 의존하지 않으므로 어떤 플랫폼에서도 실행될 수 있습니다. - 공유를 종료합니다.
공유 논리(commonMain):
import kotlin.random.Random
class Greeting {
private val platform: Platform = getPlatform()
fun greet(): String {
val firstWord = if (Random.nextBoolean()) "Hi!" else "Hello!"
return "$firstWord Guess what this is! > ${platform.name.reversed()}!"
}
}
위의 코드는 kmp 크로스엔드의 공유 코드입니다. 이 코드는 Android와 iOS 모두에서 실행될 수 있습니다. 그러나 이 코드는 최종적으로 이 문자열에서 Platform.name을 가져와야 합니다. 터미널에서는 platform.name을 얻기 위한 kotlin 구문이 Android와 iOS에서 다르기 때문에 androidMain과 iosMain에 알릴 변명을 정의해야 하며 두 사람이 각각 platform.name을 얻기 위한 논리를 제공합니다. 그런 다음 이 논리를 구현하기 시작합니다. 코드는 다음과 같습니다.
interface Platform {
val name: String
}
expect fun getPlatform(): Platform
2. 플랫폼별 구현: androidMain 및 iosMain에서 commonMain에 인터페이스의 특정 구현을 제공하고 일부 플랫폼별 요구 사항에 대한 코드를 작성합니다.
Android 플랫폼 구현(androidMain):
import android.os.Build
class AndroidPlatform : Platform {
override val name: String = "Android ${Build.VERSION.SDK_INT}"
}
actual fun getPlatform(): Platform = AndroidPlatform()
iOS 플랫폼 구현(iosMain):
import platform.UIKit.UIDevice
class IOSPlatform: Platform {
override val name: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
}
actual fun getPlatform(): Platform = IOSPlatform()
두 사람은 "알겠습니다 형님, 저희가 구현해드리겠습니다"라고 순순히 말했다. 그거~~"