라인 테크 토크에서 공유한 "코틀린 2.0을 통해 알아보는 코틀린의 미래" 발표 자료입니다.
Kotlin 2.0 ਸ ా೧ ঌইࠁח Kotlin ېLeonardo YongUk Kim2023.05
View Slide
2Contents0102030405Kotlin 2.0 ߂ ୶оੋ য ചKotlin MultiplatformCompose for iOSCompose for DesktopCompose for Web
1. Kotlin 2.0 ߂ ୶оੋ য ച
,ࣁ҅ীࢲفߣ૩۽֫,PUMJOীبੑغחۿূ٘
5K2 ஹੌ۞ بੋ ۿূ٘ ೱ࢚https://blog.jetbrains.com/ko/kotlin/2023/04/kotlinconf-2023-opening-keynote/
6ۿূ٘৬ ߔূ٘о ޖੋоਃ?ۿূ٘ࢲ৬ दݭ౮ গօۄ۽ ҳࢿ.ࣗझ٘ܳ ੍য ҳޙ ܻܳ ٜ݅Ҋ ࠁܳ୶оೣ.ߔূ٘р ٘ ࢤࢿ & ୭ചӝ৬ ݠन ٘ ࢤࢿ ୭ച۽ ա־য.୭ചܳ ೞҊ ӝ҅য ٘ա ఋѶ ٘ܳ ࢤࢿ. ౣܽ ҃ীח ߄ Bytecodeա LLVMBitcodeо ఋѶ.ౣܽౣܽ ҃ী (1.3ө) р ٘ ࢤࢿ & ୭ചӝо হ. ബਯࠁח ౣܽ য ߊ ؊ ਃ೮.(ӝࣿࠗ)https://twitter.com/kotlin
7ߔূ٘ী IR بੑIR ߔূ٘ীࢲ ҕਬೞח р ࣻળ যIRgenerator& optimizerIRਸ ٜ݅Ҋ ୭ച ೞח . ౣܽ ֎౭࠳ܳ ٜ݅ݴ ࢜܂ѱ ୶о. റ JVM(1.5)җ JS(1.6)ਸ IRਸ ॳب۾ ࢿ. ҕాੋ ୭ചܳ ೡ ࣻ . (Ӓөח ߔূ٘݃ ߹ب۽ ࢿ.) بೞח ঋও݅ ࢜ ߔূ٘ ࢿמೱ࢚!https://twitter.com/kotlin
թ Ѫ ۿূ٘ۨѢद PSI (Program Structure Interface)PSIProgram Structure Interfaceౣܽ ٘ܳ यೠ Ѿҗ ܻ. IntelliJীࢲ ݢ ॳ؍ ҳઑܳ ౣܽ ஹੌ۞ب ରਊ.ࣗझ ٘৬ Ѣ غח ױࣽೠ ഋక.
PSIViewer۽ PSIܳ ഛੋ оמ
ܳ ח BindingContextKotlin Compiler In past, 1.4 and beyond
PSI + BindingContextо ޙઁо աਃ?୭ച ۿূ٘ ࣻળীࢲ PSIীࢲ ୭ചܳ ೞח Ѫ औ ঋ.ޙݓ ߹ب BIndingContextী ח Ѫب ୭ചী જ ޅೣ.நए झ BindingContextо Ѣೠ Mapযࢲ நए ബਯী જ ޅೣ.
Frontend Intermediate Representationߔূ٘ীѱ ׳ೡ ࢜۽ р যhttps://twitter.com/kotlin
Kotlin FIR ViewerFIRਸ ࠅ ࣻ ח ࠭য https://github.com/google/Kotlin-FirViewer
Kotlin Compiler In past, 1.4 and beyond
ۿূ٘৵ FIR فѐо աਃ?ࢲ 3BX'*3࠽؊ "OBMZ[Fழझܻ '*3 '*3ױLoweringױࣽച(simplify)ۄҊ ࢸݺ. ٣गѢ݂(Desugraing)ۄҊب അ.࠺ҳઑച (Desctructure)ܳ োࣘػ ੑਵ۽ ߸҃.for ١ਸ whileਵ۽ ߸҃. ো(+, +=, in, …)١ਸ ݺदੋ ഐ۽ ߸ഋ.ӝఋ ۿূ٘ ࣻળীࢲ ୭ചب ࣻ೯.
18FIR ӝ߈ ۿূ ஹੌ۞ ࢿמ FIR ӝ߈ਵ۽ ݅ٚ ۿূ٘ח PSI + BindingContext ӝ߈ ۿূ٘ ࠁ ഻न ࡅܴ.IDEIDEب ۿূ٘ܳ ҕਬ. ੋభܻઁীࢲ ܳ ঈೞҊ ٘ ೞۄ, ࠙ࢳೞח ࣘبо ࡈۄ.Kotlin IDE ۞Ӓੋ ࢿ.
19о ݆ ਃ߉ ӝמStatic Extensions ੋझఢझо ইפ؊ۄب ഛ ೣࣻܳ ٜ݅ ࣻ .Collection Literals listOf, mapOf, setOf о ইצ ܻఠۡ۽ ஸ۩࣌.Name-based Destructuring ࠺ҳઑച(ҳઑ࠙೧)ܳ ਤ ӝ߈ ইפۄ ܴ ӝ߈ਵ۽.Explicit Fields э ஶࣆ private, public ۽ಌ౭ܳ ٜ݅ ঋইب ؽ.Context Receivers ݯߡ ഛ ೣࣻ ৻ী Contextܳ ೡ ߑߨ ୶о.
20 ഛ (Static Extensions)https://youtrack.jetbrains.com/issue/KT-11968File.open("data.txt")
21 ഛ (Static Extensions)https://youtrack.jetbrains.com/issue/KT-11968File.open("data.txt")fun File.Companion.open(name: String)
22 ഛ (Static Extensions)https://youtrack.jetbrains.com/issue/KT-11968File.open("data.txt")fun File.Companion.open(name: String)
23 ഛ (Static Extensions)https://youtrack.jetbrains.com/issue/KT-11968File.open("data.txt")fun File.Static.open(name: String)
24ஸ۩࣌ ܻఠۡ (Collection Literals)https://youtrack.jetbrains.com/issue/KT-43871cmdArgs = listOf("-language-version", "2.0")
25ஸ۩࣌ ܻఠۡ (Collection Literals)https://youtrack.jetbrains.com/issue/KT-43871cmdArgs = [“-language-version", “2.0"]
26ஸ۩࣌ ܻఠۡ (Collection Literals)https://youtrack.jetbrains.com/issue/KT-43871cmdArgs = [“-language-version", “2.0”]val skip = persistentSetOf(0, 1)
27ஸ۩࣌ ܻఠۡ (Collection Literals)https://youtrack.jetbrains.com/issue/KT-43871cmdArgs = [“-language-version", “2.0”]val skip: PersistentSet = [0, 1]
28ஸ۩࣌ ܻఠۡ (Collection Literals)https://youtrack.jetbrains.com/issue/KT-43871cmdArgs = [“-language-version", “2.0”]val skip = PersistentSet [0, 1]
29ܴ ӝ߈ ࠺ҳઑച (Name-Based Restructuring)https://youtrack.jetbrains.com/issue/KT-19627data class Person(valfirstName: String,val lastName: String)
30ܴ ӝ߈ ࠺ҳઑച (Name-Based Restructuring)https://youtrack.jetbrains.com/issue/KT-19627EBUBDMBTT1FSTPO WBMfiSTU/BNF4USJOH WBMMBTU/BNF4USJOHWBMfiSTU/BNF MBTU/BNFQFSTPO
31ܴ ӝ߈ ࠺ҳઑച (Name-Based Restructuring)https://youtrack.jetbrains.com/issue/KT-19627EBUBDMBTT1FSTPO WBMfiSTU/BNF4USJOH WBMMBTU/BNF4USJOHWBM MBTU/BNF fiSTU/BNFQFSTPO
32ஶఖझ ࣻन (Context Receivers)https://youtrack.jetbrains.com/issue/KT-10468fun process(context: ServiceContext,request: ServiceRequest) {val data = request.loadData(context)}
33ஶఖझ ࣻन (Context Receivers)https://youtrack.jetbrains.com/issue/KT-10468fun process(context: ServiceContext,request: ServiceRequest) {val data = request.loadData(context)}context(ServiceContext)fun processRequest(request: ServiceRequest)
34ஶఖझ ࣻन (Context Receivers)https://youtrack.jetbrains.com/issue/KT-10468context(ServiceContext)fun processRequest(request: ServiceRequest) {val data = request.loadData()//}
35ஶఖझ ࣻन (Context Receivers)https://youtrack.jetbrains.com/issue/KT-10468context(ServiceContext)fun processRequest(request: ServiceRequest) {val data = request.loadData()//}context(ServiceContext)fun ServiceRequest.loadData(): Data
36ݺद ٘ (Explicit Fields)https://youtrack.jetbrains.com/issue/KT-14663private val _applicationState =MutableStateFlow(State())val applicationState: StateFlowget() = _applicationState
37ݺद ٘ (Explicit Fields)https://youtrack.jetbrains.com/issue/KT-14663private val _applicationState =MutableStateFlow(State())val applicationState: StateFlowget() = _applicationStateval applicationState: StateFlowfield = MutableStateFlow(State())
38ؘఠۨhttps://github.com/kotlin/dataframeval df = DataFrame.readCSV("KotlinSO.csv")
39ؘఠۨhttps://github.com/kotlin/dataframeval df = DataFrame.readCSV("KotlinSO.csv")val kmp = df.filter {tags?.contains("multiplatform")?: false}
40K2 ۿূ٘ীࢲח ۞Ӓੋਸ ਊೞӝ एਕࢲ ೧Ѿval df = DataFrame.readCSV("KotlinSO.csv")val kmp = df.filter {tags?.contains("multiplatform")?: false}kmp.add("years") { creationData.year }.groupBy { year }.count()
41ؘఠۨ
2. Kotlin Multiplatform
43ݒ֙ ݣ౭ۖಬ ۄ࠳۞ܻח ૐо.
44ౣܽ ݣ౭ۖಬ ই ߬ఋ ױ҅
45Kotlin Multiplatform ۄ࠳۞ܻ
46Kotlin Multiplatform Mobileਸ ਤ೧ ਃೠ ѪAndroidStudioݣ౭ۖಬ গܻா࣌ਸ ٜ݅Ҋ दޛۨఠա ೞ٘ਝযܳ प೯.
47Kotlin Multiplatform Mobileਸ ਤ೧ ਃೠ ѪXcodeXcodeח ߔӒۄ٘ীࢲ ࣻ೯ ؽ.Kotlin/Nativeо ઓೞח ߡਸ ࢸ೧ঠ ೣ.
48Kotlin Multiplatform Mobileਸ ਤ೧ ਃೠ ѪKotlinMultiplatformMobileউ٘۽٘ झౚ٣য়ীࢲ Kotlin Multiplatform Mobile ۞Ӓੋ ࢸ.
49Kotlin Multiplatform Mobileਸ ਤ೧ ਃೠ ѪJDK Android Studioী ೧ ࢸ.Kotlin Plugin Android Studioী ࢸ. সؘܳ ೧ࢲ ߡਸ ୭नച ೧ঠ.
50Kotlin Multiplatform Mobileਸ ਤ೧ ਃೠ ѪKDoctor KMMਸ ਤ೧ ਃೠ ജ҃ ח Ѩೞח জ.
51
52Kotlin Multiplatform Mobileਸ ਤ೧ ਃೠ ѪCocoaPods KMM SPM(SwiftPackageManager)ܳ ਗೞ ঋ. ( ৵!)
53Kotlin Multiplatform Appਵ۽ ࢜ ۽ંܳ ݅ٞ.
54ಁః ֎ উ٘۽٘/߄ জۢ بݫੋ ࣽਵ۽ ೣ.
55জ ֎ӝࠄਵ۽ androidApp, iosApp, shared۽ জ ֎ ೧.iOS framework distribution Regular۽ Cocoapods -_-ਸ ࢶఖೡ ࣻ .
56androidApp উ٘۽٘ ҙ۲ ٘ח androidApp ইې ਤೣ
57উ٘۽٘חCompose۽ ࢤࢿ ؽ
58iosApp iOS ҙ۲ ٘ח iOSAppী ਤೣ.
59iOSח SwiftUI۽Compose ইתפ.
60
61ߡ ܻח যڌѱ ೮ਸөਃ?expect৬ actualshared/src/commonMainiOS৬ Androidীࢲ ݽف ࢎਊೡ ੋఠಕझܳ expect ఃਕ٘۽ ݅ٞ.
62ߡ ܻח যڌѱ ೮ਸөਃ?expect৬ actualshared/src/androidMainAndroid ҳഅਸ actual ఃਕ٘ܳ ࠢৈ ҳഅ
63ߡ ܻח যڌѱ ೮ਸөਃ?expect৬ actualshared/src/iOSMainiOS ҳഅਸ actual ఃਕ٘ܳ ࠢৈ ҳഅ
64KMM for iOSীࢲ ݅աѱ غח ࢚ടٜObjCഅ Kotlin ObjC݅ ਗ೧ࢲ ઁցܼ ېझ݅ ਗೞҊ ੋఠಕझܳ ਗೞ ޅೣ. Abstractclassܳ न ࢎਊ೧ঠ ೣ. @HinddenFromObjC, @ObjcName ఃਕ٘ܳ ӓਵ۽ ഝਊೞ.@ObjcName(swiftName=“_”) _ח ౠࣻೠ ఃਕ٘.plane.fuel(volume: .Gallos(gallos: 12.5)) न plane.fuel(.Gallons(12.5)) ӝਵ۽ח ܽ Swiftܳ ߄۽ ఋѱೡ Ѫ. Swiftܳ ObjeCܳ ઁ৻ೞҊ ߄ੋ٘ೡ ࣻ হӝী ߊࢤೠ ޙઁ.SourceKitten৬ э بҳٜ۽ р ٘ܳ ࢤࢿೞ.ۄੋ ؘݫী ѻ য۰Suspendsuspendח ߔ(completion handler) غҊ ߔ Swiftীࢲ async۽ ഐ оמೞ݅ ஂࣗо ࠛоמೣ. Flowب ੜ ਗغ ঋ. KMP-NativeCoroutines ۄ࠳۞ܻܳ ഝਊ೧ঠ ೣ.https://github.com/rickclephas/KMP-NativeCoroutines ౣܽ ৻о झਤ ೩ٜ۞ ׳ غ ঋਸ ࣻ য @Throws ఃਕ٘۽ Errorܳ ೧ঠ ೣ.
65KMM for iOSীࢲ ݅աѱ غח ࢚ടٜCocoaPodsই ҕधਵ۽ SPM(Swift Package Manager)ܳ ਗೞ ঋ. Gradle API ࣻળীࢲ ܻػ റী ਗೠҊ ೣ. (ઁ?)CocoaPodsח ઓࢿਸ ࣗझ۽ оઉ৬ э ࠽٘ী ࢎਊೞӝী ݒ ࠺ബਯ.TouchLab ۄ࠳۞ܻ KMMBridgeܳ ࢎਊद.https://github.com/touchlab/KMMBridge SPMਸ ೞӝ ਤ೧ࢲח Git ܻನషܻ৬ झక౮ ੌ ࣗо ਃೞ. (AWS?)FrozenGlobal Objectח ӝࠄਵ۽ frozen. Ӕೡ ࣻ ݅ ߸҃ೡ ࣻ হ.@ThreadLocalਸ ࠢݶ freeze ഐ উೣ. Atomicೠ ܐҳઑ ࢎਊ ਃೡ ࣻ . freeze() ഛ ೣࣻܳ ਊ೧ ؘఠܳ ܾ ࣻ Ҋ ಽ ࣻח হ.Global ۽ಌ౭ח ݫੋझۨ٘ীࢲ݅ ࠅ ࣻ .
66KMM for iOSীࢲ ݅աѱ غח ࢚ടٜMemoryManagementझఖ ۨझ ٣ߡӦ য۵Ҋ, ݫݽܻ ݒפݢо ই উח ঋ. https://youtrack.jetbrains.com/issue/KT-55512ଵҊKotlin Multiplatform Mobileਸ ഝਊೠ ؘ݃ী ٘ۄߡজ ѐߊ ঠӝKotlin/Multiplatform for iOS developers : state & future by Salomon Brys
3. Compose for iOS
68Compose Multiplatform mobile applicationమ݁ਸ ਊ೧ࢲ द೧ঠమ݁ https://github.com/JetBrains/compose-multiplatform-ios-android-template
69Compose for iOSܳ ਤ೧ ਃೠ ѪAndroidStudioAndroid জҗ iOS জܳ प೯ೡ ࣻ ח ѐߊ ജ҃.XcodeXcodeח ߔӒۄ٘ীࢲ ࣻ೯ ؽ.Kotlin/Nativeо ઓೞח ߡਸ ࢸ೧ঠ ೣ.KotlinMultiplatformMobileউ٘۽٘ झౚ٣য়ীࢲ Kotlin Multiplatform Mobile ۞Ӓੋ ࢸ.CocoaPods Compose for iOSب SPM(SwiftPackageManager)ܳ ਗೞ ঋ.
70Compose for iOSܳ ਤ೧ ਃೠ Ѫ
71shared/src/commonMain
72androidApp/src/commonMain
73iosApp/iosApp
74iosApp/iosApp
75sharedApp/src/iosMain
76 ߸҃೧ࠁח Compose for iOSTextField ୶о TextFieldܳ ୶оೞח ؘݽܳ द.
4. Compose for Desktop
78Compose for Desktop ౠCross-Platformݣ౭ۖಬ ইצ ۽झۖಬਵ۽ ࠙ܨ. JVM ఋѶҊ JVM ؋ী ৈ۞ ۖಬীࢲ بח Ѫਸ ۽झۖಬਵ۽ ࢸݺ.SKIKOSKIA ౣܽ ߄ੋ٬ SKIKOী ೧ ۪؊݂. https://github.com/JetBrains/skikoSKIA ಪ ۪؊݂ ઁ ݃ ׳ۄ झܽ ࢫ పझܳ ೞ ݈.ComposeMultiplatformIDE supportੋభܻઁ ই٣যա উ٘۽٘ झౚ٣য়ী ࢸ.https://plugins.jetbrains.com/plugin/16541-compose-multiplatform-ide-supportIntelliJ IDEA ੋభܻઁ ই٣য 2020.3 ࢚ীࢲ ࢎਊоמ.
79Compose for Desktop ౠଵҊ࢚ You can do desktop too! By Victor Kropphttps://www.youtube.com/watch?v=Mgf_9kxM1BAJDK 15 JDK11ਵ۽ ۽ં ࢤࢿ оמ. ֎౭࠳ ߓನ ಁఃਸ ਤ೧ࢲח 15 ࢚.
80Compose Multiplatform desktop applicationNew Project۽ दೞӝ
81
82
5. Compose for Web
84Compose for Web ౠWebAssemblyJavaScriptܳ ॳ ঋҊ WebAssembly۽ प೯.Kotlin/WASM ఋѶ.ComposeHTMLHTMLਸ ࢤࢿೞח Kotlin/JS ۄ࠳۞ܻب .Compose for Webҗ ޖҙ.ComposeMultiplatformIDE supportੋభܻઁ ই٣যա উ٘۽٘ झౚ٣য়ী ࢸ.https://plugins.jetbrains.com/plugin/16541-compose-multiplatform-ide-supportIntelliJ IDEA ੋభܻઁ ই٣য 2020.3 ࢚ীࢲ ࢎਊоמ.
85WASM ઁ https://github.com/Kotlin/kotlin-wasm-examples
86
87