Skip to content

자주 묻는 질문

코틀린 멀티플랫폼

코틀린 멀티플랫폼이란 무엇인가요?

코틀린 멀티플랫폼 (KMP)은 JetBrains의 오픈 소스 기술로, 유연한 크로스 플랫폼 개발을 지원합니다. 이 기술을 통해 다양한 플랫폼용 애플리케이션을 생성하고, 네이티브 프로그래밍의 이점을 유지하면서 코드 재사용을 효율적으로 할 수 있습니다. 코틀린 멀티플랫폼을 사용하면 Android, iOS, 데스크톱, 웹, 서버 측 및 기타 플랫폼용 앱을 개발할 수 있습니다.

코틀린 멀티플랫폼으로 UI를 공유할 수 있나요?

네, JetBrains의 코틀린 기반 선언형 UI 프레임워크인 컴포즈 멀티플랫폼제트팩 컴포즈를 사용하여 UI를 공유할 수 있습니다. 이 프레임워크를 통해 iOS, Android, 데스크톱, 웹과 같은 플랫폼을 위한 공유 UI 컴포넌트를 만들 수 있으며, 다양한 기기와 플랫폼에서 일관된 사용자 인터페이스를 유지하는 데 도움이 됩니다.

자세한 내용은 컴포즈 멀티플랫폼 섹션을 참조하세요.

코틀린 멀티플랫폼은 어떤 플랫폼을 지원하나요?

코틀린 멀티플랫폼은 Android, iOS, 데스크톱, 웹, 서버 측 및 기타 플랫폼을 지원합니다. 지원되는 플랫폼에 대해 자세히 알아보세요.

크로스 플랫폼 앱 작업은 어떤 IDE에서 해야 하나요?

코틀린 멀티플랫폼 프로젝트 작업에는 Android Studio IDE를 사용하는 것을 권장합니다. 사용 가능한 다른 대안에 대한 자세한 내용은 권장 IDE 및 코드 편집기를 참조하세요.

새 코틀린 멀티플랫폼 프로젝트를 어떻게 만드나요?

코틀린 멀티플랫폼 앱 만들기 튜토리얼은 코틀린 멀티플랫폼 프로젝트를 생성하기 위한 단계별 지침을 제공합니다. 로직만 공유할지 또는 로직과 UI를 모두 공유할지 결정할 수 있습니다.

기존 Android 애플리케이션이 있습니다. 코틀린 멀티플랫폼으로 어떻게 마이그레이션할 수 있나요?

Android 애플리케이션이 iOS에서 작동하도록 만들기 단계별 튜토리얼은 기존 Android 애플리케이션이 네이티브 UI를 사용하여 iOS에서 작동하도록 하는 방법을 설명합니다. 컴포즈 멀티플랫폼으로 UI도 공유하고 싶다면 해당 답변을 참조하세요.

가지고 놀 만한 완전한 예제는 어디서 구할 수 있나요?

다음은 실제 사례 목록입니다.

실제 코틀린 멀티플랫폼 애플리케이션 목록은 어디서 찾을 수 있나요? 어떤 회사에서 KMP를 프로덕션 환경에서 사용하나요?

코틀린 멀티플랫폼을 이미 프로덕션 환경에 도입한 다른 회사들로부터 배우려면 성공 사례 목록을 확인해 보세요.

어떤 운영 체제에서 코틀린 멀티플랫폼과 함께 작업할 수 있나요?

공유 코드 또는 iOS를 제외한 플랫폼별 코드와 함께 작업하려는 경우, IDE가 지원하는 모든 운영 체제에서 작업할 수 있습니다.

권장 IDE에 대해 자세히 알아보세요.

iOS 전용 코드를 작성하고 iOS 애플리케이션을 시뮬레이터나 실제 기기에서 실행하려면 macOS가 설치된 Mac을 사용해야 합니다. 이는 Apple 요구 사항에 따라 iOS 시뮬레이터가 macOS에서만 실행될 수 있고, Microsoft Windows 또는 Linux와 같은 다른 운영 체제에서는 실행될 수 없기 때문입니다.

코틀린 멀티플랫폼 프로젝트에서 동시성 코드를 어떻게 작성하나요?

