Kotlin
A concise multiplatform language developed by JetBrains
Kotlin 1.4.0-RC ๋ฆด๋ฆฌ์ฆ
Kotlin์ ๋ค์ ๋ฒ์ ๊น์ง ์ผ๋ง ์ ๋จ์์ต๋๋ค! ๋ค์ ์ฃผ์ ๋ฒ์ ์ผ๋ก ๊ณต๊ฐ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฆด๋ฆฌ์ค ํ๋ณด์ธ Kotlin 1.4.0-RC๊ฐ ๋ฆด๋ฆฌ์ฆ ๋์์ต๋๋ค. ์๋ ๊ธ์์ Kotlin 1.4.0-RC์ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๊ณ Kotlin 1.4.0 ๊ณต์ ์ถ์ ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํด ๋ณด์ธ์.
์ฃผ์ ๋ฆด๋ฆฌ์ค ๋ฒ์ (1.4-M1, 1.4-M2, 1.4-M3)์ ์ฌ์ฉํ๊ณ ํผ๋๋ฐฑ์ ๊ณต์ ํ์ฌ ์ด๋ฒ Kotlin ๋ฒ์ ์ด ํฅ์๋ ์ ์๋๋ก ์ง์ํด์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ํน๋ณํ ๊ฐ์ฌ๋ฅผ ์ ํฉ๋๋ค!
์ด๋ฒ ๊ฒ์๋ฌผ์์๋ Kotlin 1.4.0-RC ์ ๊ท ๊ธฐ๋ฅ ๋ฐ ํต์ฌ ๊ฐ์ ์ฌํญ์ ์ค์ ์ ์ผ๋ก ์๊ฐํฉ๋๋ค.
- ํฅ์๋
*.gradle.kts
IDE ์ง์: ์คํฌ๋ฆฝํธ ๊ตฌ์ฑ์ ๋ช ์์ ๋ก๋ฉ ๋ฐ ์ค๋ฅ ๋ณด๊ณ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. - ์ด์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข ์ ์์๋ฅผ ํฌํจํ๋ ์์ค ์งํฉ: ๋ฉํฐํ๋ซํผ ํ๋ก์ ํธ ๋ฐ ๋จ์ผ ํ๋ซํผ ๋์์ ํ๋ก์ ํธ์์ ๋ชจ๋ ์ง์๋ฉ๋๋ค.
- ๊ฐ์ํ๋ CocoaPods ์ข ์ ์์ ๊ด๋ฆฌ.
- ๊ฐ์ ๋ Kotlin/JS ํตํฉ: npm ์ข
์ ์์, CSS , Gradle์ Dukat, ๋ํดํธ ์ปดํ์ผ๋ฌ ๋ฐฑ์๋์์
@JsExport
์ด๋ ธํ ์ด์ ์ฌ์ฉ ๊ฐ๋ฅ. - Node.js API ๋ฐ์ธ๋ฉ ํ ์คํธ ๋ฒ์ .
- ์ฝ๋ฃจํด์ ๋๋ฒ๊ทธํ๊ณ ์ฌ์ธต ์ฌ๊ท ํจ์๋ฅผ ์ ์ํ๋ ์๋ก์ด ๊ธฐ๋ฅ. ์ด ๋ด์ฉ์ ๋ณ๋์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ ํ์ธํ์ค ์ ์์ต๋๋ค
ํฅ์๋ *.gradle.kts IDE ์ง์
Kotlin 1.3.70์์ ์ ๊ณต๋ Gradle Kotlin DSL ์คํฌ๋ฆฝํธ(*.gradle.kts ํ์ผ)์ IDE ์ง์์ ๋ํญ ๊ฐ์ ํ์์ผ๋ฉฐ Kotlin 1.4.0-RC์์๋ ๊ณ์ ๊ฐ์ ํ๊ณ ์์ต๋๋ค. ์ ๋ฒ์ ์ ํฌํจ๋ ๊ธฐ๋ฅ์ ์๋์์ ์ดํด๋ณด์ธ์.
์ฑ๋ฅ ๊ฐ์ ์ ์ํด ์คํฌ๋ฆฝํธ ๊ตฌ์ฑ์ ๋ช ์์ ์ผ๋ก ๋ก๋
์ด์ ์๋ build.gradle.kts
์ buildscript
๋๋ plugins
๋ธ๋ก์ ์ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ๋ฉด ์ ์คํฌ๋ฆฝํธ ๊ตฌ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์ ์๋์ผ๋ก ๋ก๋๋์์ต๋๋ค. ๊ทธ ๋ค์์, ๊ตฌ์ฑ์ด ์ ์ฉ๋ ํ์์ผ ์๋ก ์ถ๊ฐํ ํ๋ฌ๊ทธ์ธ์ ์ฝ๋ ์ง์์ ์ฌ์ฉํ ์ ์์์ต๋๋ค.
์ฑ๋ฅ ๊ฐ์ ์ ์ํด ์
๋ ฅ ์ ์คํฌ๋ฆฝํธ ๊ตฌ์ฑ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ ์๋ ๋์์ด ์ญ์ ๋์์ต๋๋ค. Gradle 6.0 ์ด์ ๋ฒ์ ๋ถํฐ๋ Load Gradle Changes(Gradle ๋ณ๊ฒฝ ์ฌํญ ๋ก๋)๋ฅผ ํด๋ฆญํ๊ฑฐ๋ Gradle ํ๋ก์ ํธ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌ์ฑ์ ๋ช
์์ ์ผ๋ก ์ ์ฉํด์ผ ํฉ๋๋ค.
Gradle ์ด์ ๋ฒ์ ์ ๊ฒฝ์ฐ ์๋ํฐ์์ Load Configuration(๊ตฌ์ฑ ๋ก๋)๋ฅผ ํด๋ฆญํ์ฌ ์คํฌ๋ฆฝํธ ๊ตฌ์ฑ์ ์๋์ผ๋ก ๋ก๋ํด์ผ ํฉ๋๋ค.
Gradle 6.0+์ด ํฌํจ๋ IntelliJ IDEA 2020.1์ Load Script Configurations(์คํฌ๋ฆฝํธ ๊ตฌ์ฑ ๋ก๋)๋ผ๋ ์ก์
์ ํ๋ ๋ ์ถ๊ฐํ์์ต๋๋ค. ์ด ์ก์
์ ์ฌ์ฉํ๋ฉด ์ ์ฒด ํ๋ก์ ํธ๋ฅผ ์
๋ฐ์ดํธํ์ง ์๊ณ ๋ ์คํฌ๋ฆฝํธ ๊ตฌ์ฑ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ก๋ํ ์ ์์ต๋๋ค. ์ ์ฒด ํ๋ก์ ํธ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ ๊ฒ๋ณด๋ค ์๊ฐ์ด ํจ์ฌ ๋จ์ถ๋ฉ๋๋ค.
์ค๋ฅ ๋ณด๊ณ ๊ธฐ๋ฅ ๊ฐ์
์ด์ ์๋ Gradle Daemon(๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ฉฐ ๋ชจ๋ Gradle ๊ด๋ จ ์์ ๋ฐ ํ๋์ ๋ด๋นํ๋ ํ๋ก์ธ์ค) ์ค๋ฅ๋ ๋ณ๋์ ๋ก๊ทธ ํ์ผ์์๋ง ํ์ธ ๊ฐ๋ฅํ์ต๋๋ค. ์ด์ Gradle 6.0 ์ด์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Gradle Daemon์์ ๋ชจ๋ ์ค๋ฅ ์ ๋ณด๋ฅผ ์ง์ ๋ฐํํ๊ณ Build(๋น๋) ๋๊ตฌ ์ฐฝ์ ํ์ํฉ๋๋ค. ๋ฐ๋ผ์ ์๊ฐ์ด ๋จ์ถ๋๊ณ ๋ฒ๊ฑฐ๋ก์๋ ์ค์์ต๋๋ค.
ํ๋ก์ ํธ ๊ตฌ์ฑ์ ์์ฉ๊ตฌ ๊ฐ์
Kotlin Gradle ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ ์ฌํญ์ด ์ถ๊ฐ๋์ด Gradle ๋น๋ ํ์ผ์์ ์ฝ๋๋ฅผ ๋ ์ ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ์ด์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ์ฝ๋ ์๋๋ฆฌ์ค๊ฐ ๋ํดํธ๋ก ์ ๊ณต๋ฉ๋๋ค.
ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ํดํธ ์ข ์ ์์๋ก ์ง์
์๋ง์ ํ๋ก์ ํธ์ Kotlin ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. 1.4.0-RC ๋ฒ์ ๋ถํฐ๋ ๊ฐ ์์ค ์งํฉ์์ stdlib
์ข
์ ์์๋ฅผ ์๋์ผ๋ก ์ ์ธํ ํ์๊ฐ ์์ต๋๋ค. ์ด์ ๋ํดํธ๋ก ์ถ๊ฐ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋์ผ๋ก ์ถ๊ฐ๋๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ Kotlin Gradle ํ๋ฌ๊ทธ์ธ๊ณผ ๋์ผํ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ฒ์ ๋ ๋์ผํฉ๋๋ค.
์๋ ์ฝ๋์์ 1.4 ๋ฒ์ ์ด์ ์ Android, iOS ๋ฐ JavaScript๋ฅผ ๋์์ผ๋ก ํ๋ ์ผ๋ฐ์ ์ธ ๋ฉํฐํ๋ซํผ ํ๋ก์ ํธ ๊ตฌ์ฑ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข ์ ์์๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ธํ ํ์๊ฐ ์์ต๋๋ค. ๋ํ Kotlin 1.4-M2์์ ๊ณต๊ฐ๋ ๊ณ์ธต ํ๋ก์ ํธ ๊ตฌ์กฐ ์ง์์ด ์์ผ๋ฏ๋ก ๊ธฐํ ์ข ์ ์์๋ฅผ ํ ๋ฒ๋ง ์ง์ ํ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ Gradle ๋น๋ ํ์ผ์ด ํจ์ฌ ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ธฐ ์ฌ์ ์ง๋๋ค.
ํ๋ซํผ ์์ค ์งํฉ ๋ฐ ๋ฐฑ์๋ ๊ณต์ ์์ค ์งํฉ์ ํด๋น ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถ๊ฐ๋๊ณ , ๋จ์ ๋ถ๋ถ์ ์ผ๋ฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถ๊ฐ๋ ์์ ์
๋๋ค. Kotlin Gradle ํ๋ฌ๊ทธ์ธ์ kotlinOptions.jvmTarget
์ค์ ์ ๋ฐ๋ผ ์ ํฉํ JVM ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ ๊ฒ์
๋๋ค.
ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข ์ ์์๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ธํ ๊ฒฝ์ฐ(์: ๋ค๋ฅธ ๋ฒ์ ์ด ํ์ํ ๊ฒฝ์ฐ), Kotlin Gradle ํ๋ฌ๊ทธ์ธ์์ ์ฌ์ ์ํ๊ฑฐ๋ ๋ ๋ฒ์งธ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ์ง ์์ต๋๋ค. ๋ํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ํ ํ์ํ์ง ์์ ๊ฒฝ์ฐ Gradle ์์ฑ์ ์ ํ ํด์ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
Kotlin/Native
๊ฐ์ํ๋ CocoaPods ์ข ์ ์์ ๊ด๋ฆฌ
์ด์ ์๋ ํ๋ก์ ํธ๋ฅผ ์ข ์ ์์ ๊ด๋ฆฌ์ CocoaPods๊ณผ ํตํฉํ๊ณ ๋์, ๋ฉํฐํ๋ซํผ ํ๋ก์ ํธ์ ๋ค๋ฅธ ๋ถ๋ถ๊ณผ๋ ๋ณ๊ฐ๋ก ํ๋ก์ ํธ์ iOS, macOS, watchOS ๋๋ tvOS ๋ถ๋ถ์ Xcode์์๋ง ๋น๋ํ ์ ์์์ต๋๋ค. ๋ค๋ฅธ ๋ถ๋ถ์ IntelliJ IDEA์์ ๋น๋๋์์ต๋๋ค.
๊ทธ๋ฟ ์๋๋ผ CocoaPods(Pod ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ์ ์ฅ๋ Objective-C ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข
์ ์์๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค IntelliJ IDEA์์ Xcode๋ก ์ ํํ๊ณ pod install
์์
์ ์คํํ ํ Xcode ๋น๋๋ฅผ ์คํํด์ผ ํ์ต๋๋ค.
์ด์ IntelliJ IDEA์์ ๋ฐ๋ก Pod ์ข ์ ์์๋ฅผ ๊ด๋ฆฌํ๋ ๋์์ ์ฝ๋ ๊ฐ์กฐ ํ์ ๋ฐ ์ฝ๋ ์์ฑ ๋ฑ์ ์ฝ๋ฉ ์ง์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ Xcode๋ก ์ ํํ์ง ์๊ณ ๋ Gradle๋ก ์ ์ฒด Kotlin ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ์ฆ, Swift/Objective-C ์ฝ๋๋ฅผ ์์ฑํ ํ์๊ฐ ์๊ฑฐ๋ ์๋ฎฌ๋ ์ดํฐ ๋๋ ๊ธฐ๊ธฐ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํด์ผ ํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ Xcode๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ด์ง ๊ฒ์ ๋๋ค.
๋ก์ปฌ์ ์ ์ฅ๋ Pod ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ ์๋ ์์ต๋๋ค.
ํ์์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ ์ข ์ ์์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- Kotlin ํ๋ก์ ํธ ๋ฐ CocoaPods ์ ์ฅ์์ Pod ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- Kotlin ํ๋ก์ ํธ ๋ฐ ๋ก์ปฌ์์ ์ ์ฅ๋ Pod ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- Kotlin Pod(CocoaPods ์ข ์์ฑ์ผ๋ก ์ฌ์ฉ๋๋ Kotlin ํ๋ก์ ํธ) ๋ฐ ํ๋ ์ด์์ ๋์์ด ํฌํจ๋ Xcode ํ๋ก์ ํธ.
์ด๊ธฐ ๊ตฌ์ฑ์ ์๋ฃํ๊ณ CocoaPods์ ์ ์ข ์ ์์๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ ํ๋ก์ ํธ๋ฅผ IntelliJ IDEA์ ๋ค์ ๊ฐ์ ธ์ค๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ ์ข ์ ์์๊ฐ ์๋์ผ๋ก ์ถ๊ฐ๋๋ฉฐ ์ถ๊ฐ์ ์ธ ์ ์ฐจ๋ ํ์ํ์ง ์์ต๋๋ค.
์๋์์ CocoaPods ์ ์ฅ์์ Pod ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ข ์ ์์๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์์ต๋๋ค. Kotlin 1.4 ๋ฌธ์๋ ๋ชจ๋ ์๋๋ฆฌ์ค๋ฅผ ์ง์ํฉ๋๋ค.
CocoaPods ํตํฉ ์ฌ์ฉ ๋ฐฉ๋ฒ
CocoaPods ์ข ์ ์์ ๊ด๋ฆฌ์ ๋ฐ ํ๋ฌ๊ทธ์ธ ์ค์น
cocoapods
์ข ์ ์์ ๊ด๋ฆฌ์๋ฅผ ์ค์นํฉ๋๋ค(sudo gem์ผ๋ก cocoapods ์ค์น
).cocoapods-generate
ํ๋ฌ๊ทธ์ธ ์ค์น(sudo gem์ผ๋ก cocoapods-generate ์ค์น
).- ํ๋ก์ ํธ์
build.gradle(.kts)
ํ์ผ์kotlin("native.cocoapods")
์ ์ฌ์ฉํด์ CocoaPods ํ๋ฌ๊ทธ์ธ์ ์ ์ฉํฉ๋๋ค.
CocoaPods ์ ์ฅ์์ Pod ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ข ์ ์์ ์ถ๊ฐ
-
pod()
์ ์ฌ์ฉํ์ฌ CocoaPods ์ ์ฅ์์์ ์ฌ์ฉํ๊ณ ์ ํ๋ Pod ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ข ์ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋ํ ์ข ์ ์์๋ฅผ subspecs๋ก ์ถ๊ฐํ ์๋ ์์ต๋๋ค. -
ํ๋ก์ ํธ๋ฅผ ๋ค์ ๊ฐ์ ธ์ต๋๋ค.
Kotlin ์ฝ๋์์ ์ข ์ ์์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํจํค์ง๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค.
๊ณต์ ํ ์ํ ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํด์ ์๊ฒฉ CocoaPods ์ ์ฅ์์ ๊ทธ๋ฆฌ๊ณ ๋ก์ปฌ์ ์ ์ฅ๋ Pod ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ข ์ ์์๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ํ์ธํด ๋ณด์ธ์.
Apple ํ๊น์์ ๊ธฐ๋ณธ์ผ๋ก ๋ฆด๋ฆฌ์ค .dSYM ์์ฑ
๋ง์ ๊ฒฝ์ฐ iOS ์ ํ๋ฆฌ์ผ์ด์
์ถฉ๋ ๋๋ฒ๊ทธ ๊ณผ์ ์๋ ์ถฉ๋ ๋ณด๊ณ ์ ๋ถ์์ด ํฌํจ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ถฉ๋ ๋ณด๊ณ ์๊ฐ ์ ์ ํ ๊ฐ๋
์ฑ์ ๊ฐ์ถ๋ ค๋ฉด ์ฌ๋ณผํ ๊ณผ์ ์ด ํ์ํฉ๋๋ค. Kotlin์ผ๋ก ์์ฑ๋ ์ฃผ์๋ฅผ ์ฌ๋ณผํํ๋ ค๋ฉด Kotlin ์ฝ๋์ฉ .dSYM ๋ฒ๋ค์ด ํ์ํฉ๋๋ค. 1.4-M3 ๋ฒ์ ๋ถํฐ Kotlin/Native ์ปดํ์ผ๋ฌ๋ Darwin ํ๋ซํผ์ ๋ฆด๋ฆฌ์ค ๋ฐ์ด๋๋ฆฌ์ ํ์ํ .dSYM์ ๋ํดํธ๋ก ์์ฑํฉ๋๋ค. ์ด ์ต์
์ -Xadd-light-debug=disable
์ปดํ์ผ๋ฌ ํ๋๊ทธ๋ก ๋นํ์ฑํํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ํ๋ซํผ์ ๊ฒฝ์ฐ ํด๋น ์ต์
์ด ๋ํดํธ๋ก ๋นํ์ฑํ ๋์ด ์์ต๋๋ค. Gradle์์ ์ด ์ต์
์ ํ ๊ธํ๋ ค๋ฉด ๋ค์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ธ์.
์ฑ๋ฅ ๊ฐ์ ์ฌํญ
์ ํฌ ํ์ Kotlin/Native ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ๊พธ์คํ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
- 1.3.70 ๋ฒ์ ์์๋ Kotlin/Native ์ปดํ์ผ ์ฑ๋ฅ ๊ฐ์ ์ ์ํด ๋ ๊ฐ์ง ์ ๊ท ๊ธฐ๋ฅ์ ๋์ ํ์์ต๋๋ค. ๋ฐ๋ก ํ๋ก์ ํธ ์ข ์ ์์ ์บ์ฑ ๋ฐ Gradle Daemon์ ์ปดํ์ผ๋ฌ ์คํ ๊ธฐ๋ฅ์ ๋๋ค. ์ฌ๋ฌ๋ถ์ ํผ๋๋ฐฑ์ ๋ฐํ์ผ๋ก ์ฌ๋ฌ ์ด์๋ฅผ ์์ ํ์์ผ๋ฉฐ ํด๋น ๊ธฐ๋ฅ์ ์ ๋ฐ์ ์ธ ์์ ์ฑ๋ ๊ฐ์ ํ์ต๋๋ค. ์์ผ๋ก๋ ์ง์์ ์ผ๋ก ๋ ธ๋ ฅํด ๊ฐ๊ฒ ์ต๋๋ค.
- ๋ํ ๋ฐํ์ ์ฑ๋ฅ๊ณผ ๊ด๋ จํ ๊ฐ์ ์ฌํญ๋ ์์ต๋๋ค. GC(๊ฐ๋น์ง ์ปฌ๋ ์
) ์ต์ ํ๋ก ์ ๋ฐ์ ์ธ ๋ฐํ์ ์ฑ๋ฅ์ด ํฅ์๋์์ต๋๋ค. ์ฅ๊ธฐ๊ฐ ์กด์ฌํ๋ ๊ฐ์ฒด๊ฐ ๋ง์ ํ๋ก์ ํธ์์ ํ์คํ ์ด๋ฌํ ์ฑ๋ฅ ํฅ์์ ๋๋ผ์ค ์ ์์ ๊ฒ๋๋ค. ์ด์ ์ค๋ณต ๋ฐ์ฑ์ ์ด์ค์ผ์ดํํ์ฌ
HashMap
๋ฐHashSet
์ปฌ๋ ์ ์ด ๋ ๋น ๋ฅด๊ฒ ์๋ํฉ๋๋ค.
Kotlin/JS
Kotlin 1.4.0-RC์์๋ @JsExport
์ด๋
ธํ
์ด์
์ด ๋ํดํธ ์ปดํ์ผ๋ฌ ๋ฐฑ์๋์ ํธํ๋ฉ๋๋ค. ๋ํ npm ์ข
์ ์์ ๊ด๋ฆฌ ๋ฐ Gradle ํ๋ก์ ํธ์ Dukat ํตํฉ์ ๋ ๊ฐ๋ ฅํ๊ณ ์ธ๋ถํํ์ฌ ์ ๊ณตํ๊ณ CSS ์ง์์ ๊ฐ์ ํ์์ต๋๋ค. ๋๋ถ์ด Node.js API์ ํตํฉ์ ์ฒ์์ผ๋ก ๋์
ํ๋ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
๋ํดํธ ์ปดํ์ผ๋ฌ ๋ฐฑ์๋์ฉ @JsExport
์ด๋
ธํ
์ด์
Kotlin 1.4 ์ด์ ๋ฆด๋ฆฌ์ค์์ @JsExport
์ด๋
ธํ
์ด์
์ ๋์
ํ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ IR ์ปดํ์ผ๋ฌ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ JavaScript ๋๋ TypeScript์์ ์ง์๋๋ ์ต์์ ์ ์ธ์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. Kotlin 1.4-M3 ๋ฒ์ ๋ถํฐ๋ ํด๋น ์ด๋
ธํ
์ด์
์ ์ต์ ๋ํดํธ ์ปดํ์ผ๋ฌ ๋ฐฑ์๋์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ฌ ๋ํดํธ ์ปดํ์ผ๋ฌ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ ๋ @JsExport
๋ก ์ต์์ ์ ์ธ์ ์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ๋ฉด ์ ์ธ์ ์ด๋ฆ ๋งน๊ธ๋ง์ด ๋นํ์ฑํ๋ฉ๋๋ค. ์ปดํ์ผ๋ฌ ๋ฐฑ์๋ ์์ชฝ์ ํด๋น ์ด๋
ธํ
์ด์
์ด ํฌํจ๋ ๊ฒฝ์ฐ ์ต์์ ์ ์ธ์ ๋ด๋ณด๋ด๊ธฐ ์ํด ๋ก์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ๋ฐฑ์๋ ๊ฐ ์ ํ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋จ, TypeScript ์ ์ ์์ฑ์ ์ IR ์ปดํ์ผ๋ฌ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ ๋๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
npm ์ข ์ ์์ ๊ด๋ฆฌ ๋ณ๊ฒฝ ์ฌํญ
์ข ์ ์์ ์ ์ธ์ ํ์ํ ๋ช ์์ ๋ฒ์ ์๊ตฌ ์ฌํญ
๋ฒ์ ๋ฒํธ๋ฅผ ์ง์ ํ์ง ์๊ณ npm ํจํค์ง ์ข ์ ์์๋ฅผ ์ ์ธํ๋ฉด ์ฌ์ฉํ๋ ํจํค์ง๋ฅผ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ๊ทธ๋ ๊ธฐ์ ์์ผ๋ก๋ ์ข ์ ์์์ ๋ํ npm์ semver ๊ตฌ๋ฌธ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฒ์ ๋๋ ๋ฒ์ ๋ฒ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค. ์ด์ Gradle DSL์์ ์ฌ๋ฌ ์ข ์ ์์ ๋ฒ์๋ฅผ ์ง์ํ๋ฏ๋ก ํ๋ก์ ํธ์์ ํ์ฉํ๋ ค๋ ๋ฒ์ ์ ์ ํํ๊ฒ ์ฐพ์๋ผ ์ ์์ต๋๋ค. ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
npm ์ข ์ ์์ ์ถ๊ฐ ์ ํ
dependencies
๋ธ๋ก ๋ด๋ถ์ npm(...)
์ ์ฌ์ฉํ์ฌ ์ง์ ํ ์ ์๋ ์ผ๋ฐ์ ์ธ npm ์ข
์ ์์ ์ธ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ ๊ฐ์ง ์ด์์ ์ข
์ ์์ ์ ํ์ด ์์ต๋๋ค.
devDependencies
,devNpm(...)
์ฌ์ฉoptionalDependencies
,optionalNpm(...)
์ฌ์ฉpeerDependencies
,peerNpm(...)
์ฌ์ฉ
๊ฐ ์ ํ์ ์ข ์ ์์๊ฐ ๊ฐ์ฅ ์ ํฉํ๊ฒ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ฅผ ์์ธํ ์์๋ณด๋ ค๋ฉด npm์์ ์ฐ๊ฒฐ๋ ๊ณต์ ๋ฌธ์๋ฅผ ํ์ธํด ์ฃผ์ธ์.
npm ์ดํ ์ข ์์ฑ์ ์๋ ํฌํจ ๋ฐ ํ์ธ
์ด์ ์๋ ์์ฑ์๊ฐ ์ํฐํฉํธ์ package.json
ํ์ผ์ ์๋์ผ๋ก ์ถ๊ฐํ์ง ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํด์ผ ํ ๊ฒฝ์ฐ npm ์ข
์ ์์๋ฅผ ์๋์ผ๋ก ๊ฐ์ ธ์์ผ ํ์ต๋๋ค. ์๋ฅผ ๋ค์ด, kotlinx.serialization
์ ๊ฒฝ์ฐ ํจํค์ง๊ฐ Kotlin/JS์์ ์๋ํ ์ ์๋๋ก Gradle ๋น๋ ํ์ผ์ ์ข
์ ์์๋ก text-encoding
๋ฐ abort-controller
๋ฅผ ํฌํจํด์ผ ํ์ฃ .
์ด์ Gradle ํ๋ฌ๊ทธ์ธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ package.json
ํ์ผ์ ์๋์ผ๋ก ์์ฑํ๊ณ ํด๋น ํ์ผ์ jar
๋๋ klib
์ํฐํฉํธ์ ํฌํจํฉ๋๋ค. ์ด๋ฌํ ์ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ ๊ฒฝ์ฐ ์๋์ผ๋ก ํ์ผ ๊ตฌ๋ฌธ ๋ถ์ ๋ฐ ํ์ํ ์ข
์ ์์๊ฐ ์๋์ผ๋ก ํฌํจ๋๋ฏ๋ก Gradle ๋น๋ ํ์ผ์ ์ข
์์ฑ์ ์๋์ผ๋ก ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค.
CSS ์ง์ ๋ณ๊ฒฝ ์ฌํญ
Kotlin 1.4-M2 ๋ฒ์ ์ cssSettings
๋ฅผ ํตํด Gradle์์ webpack์ CSS ๋ฐ ์คํ์ผ ๋ก๋๋ฅผ ๋ฐ๋ก ์ง์ํฉ๋๋ค. ์ค์ ์์
๋ฐ ํจ๊ณผ๋ฅผ ๋์ฑ ์๋ฐํ ๋ฐ์ํ๊ณ ์ ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ cssSupport
์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. ์์ผ๋ก๋ 1.4-M2์ ์คํ์ ์ค์ ๊ณผ ๋ฌ๋ฆฌ Gradle ํ๋ฌ๊ทธ์ธ์์ CSS ์ง์์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ง ์์ต๋๋ค. ์ด๋ฒ ๋ณ๊ฒฝ์ ํตํด ์คํ์ผ ์ํธ๊ฐ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ์์ฒด ์ค์ ์ ํฌํจํ๋ ๋ถ๋ค์ ํผ๋์ ๋ฐฉ์งํ ์ ์๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค(์: Sass ๋๋ Less ๋ก๋ ์ฌ์ฉ). ์ด๋ฌํ ์ํฉ์์๋ ํ๋ก์ ํธ์ ๋ํดํธ ๊ตฌ์ฑ์์ ์ถฉ๋์ ์ผ๊ธฐํ ์ ์๋ CSS ์ค์ ์ ์ด๋ฏธ ์ฝ์
ํ ๊ฒ์ด ์ฆ์ ๊ตฌ๋ถ๋์ง ์์ต๋๋ค.
ํ๋ก์ ํธ์์ CSS ์ง์์ ํ์ฑํํ๋ ค๋ฉด webpackTask
, runTask
, testTask
์ ์ฉ Gradle ๋น๋ ํ์ผ์ cssSupport.enabled
ํ๋๊ทธ๋ฅผ ์ค์ ํ์ธ์. IntelliJ IDEA์ ํฌํจ๋ ๋ง๋ฒ์ฌ๋ฅผ ์ฌ์ฉํด ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ์์ฑํ build.gradle(.kts)
ํ์ผ์ ๋ค์ ์ค์ ์ด ์๋์ผ๋ก ํฌํจ๋ฉ๋๋ค.
์ ํฌ ํ์ ๊ฐ๊ฐ์ ์์
๋ง๋ค ๊ฐ๋ณ์ ์ธ ์ค์ ์กฐ์ ์ด ํ์ํ๋ค๋ ์ ์ด ๋ณ๋ก ํธ๋ฆฌํ์ง ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ฌ๊ทธ์ธ DSL์ cssSupport
๊ตฌ์ฑ ์ค์ ํฌ์ธํธ๋ฅผ ์ถ๊ฐํ ์์ ์
๋๋ค(์งํ ์ํฉ์ ์ฌ๊ธฐ์์ ํ์ธํ์ค ์ ์์ต๋๋ค).
Dukat ํตํฉ ๊ฐ์
Kotlin/JS Gradle ํ๋ฌ๊ทธ์ธ์ Dukat ํตํฉ์ ๋ณด๋ค ์ธ๋ถํ๋ ์ ์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค. Dukat์ TypeScript ์ ์ธ ํ์ผ(.d.ts
)์ Kotlin ์ธ๋ถ ์ ์ธ์ผ๋ก ์๋ ๋ณํํ๋ ๋๊ตฌ์
๋๋ค. ์ด์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก Dukat์ ์ ์ธ์ ์์ฑํ๋ ๊ฒฝ์ฐ ๋ฐ ์์ ์ ์ ํํ ์ ์์ต๋๋ค.
๋น๋ ์์ ์ ์ธ๋ถ ์ ์ธ ์์ฑ
์ด์ npm ์ข
์ ์์ ํจ์์์ ํจํค์ง ์ด๋ฆ ๋ฐ ๋ฒ์ ๋ค์ ์ธ ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ธ generateExternals
๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ Dukat์ด ํน์ ์ข
์ ์์์ ๋ํ ์ ์ธ์ ์์ฑํ ์ง ์ฌ๋ถ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ ์ดํ ์ ์์ต๋๋ค. ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ํ gradle.properties ํ์ผ์์ kotlin.js.generate.externals flag
(์คํ์ ์ผ๋ก ์ ๊ณต๋์์ ์ ๊ธฐ์กด ์ด๋ฆ์ kotlin.js.experimental.generateKotlinExternals
)๋ฅผ ํ์ฉํ์ฌ ๋ชจ๋ npm ์ข
์ ์์์ ํ์ํ ์์ฑ๊ธฐ ๋์์ ๋์์ ์ค์ ํ ์ ์์ต๋๋ค. ์ธ์ ๋์ฒ๋ผ ๊ฐ๋ณ์ ์ธ ๋ช
์์ ์ค์ ์ด ์ผ๋ฐ ํ๋๊ทธ๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
Gradle ์์ ์ ํตํด ์ธ๋ถ ์ ์ธ์ ์๋ ์์ฑ
Dukat์์ ์์ฑ๋ ์ ์ธ์ ์์ ํ ์ ์ดํ๋ ค๋ ๊ฒฝ์ฐ, ์๋ ์กฐ์ ์ ์ ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ๋๋ ์๋ ์์ฑ๋ ์ธ๋ถ ์ ์ธ ์คํ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ generateExternals
Gradle ์์
์ ์ฌ์ฉํ์ฌ ๋ชจ๋ npm ์ข
์ ์์์ ๋ํ ์ ์ธ ์์ฑ์ ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐํ ์๋ ์์ต๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ ๋ฃจํธ์์ ์ด๋ฆ์ด externals
๋ก ์ง์ ๋ ๋๋ ํ ๋ฆฌ์ ์ ์ธ์ด ์์ฑ๋ฉ๋๋ค. ์ด๋ ์์ฑ๋ ์ฝ๋๋ฅผ ๊ฒํ ํ๊ณ ์ฌ์ฉํ๊ณ ์ ํ๋ ๋ชจ๋ ๋ถ๋ถ์ ์์ค ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌํ ์ ์์ต๋๋ค. (๋จ, ์์ค ํด๋์ ์ธ๋ถ ์ ์ธ์ ์๋์ผ๋ก ์ ๊ณตํ๊ณ ๋์ผํ ์ข
์ ์์์ ๋ํ ์ธ๋ถ ์ ์ธ์ ๋น๋ ์์ ์ ์์ฑํ๋๋ก ํ์ฑํํ๋ฉด ํด๊ฒฐ ์ด์๊ฐ ๋ฐ์ํ ์ ์์์ ์ ์ํ์ธ์)
kotlin.dom ๋ฐ kotlin.browser๋ฅผ ๋ณ๋์ ์ํฐํฉํธ๋ก ๋ง์ด๊ทธ๋ ์ด์
Kotlin/JS์ฉ ๋ธ๋ผ์ฐ์ ๋ฐ DOM ๋ฐ์ธ๋ฉ์ ์๋๋ฅผ ๊ฐ์ ํ๊ณ ์ธ์ด ์์ฒด์ ๋ฆด๋ฆฌ์ค ์ฃผ๊ธฐ์ ๋ถ๋ฆฌํ๊ธฐ ์ํด kotlin.dom
๋ฐ kotlin.browser
ํจํค์ง์ ์์นํ ํ์ฌ์ API๋ฅผ ์ค๋จํ์์ต๋๋ค. kotlinx.dom
๋ฐ kotlinx.browser
ํจํค์ง์์ ์ด๋ฌํ API์ ๋ํ ๋์ฒด ํญ๋ชฉ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค๋ง, ํฅํ ๋ฆด๋ฆฌ์ค์์ ๋ณ๋์ ์ํฐํฉํธ๋ก ์ถ์ถํ ์์ ์
๋๋ค. ์๋ก์ด API๋ก์ ๋ง์ด๊ทธ๋ ์ด์
์ ๋งค์ฐ ์ง๊ด์ ์ด๋ฉฐ ํ๋ก์ ํธ์ ์ฌ์ฉ๋ import ๋ฌธ์ ์กฐ์ ํ์ฌ ์ kotlinx ํจํค์ง์ ์ง์ ํ๋ฉด ๋ฉ๋๋ค. IntelliJ IDEA์์ Alt-Enter๋ฅผ ๋๋ฌ์ ์ฌ์ฉํ ์ ์๋ Quick-fixes(๋น ๋ฅธ ์์ ) ๊ธฐ๋ฅ์ด ์ด ๋ง์ด๊ทธ๋ ์ด์
์ ๋์์ด ๋ ๊ฒ์
๋๋ค.
ํ ์คํธ ๋ฒ์ : kotlinx-nodejs
Node.js API์ ๋ํ ๊ณต์ ๋ฐ์ธ๋ฉ์ธ kotlinx-nodejs
ํ
์คํธ ๋ฒ์ ์ด ์ถ์๋์๋ค๋ ๊ธฐ์ ์์์ ์ ํด๋๋ฆฝ๋๋ค. ์ค๋ซ๋์ Kotlin์ ํตํด Node.js๋ฅผ ๋์์ผ๋ก ์ง์ ํ ์ ์์์ง๋ง, ๋์์ ๋ชจ๋ ๊ธฐ๋ฅ์ API์ ํ์
์์ ์ ์ธ ์ก์ธ์ค๋ฅผ ๋ณด์ ํ ๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. GitHub์์ kotlinx-nodejs
๋ฐ์ธ๋ฉ์ ์ฒดํฌ์์ํ ์ ์์ต๋๋ค.
kotlinx-nodejs
๋ฅผ ํ๋ก์ ํธ์ ์ถ๊ฐํ๋ ค๋ฉด jcenter ()
๊ฐ ์ ์ฅ์์ ์ถ๊ฐ๋์๋์ง ํ์ธํ์ธ์. ๋ค์์ผ๋ก ๊ฐ๋จํ ์ํฐํฉํธ์ ์ข
์ ์์๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
Gradle ๋ณ๊ฒฝ ์ฌํญ์ ๋ก๋ํ ํ Node.js๋ก ์ ๊ณต๋ API๋ฅผ ์คํ์ ์ผ๋ก ์ฌ์ฉํด๋ณผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, DNS ํ์ธ ํจํค์ง๋ฅผ ํ์ฉํ๋ ๊ฒ์ ๋๋ค.
์์ง ํ ์คํธ ๋ฒ์ ์ ๋ถ๊ณผํ๋ฏ๋ก kotlinx-nodejs๋ฅผ ์ฌ์ฉํด ๋ณด๊ณ , ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋ ๊ฒฝ์ฐ ์ ์ฅ์์ ์ด์ ํธ๋์ปค์ ๋ณด๊ณ ํด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
kotlin2js ๋ฐ kotlin-dce-js Gradle ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ ์ค๋จ
Kotlin 1.4๋ถํฐ Kotlin/JavaScript๋ฅผ ๋์์ผ๋ก ํ๋ ๊ธฐ์กด์ Gradle ํ๋ฌ๊ทธ์ธ(kotlin2js
๋ฐ kotlin-dce-js
)์ ๊ณต์์ ์ผ๋ก ์ฌ์ฉ์ด ์ค๋จ๋์์ผ๋ฉฐ kotlin.js
Gradle ํ๋ฌ๊ทธ์ธ์ด ๋์ ์ฌ์ฉ๋ฉ๋๋ค.
(์ด๋ฏธ ์ฌ์ฉ์ด ์ค๋จ๋) kotlin-frontend-plugin
๊ณผ ๋๋ถ์ด ํด๋น ํ๋ฌ๊ทธ์ธ์์ ์ง์ํ๋ ์ฃผ์ ๊ธฐ๋ฅ์ ์ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์์ถ๋์์ต๋๋ค. ๋ฐ๋ผ์ Kotlin/Multiplatform ํ๋ก์ ํธ์ ํธํ ๊ฐ๋ฅํ ํตํฉ DSL์ ์ฌ์ฉํ์ฌ Kotlin/JS ๋์์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
Kotlin 1.3.70 ๋ฒ์ ๋ถํฐ๋ ์ต์ ํ๋ ํ๋ก๊ทธ๋จ ๋ฒ๋ค์ ์คํ ๋ฐ ์์ฑํ๋browserProductionRun
๋ฐ browserProductionWebpack
์์
์ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ๋ถํ์ํ ์ฝ๋ ์ ๊ฑฐ(DCE) ๊ธฐ๋ฅ์ด ์๋์ผ๋ก ์ ์ฉ๋ฉ๋๋ค. (ํ์ฌ ๋ถํ์ํ ์ฝ๋ ์ ๊ฑฐ๋ Node.js ๋๋ ํ
์คํธ๊ฐ ์๋ ์์ฑ ์ถ๋ ฅ ๋ธ๋ผ์ฐ์ ๊ฐ ๋์์ธ ๊ฒฝ์ฐ์๋ง ์ง์๋ฉ๋๋ค. ํ์ง๋ง ์ฒ๋ฆฌ๋๊ธธ ๋ฐ๋ผ๋ ๊ธฐํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋ ๊ฒฝ์ฐ ์ธ์ ๋ ์ ํฌ ํ์ ์๋ ค์ฃผ์ธ์.)
์ถ์ ์ง์ ๋์ด๋ ์ถ๊ฐ ๊ฐ์ ์ฌํญ ๋ฐ ์ฃผ์ ์์ ์ฌํญ
@JsExport
์ด๋ ธํ ์ด์ ์ด ๊ธ์ง๋ ์ฌ์ฉ ์์น์ ๋ ๋ง์ ์ปดํ์ผ๋ฌ ์ค๋ฅ๊ฐ ์ถ๊ฐ๋์ด ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๊ฐ์กฐ ํ์๋ฉ๋๋ค.- IR ์ปดํ์ผ๋ฌ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ ๋
klib
์ ๋ํ ์ฆ๋ถ ์ปดํ์ผ์ ํฌํจํ๋ ์๋ก์ด ์ ๋ต๋ต์ด ํ์ฑํ ๋ฉ๋๋ค. ์ด๋ฌํ ์กฐ์น๋ ์ปดํ์ผ ์๊ฐ ๊ฐ์ ์ ์ํ ์ฌ๋ฌ ๋จ๊ณ ์ค ํ๋ ์ ๋๋ค. - webpack ๊ฐ๋ฐ ์๋ฒ ๊ตฌ์ฑ์ ์์ ํ์ฌ Hot Reload ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋
ENOENT: ํด๋น ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ ์์
์ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ ์ ์๊ฒ ๋์์ต๋๋ค.
์งํํ๋ Kotlin ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ API
Kotlin ๋ฐ์ ์ ๊ด์ ์์ Kotlin 1.4๋ ๊ธฐ๋ฅ ๋ฆด๋ฆฌ์ค์ ๋๋ค. ๊ทธ๋ ๊ธฐ์ ์ด์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ ์ด๋ฏธ ์๊ฐํด๋๋ฆฐ ๋ค์ํ ์ ๊ท ๊ธฐ๋ฅ์ด ํฌํจ๋ฉ๋๋ค. ํ์ง๋ง ๊ธฐ๋ฅ ๋ฆด๋ฆฌ์ค์ ๋ค๋ฅธ ์ค์ ์ธก๋ฉด์ ๊ธฐ์กด API์ ์ค์ํ๊ณ ํ์ ์ ์ธ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋๋ค๋ ์ ์ ๋๋ค. 1.4 ๋ฆด๋ฆฌ์ค์์ ๊ธฐ๋ํ ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ๋ตํ ์ค๋ช ์ ํ์ธํด ๋ณด์ธ์.
์คํ์ API ์์ ํ
์ฌ์ฉ์๊ฐ Kotlin ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ํ๋ ๊ธฐ๋ฅ์ ์ต๋ํ ๋นจ๋ฆฌ ์ ๊ณตํ๊ณ ์ ์คํ์ ๋ฒ์ ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ์ํ๋ API ๊ฐ๋ฐ์ด ์์ง ์งํ ์ค์ด๋ฉฐ ํฅํ ํธํ์ฑ์ ๊ณ ๋ คํ์ง ์๊ณ ํฅํ์ ๋ณ๊ฒฝ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์คํ์ API๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ์์ ํด๋น ์ํ๋ฅผ ๊ฒฝ๊ณ ํ๊ณ ์ฌ์ ๋์๋ฅผ ์์ฒญํฉ๋๋ค(@OptIn
์ด๋
ธํ
์ด์
).
๊ธฐ๋ฅ ๋ฆด๋ฆฌ์ค์์ ์คํ์ API๋ ์์ ์ํ๋ก ๊ฐ์ ๋ ์ ์์ต๋๋ค. ์์ ์ํ์ ์ด๋ฅด๋ฉด ์๊ธฐ์น ์๊ฒ ํ์๊ณผ ๋์์ด ๋ณ๊ฒฝ๋ ์ผ์ ์์ต๋๋ค(๋ณ๊ฒฝ ์ฌํญ์ ์ ์ ํ ์ฌ์ฉ ์ค๋จ ์ฃผ๊ธฐ์ ๋ฐ๋ผ์๋ง ์ ์ฉ๋ฉ๋๋ค). API๊ฐ ๊ณต์์ ์ผ๋ก ์์ ํ๋๋ฉด ๊ฒฝ๊ณ ๋ ์ฌ์ ๋์ ์์ด API๋ฅผ ์์ ํ๊ฒ ์ฌ์ฉํ์ค ์ ์์ต๋๋ค.
1.4 ๋ฒ์ ์ ๊ฒฝ์ฐ Kotlin ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค์ํ ์คํ์ ๊ธฐ๋ฅ์ด ์์ ์ํ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ์๋์์ ์ผ๋ถ ์์ ๋ฐ ๋์ ๋ ๋ฒ์ ์ ๋ณด๋ฅผ ํ์ธํด ๋ณด์ธ์.
- 1.3.40:
CharArray
/ByteArray
๋ฐString
๋ณํ ํจ์:ByteArray.decodeToString
๋ฐString.encodeToByteArray
CharArray.concatToString
๋ฐString.toCharArray
- 1.3.50: ๋นํธ ์ฐ์ฐ
countOneBits()
,countLeadingZeroBits()
,countTrailingZeroBits()
,takeHighestOneBit()
,takeLowestOneBit()
- 1.3.70: ์ปฌ๋ ์
์ฐ์ฐ
MutableList
;ArrayDeque
ํด๋์ค์randomOrNull()
,reduceOrNull()
,scan()
;remove*()
ํจ์ - 1.4-M2: ์ปฌ๋ ์
์ฐ์ฐ
onEachIndexed()
๋ฐreduceIndexedOrNull()
,runningFold()
๋ฐrunningReduce()
1.4 ๋ฒ์ ์์ ๋ ๋ง์ ํจ์ ๋ฐ ํด๋์ค๊ฐ ์์ ์ํ๋ก ๋ณ๊ฒฝ๋ ์์ ์
๋๋ค. ์ด๋ฒ ๋ฒ์ (1.4.0-RC)๋ถํฐ ํ๋ก์ ํธ์์ ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ @OptIn
์ด๋
ธํ
์ด์
์ด ํ์ํ์ง ์์ต๋๋ค.
์ฌ์ฉ ์ค๋จ ์ฃผ๊ธฐ
๊ธฐ๋ฅ ๋ฆด๋ฆฌ์ค์๋ ๊ธฐ์กด ์ฌ์ฉ ์ค๋จ ์ฃผ๊ธฐ์ ๋ํ ๊ฐ์ ์ฌํญ๋ ํฌํจ๋ฉ๋๋ค. ์ฆ๋ถ ๋ฆด๋ฆฌ์ค์์ WARNING
์์ค์ ์๋ก์ด ์ฌ์ฉ ์ค๋จ ์ฃผ๊ธฐ๋ก ์์๋์์ง๋ง ๊ธฐ๋ฅ ๋ฆด๋ฆฌ์ค์์๋ ERROR
์์ค์ผ๋ก ํ์ธต ๊ฐํ๋์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฏธ ERROR
์์ค์ผ๋ก ์ง์ ๋ API ์์๋ ์ฝ๋์ ์ ๊ท ์ฌ์ฉ ์์น์์ ์์ ํ ์จ๊น ์ฒ๋ฆฌ๋๋ฉฐ ์ด๋ฏธ ์ปดํ์ผ๋ ์ฝ๋์ ํธํ์ฑ์ ์ ์งํ๊ธฐ ์ํด 2์ง ํ์์ผ๋ก๋ง ์ ๊ณต๋ฉ๋๋ค. ์ด์ ๊ฐ์ ๋จ๊ณ๊ฐ ๊ฒฐํฉ๋์ด ์ฌ์ฉ ์ค๋จ๋ API ์์๊ฐ ์ ์ง์ ์ผ๋ก ์ ๊ฑฐ ๋ฉ๋๋ค.
์ฝ๋์์ ์ฌ์ฉ ์ค๋จ ์์ค์ด WARNING
์ธ API ์์๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๋ ์ด๋ฌํ ์ฌ์ฉ์ ๋ํด ๊ฒฝ๊ณ ํฉ๋๋ค. Kotlin 1.4.0-RC๋ก ์
๋ฐ์ดํธํ ๊ฒฝ์ฐ ์ผ๋ถ ๊ฒฝ๊ณ ๊ฐ ์ค๋ฅ ์์ค์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. IDE์์ ํ์๋๋ ๋ฉ์์ง๋ฅผ ํ์ฉํ์ฌ ์ค๋ฅ๊ฐ ์๋ ์ฝ๋ ์ฌ์ฉ์ ์ ๊ณต๋ ๋์ ์์๋ก ๋์ฒดํ๊ณ ์ฝ๋๊ฐ ๋ค์ ์ปดํ์ผ๋๋์ง ํ์ธํฉ๋๋ค.
Kotlin ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ API์ ํธํ์ฑ ์์ ๋ณ๊ฒฝ๊ณผ ๊ด๋ จํ ์์ธํ ๋ด์ฉ์ Kotlin 1.4 ํธํ์ฑ ๊ฐ์ด๋์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
์คํฌ๋ฆฝํธ ์์
์ด์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ๋ช ๊ฐ์์ ์ด ์น์ ์ด ์๋ต๋์์ง๋ง 1.4 ๋ฒ์ ์ Kotlin ์คํฌ๋ฆฝํธ ์์ ์ ๋์ฑ ์์ ์ ์ด๊ณ ๋น ๋ฅด๊ณ ์ฌ์ฉ์ด ๊ฐํธํ๊ฒ ๊ฐ์ ํ๋ ค๋ ๋ ธ๋ ฅ์ ์ง์๋์์ต๋๋ค. RC ๋ฒ์ ์๋ ๋ค์ํ ์์ ์ฌํญ ๋ฐ ๊ธฐ๋ฅ ๊ฐ์ ์ฌํญ์ด ์ถ๊ฐ๋์ด ์ฑ๋ฅ ํฅ์์ ํ์ธํ ์ ์์ต๋๋ค.
์ํฐํฉํธ ์ด๋ฆ ๋ณ๊ฒฝ
์ํฐํฉํธ ์ด๋ฆ์ ํผ๋์ ๋ฐฉ์งํ๊ณ ์ kotlin-scripting-jsr223-embeddable
๋ฐ kotlin-scripting-jvm-host-embeddable
์ํฐํฉํธ์ ์ด๋ฆ์ kotlin-scripting-jsr223
๋ฐ kotlin-scripting-jvm-host
๋ก ๋ณ๊ฒฝํ์ต๋๋ค(-embeddable
์ญ์ ). ์ด๋ฌํ ์ํฐํฉํธ๋ ์ฌ์ฉ ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ํจ๊ป ์ ๊ณต๋๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์จ๊น ์ฒ๋ฆฌํ๋ kotlin-compiler-embeddable
์ํฐํฉํธ์ ์ข
์๋ฉ๋๋ค. ์ด๋ฆ ๋ณ๊ฒฝ์ ํตํด kotlin-compiler-embeddable
(์ผ๋ฐ์ ์ผ๋ก ๋ ์์ ํจ) ์ํฐํฉํธ๊ฐ ์คํฌ๋ฆฝํธ ์์
์ ๋ํดํธ๋ก ์ฌ์ฉ๋๋๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
ํ์ง๋ง ์จ๊น ์ฒ๋ฆฌ๋์ง ์์ kotlin-compiler
์ ์ข
์๋ ์ํฐํฉํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ kotlin-scripting-jsr223-unshaded
์ ๊ฐ์ด -unshaded
์ ๋ฏธ์ด๊ฐ ํฌํจ๋ ์ํฐํฉํธ ๋ฒ์ ์ ์ฌ์ฉํ์ธ์. ์ด๋ฆ ๋ณ๊ฒฝ์ด ์ง์ ์ฌ์ฉ๋์ด์ผ ํ๋ ์คํฌ๋ฆฝํธ ์์
์ํฐํฉํธ์๋ง ์ํฅ์ ๋ฏธ์น๋ค๋ ์ ์ ์ ์ํ์ธ์. ๋ค๋ฅธ ์ํฐํฉํธ ์ด๋ฆ์ ๋ณ๊ฒฝ๋์ง ์์ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.
CLion IDE ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ ์ค๋จ
CLion IDE ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ ์ค๋จ ์ฃผ๊ธฐ๊ฐ ์์๋์์ต๋๋ค. ๊ธฐ์กด์ ํด๋น ํ๋ฌ๊ทธ์ธ์ Kotlin/Native ์คํ ํ์ผ ๋๋ฒ๊ทธ์ฉ์ผ๋ก ์ ์๋์์ต๋๋ค. ์ด์ IntelliJ IDEA Ultimate์์ ํธํ์ด ๋๋ฏ๋ก 1.4 ๋ฆด๋ฆฌ์ค ์ดํ CLion IDE ํ๋ฌ๊ทธ์ธ ์ถ์๋ ์ค๋จ๋ฉ๋๋ค. ์ด ์ค๋จ์ผ๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์ ํฌ ํ์ผ๋ก ๋ฌธ์ํด ์ฃผ์ธ์. ๋ฌธ์ ํด๊ฒฐ์ ์ง์ํ๊ธฐ ์ํด ์ต์ ์ ๋คํ๊ฒ ์ต๋๋ค.
ํธํ์ฑ
๋ชจ๋ ์ฃผ์ ๋ฆด๋ฆฌ์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ด์ ์ ๊ณต๊ฐํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ผ๋ถ ์ง์ ์ค๋จ ์ฃผ๊ธฐ๊ฐ Kotlin 1.4์์ ์ข ๋ฃ๋ฉ๋๋ค. ์ด๋ฌํ ์ฌ๋ก๋ ์ธ์ด ์์ํ์์ ๋ชจ๋ ์ ์คํ๊ฒ ๊ฒํ ํ ํ Kotlin 1.4 ํธํ์ฑ ๊ฐ์ด๋์ ํ์๋ฉ๋๋ค. ๋ํ ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ YouTrack์์ ํ์ธํ ์๋ ์์ต๋๋ค.
๋ฆด๋ฆฌ์ค ํ๋ณด ์๋ด
Kotlin 1.4์ ์ต์ข ๋ฆด๋ฆฌ์ค ํ๋ณด๊ฐ ๊ฒฐ์ ๋์์ผ๋ฉฐ ์ด์ ์ฌ๋ฌ๋ถ์ด ์ปดํ์ผํ๊ณ ๊ฒ์ํ ์ฐจ๋ก์ ๋๋ค! ๊ธฐ์กด ์ฃผ์ ๋ฆด๋ฆฌ์ค์๋ ๋ฌ๋ฆฌ Kotlin 1.4.0-RC์์ ์์ฑ๋ ๋ฐ์ด๋๋ฆฌ๋ Kotlin 1.4.0๊ณผ ํธํ์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค.
์ต์ ๊ธฐ๋ฅ ์ฌ์ฉ ๋ฐฉ๋ฒ
์ธ์ ๋์ฒ๋ผ play.kotl.in์์ Kotlin์ ์จ๋ผ์ธ์์ ์ฌ์ฉํด๋ณผ ์ ์์ต๋๋ค.
IntelliJ IDEA ๋ฐ Android Studio์์ Kotlin ํ๋ฌ๊ทธ์ธ์ 1.4.0-RC ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ ๋ณด๊ธฐ
ํ
์คํธ ๋ฒ์ ์ ์ค์นํ๊ธฐ ์ ์ ์์ฑ๋ ๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ ์์
ํ๋ ค๋ฉด Gradle ๋๋ Maven์์ ํ
์คํธ ๋ฒ์ ์ ๋ํ ๋น๋๋ฅผ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ๊ธฐ์กด ํ
์คํธ ๋ฒ์ ๊ณผ๋ ๋ฌ๋ฆฌ Kotlin 1.4.0-RC๋ Maven Central์์๋ ๋ฐ๋ก ์ง์๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋น๋ ํ์ผ์ kotlin-eap
์ ์ฅ์๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค.
๋ช ๋ น์ค ์ปดํ์ผ๋ฌ๋ GitHub ๋ฆด๋ฆฌ์ค ํ์ด์ง์์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
๋ํ ์ด๋ฒ ๋ฆด๋ฆฌ์ค์ ํจ๊ป ๊ฒ์๋ ๋ค์ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- kotlinx.atomicfu ๋ฒ์ :
0.14.3-1.4.0-rc
- kotlinx.coroutines ๋ฒ์ :
1.3.8-1.4.0-rc
- kotlinx.serialization ๋ฒ์ :
1.0-M1-1.4.0-rc
- ktor ๋ฒ์ :
1.3.2-1.4.0-rc
๋ฆด๋ฆฌ์ค์ ๊ดํ ์ธ๋ถ ์ ๋ณด ๋ฐ ํธํ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชฉ๋ก์ ์ฌ๊ธฐ์ ๋์ ์์ต๋๋ค.
์๊ฒฌ์ ๊ณต์ ํด ์ฃผ์ธ์
๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ์ ๊ฒฝ์ฐ ์ด์ ํธ๋์ปค๋ก ๋ณด๊ณ ํด ์ฃผ์๋ฉด ๋๋จํ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ์ ํฌ๋ ์ต์ข
๋ฆด๋ฆฌ์ค ์ ์ ๋ชจ๋ ์ค์ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ๋
ธ๋ ฅํ๊ณ ์์ผ๋ฏ๋ก ๋ค์ Kotlin ๋ฆด๋ฆฌ์ค๊น์ง ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ค ํ์๊ฐ ์์ต๋๋ค.
๋ํ ์ธ์ ๋ ๋ค์ ์ด๋ ๋งํฌ๋ฅผ ํตํด Kotlin Slack์ #eap ์ฑ๋์ ์ฐธ์ฌํ์ฌ ์ง๋ฌธํ๊ณ ํ ๋ก ์ ์ฐธ์ฌํ๊ฑฐ๋ ์๋ก์ด ํ ์คํธ ๋ฒ์ ๋น๋์ ๊ดํ ์๋ฆผ์ ๋ฐ์๋ณด์ธ์.
Letโs Kotlin!
์ธ๋ถ ๊ธฐ์ฌ์
์ด ๋ฆด๋ฆฌ์ค์ ํฌํจ๋ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ๊ณตํด ์ฃผ์ ๋ชจ๋ ์ธ๋ถ ๊ธฐ์ฌ์๊ป๋ ๊ฐ์ฌ์ ๋ง์์ ์ ํฉ๋๋ค.
- Toshiaki Kameyama
- Steven Schรคfer
- Jinseong Jeon
- pyos
- Mark Punzalan
- rapturemain
- Vitaly
- Mads Ager
- Subroh Nishikori
- Juan Chen
- gcx11
- rbares
- Henrik Tunedal
- Efeturi Money
- Yuku Kotani
- Dmitry Borodin
- Mikhail Likholetov
- Mike Samuel
- Matthew Gharrity
- Jim Sproch
- Raluca Sauciuc
- Martin Petrov
- Segun Famisa
- Sinan Kozak
- Kristoffer Andersen
- Anastasiya Krasnoryadtseva
- Vadim Semenov
- Kevin Most
- Valeriy Vyrva
- Victor Turansky
์ด ๊ฒ์๋ฌผ์ Sebastian Aigner๊ฐ ์์ฑํ Kotlin 1.4.0-RC Released๋ฅผ ๋ฒ์ญํ ๊ธ์ ๋๋ค.
Subscribe to Kotlin Blog updates
- ํฅ์๋ *.gradle.kts IDE ์ง์
- ํ๋ก์ ํธ ๊ตฌ์ฑ์ ์์ฉ๊ตฌ ๊ฐ์
- Kotlin/Native
- Kotlin/JS
- ๋ํดํธ ์ปดํ์ผ๋ฌ ๋ฐฑ์๋์ฉ @JsExport ์ด๋ ธํ ์ด์
- npm ์ข ์ ์์ ๊ด๋ฆฌ ๋ณ๊ฒฝ ์ฌํญ
- CSS ์ง์ ๋ณ๊ฒฝ ์ฌํญ
- Dukat ํตํฉ ๊ฐ์
- kotlin.dom ๋ฐ kotlin.browser๋ฅผ ๋ณ๋์ ์ํฐํฉํธ๋ก ๋ง์ด๊ทธ๋ ์ด์
- ํ ์คํธ ๋ฒ์ : kotlinx-nodejs
- kotlin2js ๋ฐ kotlin-dce-js Gradle ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ ์ค๋จ
- ์ถ์ ์ง์ ๋์ด๋ ์ถ๊ฐ ๊ฐ์ ์ฌํญ ๋ฐ ์ฃผ์ ์์ ์ฌํญ
- ์งํํ๋ Kotlin ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ API
- ์คํฌ๋ฆฝํธ ์์
- CLion IDE ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ ์ค๋จ
- ํธํ์ฑ
- ์ต์ ๊ธฐ๋ฅ ์ฌ์ฉ ๋ฐฉ๋ฒ
- ์๊ฒฌ์ ๊ณต์ ํด ์ฃผ์ธ์
- ์ธ๋ถ ๊ธฐ์ฌ์