학습
Kotlin Kotlin Multiplatform 기초
Kotlin Kotlin Multiplatform 기초 — 고급
Kotlin Multiplatform 기초
1. 도입 (왜 배워야 하는가)
Kotlin Multiplatform(MPP)은 여러 플랫폼(iOS, Android, 웹 등)에서 공통의 코드를 공유할 수 있게 해주는 강력한 도구입니다. 실무에서 MPP를 활용하면 코드 재사용성을 높이고, 유지보수 비용을 줄이며, 팀의 생산성을 극대화할 수 있습니다. 예를 들어, 모바일 애플리케이션을 개발할 때 Android와 iOS에서 비즈니스 로직을 공유할 수 있어 두 플랫폼에서 각각의 로직을 중복 작성할 필요가 없어집니다.
반면, MPP를 모르면 각 플랫폼별로 동일한 로직을 반복해서 작성해야 하며, 이는 시간과 비용의 낭비로 이어집니다. 또한, 버그 수정이나 기능 추가 시 두 곳에서 모두 수정해야 하므로 관리가 복잡해지는 문제도 발생합니다.
2. 핵심 개념 설명
Kotlin Multiplatform의 핵심 개념에는 아래와 같은 것들이 있습니다.
| 개념 | 설명 |
|---|---|
| Shared Code | 여러 플랫폼에서 공유되는 코드. |
| Platform-Specific Code | 각 플랫폼에 특화된 코드. |
| Expect/Actual | 공통 코드와 플랫폼 특화 코드 간의 연결. |
실생활 비유: MPP는 마치 한 집에서 여러 가족이 함께 사는 구조입니다. 가족들은 각각의 방에서 독립적으로 생활하지만, 거실이나 주방 같은 공통 공간을 공유합니다. 이처럼, MPP는 코드의 공통 부분을 공유하고, 각 플랫폼에 필요한 특화된 부분은 별도로 관리하는 방식입니다.
3. 기본 코드 예제
아래는 Kotlin Multiplatform을 이용해 공통 로직을 공유하는 간단한 예제입니다.
// commonMain/src/commonMain/kotlin/Greeting.kt
expect fun platformName(): String
fun greet(): String {
return "Hello from ${platformName()}"
}
// androidMain/src/androidMain/kotlin/Greeting.kt
actual fun platformName(): String {
return "Android"
}
// iosMain/src/iosMain/kotlin/Greeting.kt
actual fun platformName(): String {
return "iOS"
}
실행 결과
- Android: "Hello from Android"
- iOS: "Hello from iOS"
expect fun platformName(): String: 공통 모듈에서 플랫폼별로 구현해야 할 함수를 정의합니다.fun greet(): String: 플랫폼 이름을 포함한 인사 메시지를 반환하는 함수입니다.actual fun platformName(): String: Android 플랫폼에서의 구현을 제공합니다.actual fun platformName(): String: iOS 플랫폼에서의 구현을 제공합니다.- 잘못된 코드:
- 올바른 코드:
- 잘못된 코드:
- 올바른 코드:
- Kotlin Multiplatform을 사용하면 코드 재사용성이 높아진다.
- Expect/Actual 키워드를 활용하여 플랫폼별 구현을 관리할 수 있다.
- 공통 로직과 플랫폼 특화 로직을 명확하게 나누는 것이 중요하다.
코드 한 줄씩 동작 설명
4. 실전 활용 예제
쇼핑몰에서 장바구니를 구현할 때
장바구니 기능은 여러 플랫폼에서 사용되므로 공통 로직을 MPP로 구현할 수 있습니다.
// commonMain/src/commonMain/kotlin/Cart.kt
data class CartItem(val id: String, val quantity: Int)
class Cart {
private val items = mutableListOf<CartItem>()
fun addItem(item: CartItem) {
items.add(item)
}
fun totalItems(): Int {
return items.sumOf { it.quantity }
}
}
사용자 인증 처리
사용자가 로그인할 때 필요한 로직을 MPP로 관리하여 Android와 iOS에서 공유할 수 있습니다.
// commonMain/src/commonMain/kotlin/Auth.kt
expect fun login(username: String, password: String): Boolean
// androidMain/src/androidMain/kotlin/Auth.kt
actual fun login(username: String, password: String): Boolean {
// Android의 로그인 로직
}
// iosMain/src/iosMain/kotlin/Auth.kt
actual fun login(username: String, password: String): Boolean {
// iOS의 로그인 로직
}
5. 흔한 실수와 주의사항
실수 1: Expect/Actual을 혼동하기
// 잘못된 예: actual로 구현된 코드가 공통 모듈에 있음
fun platformName(): String {
return "Common"
}
expect fun platformName(): String // 공통 모듈에서 정의
실수 2: 플랫폼-specific 코드에서 공통 코드 접근
actual fun platformName(): String {
return greet() // 공통 코드에서 사용
}
actual fun platformName(): String {
return "Platform Code" // 직접적인 구현
}
6. 정리
다음 학습 주제: Kotlin Multiplatform을 활용한 모듈화 및 테스트 전략, KMP와 Gradle 설정 방법.