코틀린 멀티플랫폼 프로젝트에서 비동기 코드를 작성하기 위해 코루틴과 Flow를 계속 사용할 수 있습니다. 이 코드를 어디에서 호출하느냐에 따라 호출 방식이 달라집니다. 코틀린 코드에서 중단 함수(suspending function)와 Flow를 호출하는 방법은 특히 Android용으로 광범위하게 문서화되어 있습니다. Swift 코드에서 호출하는 방법은 약간의 추가 작업이 필요합니다. 자세한 내용은 KT-47610을 참조하세요.

Swift에서 중단 함수와 Flow를 호출하는 현재 가장 좋은 방법은 KMP-NativeCoroutines와 같은 플러그인 및 라이브러리를 Swift의 async/await 또는 Combine 및 RxSwift와 같은 라이브러리와 함께 사용하는 것입니다.

사용 방법을 배우려면 iOS와 Android 간에 더 많은 로직 공유를 참조하세요.

코틀린/네이티브는 무엇이며, 코틀린 멀티플랫폼과 어떤 관련이 있나요?

코틀린/네이티브는 코틀린 코드를 가상 머신 없이 실행할 수 있는 네이티브 바이너리로 컴파일하는 기술입니다. 여기에는 코틀린 컴파일러를 위한 LLVM 기반 백엔드와 코틀린 표준 라이브러리의 네이티브 구현이 포함됩니다.

코틀린/네이티브는 주로 임베디드 장치 및 iOS와 같이 가상 머신이 바람직하지 않거나 불가능한 플랫폼용 컴파일을 허용하도록 설계되었습니다. 추가 런타임이나 가상 머신을 필요로 하지 않는 독립 실행형 프로그램을 생성해야 할 때 특히 적합합니다.

예를 들어, 모바일 애플리케이션에서 코틀린으로 작성된 공유 코드는 Android용으로는 코틀린/JVM으로 JVM 바이트코드로 컴파일되고, iOS용으로는 코틀린/네이티브로 네이티브 바이너리로 컴파일됩니다. 이를 통해 두 플랫폼 모두에서 코틀린 멀티플랫폼과의 원활한 통합이 가능합니다.

Kotlin/Native and Kotlin/JVM binaries

네이티브 플랫폼(iOS, macOS, Linux)용 코틀린 멀티플랫폼 모듈 컴파일 속도를 어떻게 높일 수 있나요?

코틀린/네이티브 컴파일 시간 개선 팁을 참조하세요.

컴포즈 멀티플랫폼

컴포즈 멀티플랫폼이란 무엇인가요?

컴포즈 멀티플랫폼은 JetBrains에서 개발한 현대적인 선언적이고 반응형 UI 프레임워크로, 적은 양의 코틀린 코드로 사용자 인터페이스를 쉽게 구축할 수 있도록 지원합니다. 또한 UI를 한 번 작성하여 지원되는 모든 플랫폼(iOS, Android, 데스크톱(Windows, macOS, Linux), 웹)에서 실행할 수 있도록 합니다.

Android용 제트팩 컴포즈와 어떤 관련이 있나요?

컴포즈 멀티플랫폼은 Google에서 개발한 Android UI 프레임워크인 제트팩 컴포즈와 대부분의 API를 공유합니다. 실제로 컴포즈 멀티플랫폼을 사용하여 Android를 타겟팅할 때, 앱은 단순히 제트팩 컴포즈 위에서 실행됩니다. 컴포즈 멀티플랫폼이 타겟팅하는 다른 플랫폼은 Android의 제트팩 컴포즈와 다른 내부 구현 세부 사항을 가질 수 있지만, 여전히 동일한 API를 제공합니다.

자세한 내용은 프레임워크 간의 상호 관계 개요를 참조하세요.

어떤 플랫폼 간에 UI를 공유할 수 있나요?

Android, iOS, 데스크톱(Linux, macOS, Windows) 및 웹(Wasm 기반)을 포함하여 인기 있는 플랫폼의 모든 조합 간에 UI를 공유할 수 있는 옵션을 제공하고자 합니다. 컴포즈 멀티플랫폼은 현재 Android, iOS, 데스크톱에 대해서만 Stable 상태입니다. 자세한 내용은 지원되는 플랫폼을 참조하세요.

컴포즈 멀티플랫폼을 프로덕션 환경에서 사용할 수 있나요?

컴포즈 멀티플랫폼의 Android, iOS, 데스크톱 타겟은 Stable 상태입니다. 프로덕션 환경에서 사용할 수 있습니다.

WebAssembly 기반의 컴포즈 멀티플랫폼 웹 버전은 알파(Alpha) 상태이며, 이는 활발하게 개발 중임을 의미합니다. 주의해서 사용할 수 있으며 마이그레이션 문제가 발생할 수 있습니다. 이 버전은 iOS, Android, 데스크톱용 컴포즈 멀티플랫폼과 동일한 UI를 가지고 있습니다.

새 컴포즈 멀티플랫폼 프로젝트를 어떻게 만드나요?

공유 로직 및 UI가 포함된 컴포즈 멀티플랫폼 앱 만들기 튜토리얼은 Android, iOS, 데스크톱용 컴포즈 멀티플랫폼을 사용하여 코틀린 멀티플랫폼 프로젝트를 생성하기 위한 단계별 지침을 제공합니다. 코틀린 개발자 옹호자(Developer Advocate)인 Sebastian Aigner가 만든 YouTube 영상 튜토리얼도 시청할 수 있습니다.

컴포즈 멀티플랫폼으로 앱을 빌드하려면 어떤 IDE를 사용해야 하나요?

Android Studio IDE를 사용하는 것을 권장합니다. 자세한 내용은 권장 IDE 및 코드 편집기를 참조하세요.

데모 애플리케이션을 체험해 볼 수 있나요? 어디서 찾을 수 있나요?

저희 샘플을 통해 체험해 볼 수 있습니다.

컴포즈 멀티플랫폼에는 위젯이 포함되어 있나요?

네, 컴포즈 멀티플랫폼은 Material 3 위젯을 완벽하게 지원합니다.

Material 위젯의 모양을 어느 정도까지 사용자 지정할 수 있나요?

Material의 테마 기능(theming capabilities)을 사용하여 색상, 글꼴 및 패딩을 사용자 지정할 수 있습니다. 고유한 디자인을 만들고 싶다면 사용자 정의 위젯과 레이아웃을 만들 수 있습니다.

기존 코틀린 멀티플랫폼 앱에서 UI를 공유할 수 있나요?

애플리케이션이 UI에 네이티브 API를 사용하는 경우(가장 일반적인 경우), 상호 운용성(interoperability)을 제공하므로 일부를 점진적으로 컴포즈 멀티플랫폼으로 다시 작성할 수 있습니다. 네이티브 UI를 컴포즈로 작성된 공통 UI를 감싸는 특수 상호 운용 뷰(interop view)로 대체할 수 있습니다.

Jetpack Compose를 사용하는 기존 Android 애플리케이션이 있습니다. 다른 플랫폼으로 마이그레이션하려면 어떻게 해야 하나요?

앱 마이그레이션은 UI 마이그레이션과 로직 마이그레이션의 두 부분으로 구성됩니다. 마이그레이션의 복잡성은 애플리케이션의 복잡성과 사용하는 Android 전용 라이브러리 양에 따라 달라집니다. 대부분의 화면을 변경 없이 컴포즈 멀티플랫폼으로 마이그레이션할 수 있습니다. 모든 Jetpack Compose 위젯이 지원됩니다. 그러나 일부 API는 Android 타겟에서만 작동합니다. 이들은 Android 전용이거나 아직 다른 플랫폼으로 포팅되지 않은 것일 수 있습니다. 예를 들어, 리소스 처리는 Android 전용이므로 컴포즈 멀티플랫폼 리소스 라이브러리로 마이그레이션하거나 커뮤니티 솔루션을 사용해야 합니다. Android 내비게이션 라이브러리도 Android 전용이지만, 사용 가능한 커뮤니티 대안이 있습니다. Android 전용 컴포넌트에 대한 자세한 내용은 현재 Android 전용 API 목록을 참조하세요.

비즈니스 로직을 코틀린 멀티플랫폼으로 마이그레이션해야 합니다. 코드를 공유 모듈로 이동하려고 하면 Android 종속성을 사용하는 부분이 컴파일되지 않으므로 다시 작성해야 합니다.

  • Android 전용 종속성을 사용하는 코드를 대신 멀티플랫폼 라이브러리를 사용하도록 다시 작성할 수 있습니다. 일부 라이브러리는 이미 코틀린 멀티플랫폼을 지원할 수 있으므로 변경할 필요가 없습니다. KMP-awesome 라이브러리 목록을 확인할 수 있습니다.
  • 또는 공통 코드를 플랫폼별 로직과 분리하고, 플랫폼에 따라 다르게 구현되는 공통 인터페이스를 제공할 수 있습니다. Android에서는 기존 기능을 사용하여 구현할 수 있으며, iOS와 같은 다른 플랫폼에서는 공통 인터페이스에 대한 새로운 구현을 제공해야 합니다.

기존 iOS 앱에 컴포즈 화면을 통합할 수 있나요?

네. 컴포즈 멀티플랫폼은 다양한 통합 시나리오를 지원합니다. iOS UI 프레임워크와의 통합에 대한 자세한 내용은 SwiftUI 통합UIKit 통합을 참조하세요.

UIKit 또는 SwiftUI 컴포넌트를 컴포즈 화면에 통합할 수 있나요?

네, 가능합니다. SwiftUI 통합UIKit 통합을 참조하세요.

모바일 OS가 업데이트되어 시스템 컴포넌트의 시각적 스타일이나 동작이 변경되면 어떻게 되나요?

모든 컴포넌트가 캔버스에 그려지기 때문에 OS 업데이트 후에도 UI는 동일하게 유지됩니다. 화면에 네이티브 iOS 컴포넌트를 포함하는 경우, 업데이트가 해당 모양에 영향을 미칠 수 있습니다.

향후 계획

코틀린 멀티플랫폼 발전 계획은 무엇인가요?

저희 JetBrains는 멀티플랫폼 개발에 최고의 경험을 제공하고 기존 멀티플랫폼 사용자들의 어려움을 해소하기 위해 많은 투자를 하고 있습니다. 핵심 코틀린 멀티플랫폼 기술, Apple 생태계와의 통합, 툴링, 그리고 컴포즈 멀티플랫폼 UI 프레임워크를 개선할 계획을 가지고 있습니다. 저희 로드맵을 확인해 보세요.

컴포즈 멀티플랫폼은 언제 Stable 상태가 되나요?

컴포즈 멀티플랫폼은 Android, iOS, 데스크톱에 대해서는 Stable 상태이며, 웹 플랫폼 지원은 알파(Alpha) 상태입니다. 웹 플랫폼의 안정(Stable) 릴리스를 위해 노력 중이며, 정확한 날짜는 추후 발표될 예정입니다.

안정성 상태에 대한 자세한 내용은 지원되는 플랫폼을 참조하세요.

코틀린 및 컴포즈 멀티플랫폼의 웹 타겟에 대한 향후 지원은 어떻게 되나요?

현재 WebAssembly (Wasm)에 자원을 집중하고 있으며, 이는 큰 잠재력을 보여주고 있습니다. 새로운 코틀린/Wasm 백엔드와 Wasm 기반 컴포즈 멀티플랫폼 for 웹을 실험해 볼 수 있습니다.

JS 타겟의 경우, 코틀린/JS 백엔드는 이미 Stable 상태에 도달했습니다. 컴포즈 멀티플랫폼에서는 리소스 제약으로 인해 JS Canvas에서 Wasm으로 초점을 전환했습니다. Wasm이 더 큰 가능성을 지닌다고 믿기 때문입니다.

또한, 이전에는 Compose Multiplatform for web으로 알려진 Compose HTML도 제공합니다. 이는 Kotlin/JS에서 DOM과 작업하기 위한 추가 라이브러리이며, UI를 플랫폼 간에 공유하기 위한 용도는 아닙니다.

멀티플랫폼 개발을 위한 툴링 개선 계획이 있나요?

네, 멀티플랫폼 툴링과 관련된 현재의 어려움을 충분히 인지하고 있으며, 여러 영역에서 개선 작업을 활발히 진행하고 있습니다.

Swift 상호 운용성을 제공할 예정인가요?

네. 현재 코틀린 코드를 Swift로 내보내는 데 중점을 두고 Swift와의 직접적인 상호 운용성을 제공하기 위한 다양한 접근 방식을 조사하고 있습니다.