{"id":97327,"date":"2020-11-24T08:50:38","date_gmt":"2020-11-24T07:50:38","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=kotlin&#038;p=97327"},"modified":"2020-11-24T08:50:38","modified_gmt":"2020-11-24T07:50:38","slug":"kotlin-1-4-20-released","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/ko\/kotlin\/2020\/11\/kotlin-1-4-20-released\/","title":{"rendered":"Kotlin 1.4.20\uc774 \ucd9c\uc2dc\ub418\uc5c8\uc2b5\ub2c8\ub2e4"},"content":{"rendered":"<p>Kotlin 1.4.20\uc774 \uc0c8\ub85c\uc6b4 \uc2e4\ud5d8\uc801 \uae30\ub2a5\uacfc \ud568\uaed8 \ucd9c\uc2dc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ucee4\ubba4\ub2c8\ud2f0 \uc758\uacac\uc5d0 \ub300\ud574 \uc5f4\ub9b0 \ud0dc\ub3c4\ub294 Kotlin \ud300\uc758 \uae30\ubcf8 \uc6d0\uce59 \uc911 \ud558\ub098\ub85c\uc11c, \uc800\ud76c\uc5d0\uac8c\ub294 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc758 \ud504\ub85c\ud1a0\ud0c0\uc785\uc5d0 \ub300\ud55c \uc5ec\ub7ec\ubd84\uc758 \uc0dd\uac01\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uc9c1\uc811 <a href=\"#how-to-update\">\uccb4\ud5d8<\/a>\ud574 \ubcf4\uace0 <a href=\"http:\/\/kotlinlang.slack.com\/\" target=\"_blank\" rel=\"noopener\">Slack<\/a>(<a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up?_ga=2.134077326.1218289669.1605167163-154294388.1603171954\" target=\"_blank\" rel=\"noopener\">\uc5ec\uae30<\/a> \ub610\ub294 <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/KT\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a>\uc5d0\uc11c \ucd08\ub300 \ubc1b\uae30)\uc5d0\uc11c \uc758\uacac\uc744 \uacf5\uc720\ud574 \uc8fc\uc138\uc694.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/11\/banners_twitter.png\" alt=\"Kotlin 1.4.20\" \/><\/p>\n<p>\uc8fc\uc694 \uac1c\uc120 \uc0ac\ud56d\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>invokedynamic\uc744 \ud1b5\ud55c \ubb38\uc790\uc5f4 \uc5f0\uacb0 \ub4f1\uc758 \uc0c8\ub85c\uc6b4 JVM \uae30\ub2a5 \uc9c0\uc6d0<\/li>\n<li>KMM \ud504\ub85c\uc81d\ud2b8\uc758 \ud5a5\uc0c1\ub41c \uc131\ub2a5 \ubc0f \uc608\uc678 \ucc98\ub9ac<\/li>\n<li>JDK \uacbd\ub85c: <code>Path(\u201cdir\u201d) \/ \u201cfile.txt\u201d<\/code>\uc758 \ud655\uc7a5 \uae30\ub2a5<\/li>\n<\/ul>\n<p>\uc774 \uc678\uc5d0\ub3c4 1.4.0\uc5d0 \ucd94\uac00\ub41c \uae30\ub2a5\uc744 \ud3ec\ud568\ud558\uc5ec \uae30\uc874 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc218\ub9ce\uc740 \uc218\uc815 \ubc0f \uac1c\uc120 \uc0ac\ud56d\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc774\ub7ec\ud55c \uae30\ub2a5 \uc911\uc5d0\uc11c \ubb38\uc81c\ub97c \uacaa\uc73c\uc2e0 \uc801\uc774 \uc788\ub2e4\uba74 \ub2e4\uc2dc \ud55c \ubc88 \uc0ac\uc6a9\ud574 \ubcf4\uc138\uc694.<\/p>\n<p>Kotlin 1.4.20\uc758 \uae30\ub2a5\uc744 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\ub824\uba74 \uacc4\uc18d \uc77d\uc5b4\ubcf4\uc138\uc694. Kotlin \ubb38\uc11c \ub0b4 <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/whatsnew1420.html\" target=\"_blank\" rel=\"noopener\">Kotlin 1.4.20\uc758 \uc0c8\ub85c\uc6b4 \uae30\ub2a5<\/a> \ud398\uc774\uc9c0\uc5d0\uc11c \ub9b4\ub9ac\uc2a4\uc5d0 \uad00\ud55c \uac04\ub7b5\ud55c \uac1c\uc694\ub97c \ud655\uc778\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc804\uccb4 \ubcc0\uacbd \ubaa9\ub85d\uc740 <a href=\"https:\/\/github.com\/JetBrains\/kotlin\/blob\/1.4.20\/ChangeLog.md\" target=\"_blank\" rel=\"noopener\">\ubcc0\uacbd \ub85c\uadf8<\/a>\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc5b8\uc81c\ub098 \uadf8\ub807\ub4ef\uc774 \uc774\ubc88 \ub9b4\ub9ac\uc2a4\uc5d0 \ub3c4\uc6c0\uc744 \uc8fc\uc2e0 <a href=\"#external-contributors\">\uc678\ubd80 \uae30\uc5ec\uc790\ub4e4<\/a>\uaed8 \uac10\uc0ac\uc758 \ub9d0\uc500\uc744 \uc804\ud569\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub7ec\uba74 \uc9c0\uae08\ubd80\ud130 \uc138\ubd80 \uc0ac\ud56d\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4!<\/p>\n<h2>Kotlin\/JVM<\/h2>\n<p><a name=\"kotlin-jvm\"><\/a><\/p>\n<p>JVM\uc5d0\uc11c\ub294 \uc0c8\ub85c\uc6b4 JVM 15 \ub300\uc0c1\uc744 \ucd94\uac00\ud588\uc73c\uba70 \uc8fc\ub85c \uae30\uc874 \uae30\ub2a5\uacfc \uc131\ub2a5\uc744 \uac1c\uc120\ud558\uace0 \ubc84\uadf8\ub97c \uc218\uc815\ud558\ub294 \ub370 \uc911\uc810\uc744 \ub450\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>invokedynamic \ubb38\uc790\uc5f4 \uc5f0\uacb0<\/h3>\n<p>Java 9 \uc774\ud6c4 JVM\uc5d0\uc11c \ubb38\uc790\uc5f4 \uc5f0\uacb0\uc740 <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/technotes\/guides\/vm\/multiple-language-support.html#invokedynamic\" target=\"_blank\" rel=\"noopener\">\ub3d9\uc801 \uba54\uc18c\ub4dc \ud638\ucd9c<\/a>(\ubc14\uc774\ud2b8\ucf54\ub4dc\uc758 <code>invokedynamic<\/code> \uba85\ub839\uc5b4)\uc744 \ud1b5\ud574 \uc218\ud589\ub429\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ubc29\uc2dd\uc740 \uc774\uc804 \uad6c\ud604\ubcf4\ub2e4 \ub354 \ube60\ub974\uac8c \uc791\ub3d9\ud558\uace0 \uba54\ubaa8\ub9ac\ub97c \ub35c \uc18c\ube44\ud558\uba70, \ubc14\uc774\ud2b8\ucf54\ub4dc \ubcc0\uacbd \uc5c6\uc774 \ud5a5\ud6c4 \ucd5c\uc801\ud654\ub97c \uc704\ud55c \uacf5\uac04\uc744 \ub0a8\uaca8 \ub461\ub2c8\ub2e4.<\/p>\n<p>Kotlin\uc5d0\uc11c\ub3c4 \uc131\ub2a5 \uac1c\uc120\uc744 \uc704\ud574 \uc774 \uba54\ucee4\ub2c8\uc998\uc744 \uad6c\ud604\ud558\uae30 \uc2dc\uc791\ud558\uc5ec, \uc774\uc81c JVM 9 \uc774\uc0c1\uc758 \ub300\uc0c1\uc5d0\uc11c \ubb38\uc790\uc5f4 \uc5f0\uacb0\uc744 \ub3d9\uc801 \ud638\ucd9c\ub85c \ucef4\ud30c\uc77c\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ud604\uc7ac \uc774 \uae30\ub2a5\uc740 \uc2e4\ud5d8\uc801\uc774\uba70 \ub2e4\uc74c\uc758 \uacbd\uc6b0\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\uc5f0\uc0b0\uc790(<code>a + b<\/code>), \uba85\uc2dc\uc801(<code>a.plus(b)<\/code>), \ucc38\uc870(<code>(a::plus)(b)<\/code>) \ud615\uc2dd\uc758 <code>String.plus<\/code><\/li>\n<li>\uc778\ub77c\uc778 \ubc0f \ub370\uc774\ud130 \ud074\ub798\uc2a4\uc758 <code>toString<\/code><\/li>\n<li>\uc0c1\uc218\uac00 \uc544\ub2cc \ub2e8\uc77c \uc778\uc218\uac00 \uc788\ub294 \uacbd\uc6b0\ub97c \uc81c\uc678\ud55c \ubb38\uc790\uc5f4 \ud15c\ud50c\ub9bf(<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42457\" target=\"_blank\" rel=\"noopener\">KT-42457<\/a> \ucc38\uc870)<\/li>\n<\/ul>\n<p><code>invokedynamic<\/code> \ubb38\uc790\uc5f4 \uc5f0\uacb0\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 \ub2e4\uc74c \uac12 \uc911 \ud558\ub098\uc640 \ud568\uaed8 <code>-Xstring-concat<\/code> \ucef4\ud30c\uc77c\ub7ec \uc635\uc158\uc744 \ucd94\uac00\ud558\uc138\uc694.<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.oracle.com\/javase\/9\/docs\/api\/java\/lang\/invoke\/StringConcatFactory.html#makeConcatWithConstants-java.lang.invoke.MethodHandles.Lookup-java.lang.String-java.lang.invoke.MethodType-java.lang.String-java.lang.Object...-\" target=\"_blank\" rel=\"noopener\">StringConcatFactory.makeConcatWithConstants()<\/a>\ub97c \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc790\uc5f4\uc5d0 \ub300\ud574 <code>invokedynamic<\/code> \uc5f0\uacb0\uc744 \uc218\ud589\ud558\ub294 <code>indy-with-constants<\/code>(1.5\uc5d0\uc11c JVM 9 \uc774\uc0c1\uc758 \ub300\uc0c1\uc5d0\uc11c \ub514\ud3f4\ud2b8 \uac12\uc774 \ub420 \uc608\uc815)<\/li>\n<li><a href=\"https:\/\/docs.oracle.com\/javase\/9\/docs\/api\/java\/lang\/invoke\/StringConcatFactory.html#makeConcat-java.lang.invoke.MethodHandles.Lookup-java.lang.String-java.lang.invoke.MethodType-\" target=\"_blank\" rel=\"noopener\">StringConcatFactory.makeConcat()<\/a>\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc790\uc5f4\uc5d0 \ub300\ud574 <code>invokedynamic<\/code> \uc5f0\uacb0\uc744 \uc218\ud589\ud558\ub294 <code>indy<\/code><\/li>\n<li><code>StringBuilder.append()<\/code>\ub97c \ud1b5\ud574 \ud074\ub798\uc2dd \uc5f0\uacb0\ub85c \ub2e4\uc2dc \uc804\ud658\ud558\ub294 <code>inline<\/code><\/li>\n<\/ul>\n<h2>Kotlin\/JS<\/h2>\n<p><a name=\"kotlin-js\"><\/a><\/p>\n<p>Kotlin\/JS\ub294 \uacc4\uc18d\ud574\uc11c \ube60\ub978 \uc18d\ub3c4\ub85c \ubc1c\uc804\ud558\uace0 \uc788\uc73c\uba70, \uc774\ubc88 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c\ub294 \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc81d\ud2b8 \ub9c8\ubc95\uc0ac\uc6a9 \ud15c\ud50c\ub9bf, \ud6a8\uacfc\uc801\uc778 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc131 \uc81c\uc5b4\ub97c \uc704\ud55c \ud5a5\uc0c1\ub41c DSL \ub4f1 \ub2e4\uc591\ud55c \uac1c\uc120 \uc0ac\ud56d\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \ub610\ud55c \uc0c8\ub85c\uc6b4 IR \ucef4\ud30c\uc77c\ub7ec\uc5d0\ub294 \uc624\ub958\uac00 \uc788\ub294 \ud504\ub85c\uc81d\ud2b8\ub97c \ucef4\ud30c\uc77c\ud558\ub294 \uc644\uc804\ud788 \uc0c8\ub85c\uc6b4 \ubc29\ubc95\uc774 \ud0d1\uc7ac\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>Gradle DSL \ubcc0\uacbd \ub0b4\uc6a9<\/h3>\n<p>Kotlin\/JS Gradle DSL\uc5d0\ub294 webpack \uad6c\uc131 \uc870\uc815, \uc790\ub3d9 \uc0dd\uc131\ub41c package.json \ud30c\uc77c \uc218\uc815, \uc774\ud589 \uc885\uc18d \uc694\uc18c\uc5d0 \ub300\ud55c \ud5a5\uc0c1\ub41c \uc81c\uc5b4\ub97c \ud3ec\ud568\ud574 \ud504\ub85c\uc81d\ud2b8 \uc124\uc815 \ubc0f \uc0ac\uc6a9\uc790 \uc9c0\uc815\uc744 \ub2e8\uc21c\ud654\ud558\ub294 \uc5ec\ub7ec \uc5c5\ub370\uc774\ud2b8\uac00 \uc801\uc6a9\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<h4>webpack \uad6c\uc131\uc744 \uc704\ud55c \ub2e8\uc77c \uc9c0\uc810<\/h4>\n<p>Kotlin 1.4.20\uc5d0\ub294 <code>commonWebpackConfig<\/code>\ub77c\ub294 <code>\ube0c\ub77c\uc6b0\uc800<\/code> \ub300\uc0c1\uc5d0 \ub300\ud55c \uc0c8\ub85c\uc6b4 \uad6c\uc131 \ube14\ub85d\uc774 \ub3c4\uc785\ub418\uc5c8\uc2b5\ub2c8\ub2e4. <code>webpackTask<\/code>, <code>runTask<\/code>, <code>testTask<\/code>\uc5d0 \ub300\ud55c \uad6c\uc131\uc744 \ubcf5\uc81c\ud558\ub294 \ub300\uc2e0, \uc774 \uad6c\uc131 \ube14\ub85d \ub0b4\uc758 \ub2e8\uc77c \uc9c0\uc810\uc5d0\uc11c \uacf5\ud1b5 \uc124\uc815\uc744 \uc870\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc138 \uac00\uc9c0 \uc791\uc5c5 \ubaa8\ub450\uc5d0 \ub300\ud574 \uae30\ubcf8\uc801\uc73c\ub85c CSS \uc9c0\uc6d0\uc744 \ud65c\uc131\ud654\ud558\ub824\uba74 \ud504\ub85c\uc81d\ud2b8\uc758 <code>build.gradle(.kts)<\/code>\uc5d0 \ub2e4\uc74c \uc2a4\ub2c8\ud3ab\uc744 \ud3ec\ud568\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\r\nkotlin {\r\n\tbrowser {\r\n\t\tcommonWebpackConfig {\r\n\t\t\tcssSupport.enabled = true\r\n\t\t}\r\n\t\tbinaries.executable()\r\n\t}\r\n}\r\n<\/pre>\n<h4>Gradle\uc5d0\uc11c package.json \uc0ac\uc6a9\uc790 \uc9c0\uc815<\/h4>\n<p><code>package.json<\/code> \ud30c\uc77c\uc740 \uc77c\ubc18\uc801\uc73c\ub85c JavaScript \ud504\ub85c\uc81d\ud2b8\uc758 \uc791\ub3d9 \ubc29\uc2dd\uc744 \uc815\uc758\ud558\uc5ec, \uc2e4\ud589 \uac00\ub2a5\ud55c \uc2a4\ud06c\ub9bd\ud2b8, \uc885\uc18d \uc694\uc18c \ub4f1\uc744 \uc2dd\ubcc4\ud569\ub2c8\ub2e4. \uc774 \ud30c\uc77c\uc740 \ube4c\ub4dc\uac00 \uc9c4\ud589\ub418\ub294 \ub3d9\uc548 Kotlin\/JS \ud504\ub85c\uc81d\ud2b8\uc6a9\uc73c\ub85c \uc790\ub3d9 \uc0dd\uc131\ub429\ub2c8\ub2e4. \uadf8\ub7ec\ub098 <code>package.json<\/code>\uc758 \ub0b4\uc6a9\uc740 \uc0c1\ud669\ubcc4\ub85c \ub2e4\uc591\ud558\uae30 \ub54c\ubb38\uc5d0 \uc774 \ud30c\uc77c\uc744 \uc27d\uac8c \ub9de\ucda4 \uc124\uc815\ud560 \uc218\uc788\ub294 \ubc29\ubc95\uc744 \ub9cc\ub4e4\uc5b4 \ub2ec\ub77c\ub294 \uc694\uccad\uc774 \ub9ce\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Kotlin 1.4.20\ubd80\ud130\ub294 Gradle \ube4c\ub4dc \uc2a4\ud06c\ub9bd\ud2b8\uc5d0\uc11c <code>package.json<\/code> \ud504\ub85c\uc81d\ud2b8 \ud30c\uc77c\uc5d0 \ud56d\ubaa9\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>package.json<\/code>\uc5d0 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ud544\ub4dc\ub97c \ucd94\uac00\ud558\ub824\uba74 \ucef4\ud30c\uc77c <code>packageJson<\/code> \ube14\ub85d\uc5d0\uc11c <code>customField<\/code> \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\uc138\uc694.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\r\nkotlin {\r\n    js(BOTH) {\r\n        compilations[&quot;main&quot;].packageJson {\r\n            customField(&quot;hello&quot;, mapOf(&quot;one&quot; to 1, &quot;two&quot; to 2))\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>\uadf8\ub7ec\uba74 \ud504\ub85c\uc81d\ud2b8\ub97c \ube4c\ub4dc\ud560 \ub54c \uad6c\uc131 \ud30c\uc77c <code>build\/js\/packages\/projectName\/package.json<\/code>\uc5d0 \ub2e4\uc74c \ube14\ub85d\uc774 \ucd94\uac00\ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">&quot;hello&quot;: {\n  &quot;one&quot;: 1,\n  &quot;two&quot;: 2\n}<\/pre>\n<p>\uad6c\uc131\uc5d0 \uc2a4\ud06c\ub9bd\ud2b8 \ud544\ub4dc\ub97c \ucd94\uac00\ud574 \uba85\ub839\uc904\uc5d0\uc11c \ud504\ub85c\uc81d\ud2b8\ub97c \uc27d\uac8c \uc2e4\ud589\ud558\ub824\ub294 \uacbd\uc6b0\ub4e0, \ub2e4\ub978 \ud6c4\ucc98\ub9ac \ub3c4\uad6c\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \ud3ec\ud568\ud558\ub824\ub294 \uacbd\uc6b0\ub4e0, \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ud544\ub4dc\ub97c \uc9c0\uc815\ud558\ub294 \uc774 \uc0c8\ub85c\uc6b4 \ubc29\ubc95\uc774 \uc720\uc6a9\ud558\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n<h4>\uc120\ud0dd\uc801 yarn \uc885\uc18d \uc694\uc18c \ud574\uacb0(\uc2e4\ud5d8\uc801)<\/h4>\n<p>npm\uc758 \uc885\uc18d \uc694\uc18c\ub97c \ud3ec\ud568\ud560 \ub54c \uc885\uc18d \uc694\uc18c(<em>\uc774\ud589 \uc885\uc18d \uc694\uc18c<\/em>)\ub97c \uc815\ubc00\ud558\uac8c \uc81c\uc5b4\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uacbd\uc6b0\uc5d0\ub294 \ub2e4\uc591\ud55c \uc774\uc720\uac00 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9 \uc911\uc778 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc885\uc18d \uc694\uc18c \uc911 \ud558\ub098\uc5d0 \uc911\uc694\ud55c \uc5c5\uadf8\ub808\uc774\ub4dc\ub97c \uc801\uc6a9\ud558\uace0 \uc2f6\uc744 \uc218\ub3c4 \uc788\uace0, \ud604\uc7ac \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc911\ub2e8\ud558\ub294 \uc774\ud589 \uc885\uc18d \uc694\uc18c\uc758 \uc5c5\ub370\uc774\ud2b8\ub97c \ub864\ubc31\ud558\uace0 \uc2f6\uc744 \uc218\ub3c4 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4. Yarn\uc758 <a href=\"https:\/\/classic.yarnpkg.com\/en\/docs\/selective-version-resolutions\/\" target=\"_blank\" rel=\"noopener\">\uc120\ud0dd\uc801 \uc885\uc18d \uc694\uc18c \ud574\uacb0<\/a>\uc744 \ud1b5\ud574 \uc6d0\ubcf8 \uc791\uc131\uc790\uac00 \uc9c0\uc815\ud55c \uc885\uc18d \uc694\uc18c\ub97c \uc7ac\uc815\uc758\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uac1c\ubc1c\uc744 \uc774\uc5b4\uac08 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Kotlin 1.4.20\uc5d0\uc11c\ub294 \ud504\ub85c\uc81d\ud2b8\uc758 Gradle \ube4c\ub4dc \uc2a4\ud06c\ub9bd\ud2b8\uc5d0\uc11c \uc774 \uae30\ub2a5\uc744 \uad6c\uc131\ud560 \uc218 \uc788\ub294 \uc608\ube44\uc801(\uc2e4\ud5d8\uc801) \ubc29\ubc95\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \ub098\uba38\uc9c0 Kotlin\/JS \uc635\uc158\uacfc\uc758 \uc6d0\ud65c\ud55c API \ud1b5\ud569\uc740 \uc5ec\uc804\ud788 \uc791\uc5c5 \uc911\uc774\uc9c0\ub9cc <code>YarnPlugin<\/code>\uc5d0 \uc788\ub294 <code>YarnRootExtension<\/code>\uc744 \ud1b5\ud574 \uc774\ubbf8 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ud574\uacb0\ub41c \ud328\ud0a4\uc9c0 \ubc84\uc804\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce58\ub824\uba74 <code>resolution(\ud574\uacb0)<\/code> \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc138\uc694. \uc778\uc218\uc5d0\uc11c \ud328\ud0a4\uc9c0 \uc774\ub984 \uc120\ud0dd\uc790(<a href=\"https:\/\/classic.yarnpkg.com\/en\/docs\/selective-version-resolutions\/\" target=\"_blank\" rel=\"noopener\">Yarn<\/a>\uc5d0 \uc9c0\uc815\ub41c \ub300\ub85c)\uc640 \uc6d0\ud558\ub294 \ubc84\uc804\uc744 \uc9c0\uc815\ud558\uc138\uc694.<\/p>\n<p><code>build.gradle.kts<\/code> \ud30c\uc77c\uc758 \uc120\ud0dd\uc801 \uc885\uc18d \uc694\uc18c \ud574\uacb0\uc744 \uc704\ud55c \uc608\uc2dc \uad6c\uc131\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\r\nrootProject.plugins.withType&lt;YarnPlugin&gt; {\r\n    rootProject.the&lt;YarnRootExtension&gt;().apply {\r\n        resolution(&quot;react&quot;, &quot;16.0.0&quot;)\r\n        resolution(&quot;processor\/decamelize&quot;, &quot;3.0.0&quot;)\r\n    }\r\n}\r\n<\/pre>\n<p>\uc5ec\uae30\uc5d0\uc11c <code>react<\/code>\uac00 \ud544\uc694\ud55c <em>\ubaa8\ub4e0<\/em> npm \uc885\uc18d \uc694\uc18c\ub294 \ubc84\uc804 <code>16.0.0<\/code>\uc744 \uc218\uc2e0\ud558\uace0, <code>\ud504\ub85c\uc138\uc11c<\/code>\ub294 \ubc84\uc804 <code>3.0.0<\/code>\uc73c\ub85c <code>decamelize<\/code> \uc885\uc18d \uc694\uc18c\ub97c \uc218\uc2e0\ud569\ub2c8\ub2e4. \ub610\ud55c <code>include<\/code> \ubc0f <code>exclude<\/code> \ud638\ucd9c\uc744 <code>resolution<\/code> \ube14\ub85d\uc5d0 \uc804\ub2ec\ud560 \uc218\ub3c4 \uc788\uc73c\ubbc0\ub85c \ud5c8\uc6a9 \uac00\ub2a5\ud55c \ubc84\uc804\uc5d0 \ub300\ud55c \uc81c\uc57d \uc870\uac74\uc744 \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h4>\uc138\ubd84\ud654\ub41c \uc791\uc5c5 \uacf5\uac04 \ube44\ud65c\uc131\ud654(\uc2e4\ud5d8\uc801)<\/h4>\n<p>\ube4c\ub4dc \uc2dc\uac04\uc744 \ub2e8\ucd95\ud558\uae30 \uc704\ud574 Kotlin\/JS Gradle \ud50c\ub7ec\uadf8\uc778\uc740 \ud2b9\uc815 Gradle \uc791\uc5c5\uc5d0 \ud544\uc694\ud55c \uc885\uc18d \uc694\uc18c\ub9cc \uc124\uce58\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, <code>webpack-dev-server<\/code> \ud328\ud0a4\uc9c0\ub294 <code>*Run<\/code> \uc791\uc5c5 \uc911 \ud558\ub098\ub97c \uc2e4\ud589\ud560 \ub54c\ub9cc \uc124\uce58\ub418\uba70 <code>assemble<\/code> \uc791\uc5c5\uc744 \uc2e4\ud589\ud560 \ub54c\ub294 \uc124\uce58\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ub418\uba74 \ubd88\ud544\uc694\ud55c \ub2e4\uc6b4\ub85c\ub4dc\ub294 \ud53c\ud560 \uc218 \uc788\uc9c0\ub9cc \uc5ec\ub7ec Gradle \ud504\ub85c\uc138\uc2a4\ub97c \ubcd1\ub82c\ub85c \uc2e4\ud589\ud560 \uacbd\uc6b0 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \uc885\uc18d \uc694\uc18c \uc694\uad6c\uc0ac\ud56d\uc774 \ucda9\ub3cc\ud588\uc744 \ub54c \ub450 \uac00\uc9c0 npm \ud328\ud0a4\uc9c0 \uc124\uce58\uac00 \uc2e4\ud589\ub418\uba74 \uc624\ub958\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 Kotlin 1.4.20\uc5d0\ub294 \uc774\ub7ec\ud55c _\uc138\ubd84\ud654\ub41c \uc791\uc5c5 \uacf5\uac04_\uc744 \ube44\ud65c\uc131\ud654\ud558\ub294 \uc0c8\ub85c\uc6b4(\uc2e4\ud5d8\uc801) \uc635\uc158\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4. \uc120\ud0dd\uc801 \uc885\uc18d \uc694\uc18c \ud574\uacb0\uc5d0 \ub300\ud55c \uc2e4\ud5d8\uc801 \uc9c0\uc6d0\uacfc \ub9c8\ucc2c\uac00\uc9c0\ub85c, \uc774 \uae30\ub2a5\uc740 \ud604\uc7ac <code>YarnRootExtension<\/code>\uc744 \ud1b5\ud574 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc9c0\ub9cc \ud5a5\ud6c4 \ub098\uba38\uc9c0 Kotlin\/JS Gradle DSL\uacfc \ub354 \uae34\ubc00\ud558\uac8c \ud1b5\ud569\ub420 \uac83\uc785\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 <code>build.gradle.kts<\/code> \ud30c\uc77c\uc5d0 \ub2e4\uc74c \uc2a4\ub2c8\ud3ab\uc744 \ucd94\uac00\ud558\uc138\uc694.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\r\nrootProject.plugins.withType&lt;YarnPlugin&gt; {\r\n    rootProject.the&lt;YarnRootExtension&gt;().disableGranularWorkspaces()\r\n}\r\n<\/pre>\n<p>\uc774 \uad6c\uc131\uc744 \uc0ac\uc6a9\ud558\uba74 Kotlin\/JS Gradle \ud50c\ub7ec\uadf8\uc778\uc740 \ud604\uc7ac \uc2e4\ud589\ub418\uc9c0 \uc54a\ub294 \uc791\uc5c5\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uc885\uc18d \uc694\uc18c\ub97c \ud3ec\ud568\ud558\uc5ec \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ub420 \uc218 \uc788\ub294 \ubaa8\ub4e0 npm \uc885\uc18d \uc694\uc18c\ub97c \uc124\uce58\ud569\ub2c8\ub2e4. \uc989, \uccab Gradle \ube4c\ub4dc\ub294 \uc870\uae08 \uc624\ub798 \uac78\ub9b4 \uc218 \uc788\uc9c0\ub9cc \ub2e4\uc6b4\ub85c\ub4dc\ud55c \uc885\uc18d \uc694\uc18c\ub294 \uc2e4\ud589\ud558\ub294 \ubaa8\ub4e0 \uc791\uc5c5\uc5d0 \ub300\ud574 \ucd5c\uc2e0 \uc0c1\ud0dc\uac00 \ub429\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \uc5ec\ub7ec Gradle \ud504\ub85c\uc138\uc2a4\ub97c \ubcd1\ub82c\ub85c \uc2e4\ud589\ud574\ub3c4 \ucda9\ub3cc\uc744 \ud53c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\uc0c8\ub85c\uc6b4 \ub9c8\ubc95\uc0ac \ud15c\ud50c\ub9bf<\/h3>\n<p>\ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131 \uc2dc \ub354 \ud3b8\ub9ac\ud558\uac8c \ud504\ub85c\uc81d\ud2b8\ub97c \uc0ac\uc6a9\uc790 \uc9c0\uc815\ud560 \uc218 \uc788\ub3c4\ub85d Kotlin\uc6a9 \ud504\ub85c\uc81d\ud2b8 \ub9c8\ubc95\uc0ac\uc5d0 \uc870\uc815 \uac00\ub2a5\ud55c Kotlin\/JS \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc6a9 \ud15c\ud50c\ub9bf\uc774 \uc0c8\ub85c \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ube0c\ub77c\uc6b0\uc800 \ubc0f Node.js \ub7f0\ud0c0\uc784 \ud658\uacbd \ubaa8\ub450\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud15c\ud50c\ub9bf\uc774 \ub9c8\ub828\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ud15c\ud50c\ub9bf\uc740 \ud504\ub85c\uc81d\ud2b8\uc758 \uc88b\uc740 \uc2dc\uc791\uc810\uc73c\ub85c \uc0bc\uc744 \uc218 \uc788\uace0 \ucd08\uae30 \uad6c\uc131\uc744 \uc138\uc138\ud558\uac8c \uc870\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\ub294 \uc0c8 IR \ucef4\ud30c\uc77c\ub7ec \ud65c\uc131\ud654 \uc124\uc815 \ub610\ub294 \ucd94\uac00 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc9c0\uc6d0 \uc124\uc815 \ub4f1\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4.<\/p>\n<p>Kotlin 1.4.20\uc5d0\uc11c\ub294 \ub2e4\uc74c \uc138 \uac00\uc9c0 \ud15c\ud50c\ub9bf\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li><strong>Browser Application<\/strong>\uc744 \uc0ac\uc6a9\ud558\uba74 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 \ubca0\uc5b4\ubcf8 Kotlin\/JS Gradle \ud504\ub85c\uc81d\ud2b8\ub97c \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li><strong>React Application<\/strong>\uc5d0\ub294 \uc801\uc808\ud55c <a href=\"https:\/\/github.com\/JetBrains\/kotlin-wrappers\" target=\"_blank\" rel=\"noopener\">kotlin-wrappers<\/a>\ub97c \uc0ac\uc6a9\ud558\uc5ec React \uc571\uc744 \ube4c\ub4dc\ud558\ub294 \ub370 \ud544\uc694\ud55c \ubaa8\ub4e0 \uac83\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud15c\ud50c\ub9bf\uc740 \uc2a4\ud0c0\uc77c\uc2dc\ud2b8, \ud0d0\uc0c9 \uad6c\uc131 \uc694\uc18c, \uc0c1\ud0dc \ucee8\ud14c\uc774\ub108\ub97c \uc704\ud55c \ud1b5\ud569 \uae30\ub2a5\uc744 \ud65c\uc131\ud654\ud558\ub294 \uc635\uc158\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/li>\n<li><strong>Node.js Application<\/strong>\uc740 \ud504\ub85c\uc81d\ud2b8\uac00 Node.js \ub7f0\ud0c0\uc784\uc5d0\uc11c \uc2e4\ud589\ub418\ub3c4\ub85d \ud504\ub85c\uc81d\ud2b8\ub97c \uc0ac\uc804 \uad6c\uc131\ud569\ub2c8\ub2e4. \uc774 \ud15c\ud50c\ub9bf\uc5d0\ub294 <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2020\/07\/kotlin-1-4-rc-released\/#kotlin-js-node\">\uc774\uc804 \uac8c\uc2dc\ubb3c<\/a>\uc5d0\uc11c \uc18c\uac1c\ud55c \uc2e4\ud5d8\uc801 <a href=\"https:\/\/github.com\/Kotlin\/kotlinx-nodejs\" target=\"_blank\" rel=\"noopener\">kotlinx-nodejs<\/a> \ud328\ud0a4\uc9c0\ub97c \uc9c1\uc811 \ud3ec\ud568\ud560 \uc218 \uc788\ub294 \uc635\uc158\uc774 \ud568\uaed8 \uc81c\uacf5\ub429\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h3>\ucef4\ud30c\uc77c \uc624\ub958 \ubb34\uc2dc(\uc2e4\ud5d8\uc801)<\/h3>\n<p>\ub610\ud55c Kotlin 1.4.20\uc5d0\uc11c\ub294 <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/js-ir-compiler.html\" target=\"_blank\" rel=\"noopener\">Kotlin\/JS IR \ucef4\ud30c\uc77c\ub7ec<\/a>\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc0c8\ub85c\uc6b4 <em>\ucef4\ud30c\uc77c \uc624\ub958 \ubb34\uc2dc<\/em> \uae30\ub2a5\uc744 \uc120\ubcf4\uc785\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uba74 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc77c\ubc18\uc801\uc73c\ub85c \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c \ucef4\ud30c\uc77c\ub418\uc9c0 \uc54a\ub294 \uc0c1\ud0dc\uc5d0 \uc788\uc5b4\ub3c4 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc0ac\uc6a9\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \ubcf5\uc7a1\ud55c \ub9ac\ud329\ud1a0\ub9c1\uc744 \uc218\ud589\ud558\uac70\ub098 \ucef4\ud30c\uc77c \uc624\ub958\uc640 \uc804\ud600 \uad00\ub828\uc774 \uc5c6\ub294 \uc2dc\uc2a4\ud15c \ubd80\ubd84\uc5d0\uc11c \uc791\uc5c5\ud558\ub294 \uacbd\uc6b0\uc5d0 \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc0c8\ub85c\uc6b4 \ucef4\ud30c\uc77c\ub7ec \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud558\uba74 \ucef4\ud30c\uc77c\ub7ec\ub294 \uc798\ubabb\ub41c \ucf54\ub4dc\ub97c \ubb34\uc2dc\ud558\uace0 \ucef4\ud30c\uc77c\uc744 \uac70\ubd80\ud558\ub294 \ub300\uc2e0 \ub7f0\ud0c0\uc784 \uc608\uc678\ub85c \ub300\uccb4\ud569\ub2c8\ub2e4.<\/p>\n<p>Kotlin 1.4.20\uc5d0\ub294 \ucf54\ub4dc \ub0b4 \ucef4\ud30c\uc77c \uc624\ub958\ub97c \ubb34\uc2dc\ud558\uae30 \uc704\ud55c \ub450 \uac00\uc9c0 \ud5c8\uc6a9 \uc815\ucc45\uc774 \ub2e4\uc74c\uacfc \uac19\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li><code>SEMANTIC<\/code> \ubaa8\ub4dc\uc5d0\uc11c \ucef4\ud30c\uc77c\ub7ec\ub294 \uad6c\ubb38\uc740 \uc815\ud655\ud558\uc9c0\ub9cc \uc758\ubbf8 \uba74\uc5d0\uc11c \ub9de\uc9c0 \uc54a\uc740 \ucf54\ub4dc\ub97c \ud5c8\uc6a9\ud569\ub2c8\ub2e4. \uadf8 \uc608\ub85c\ub294 \uc720\ud615 \ubd88\uc77c\uce58\uac00 \uc788\ub294 \uad6c\ubb38(\uc608: <code>val x: String = 3<\/code>)\uc744 \ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li><code>SYNTAX<\/code> \ubaa8\ub4dc\uc5d0\uc11c \ucef4\ud30c\uc77c\ub7ec\ub294 \ucf54\ub4dc\uc5d0 \uad6c\ubb38 \uc624\ub958\uac00 \uc788\ub294 \uacbd\uc6b0\uc5d0\ub3c4 \ubaa8\ub4e0 \ucf54\ub4dc\ub97c \ud5c8\uc6a9\ud569\ub2c8\ub2e4. \uc791\uc131\ub41c \ucf54\ub4dc\uac00 \ubb34\uc5c7\uc774\ub4e0 \ucef4\ud30c\uc77c\ub7ec\ub294 \uc2e4\ud589 \uac00\ub2a5\ud55c \uc2e4\ud589 \ud30c\uc77c\uc744 \uc0dd\uc131\ud558\ub824\uace0 \uc2dc\ub3c4\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>\ucef4\ud30c\uc77c \uc624\ub958 \ubb34\uc2dc\ub294 \uc2e4\ud5d8\uc801 \uae30\ub2a5\uc774\ubbc0\ub85c \uc0ac\uc6a9\ud558\ub824\uba74 \ucef4\ud30c\uc77c\ub7ec \uc635\uc158\uc5d0\uc11c \uc120\ud0dd\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 Kotlin\/JS IR \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uae30\ub2a5\uc744 \ud65c\uc131\ud654\ud558\ub824\uba74 <code>build.gradle.kts<\/code> \ud30c\uc77c\uc5d0 \ub2e4\uc74c \uc2a4\ub2c8\ud3ab\uc744 \ucd94\uac00\ud558\uc138\uc694.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\r\nkotlin {\r\n   js(IR) {\r\n       compilations.all {\r\n           compileKotlinTask.kotlinOptions.freeCompilerArgs += listOf(&quot;-Xerror-tolerance-policy=SYNTAX&quot;)\r\n       }\r\n   }\r\n}\r\n<\/pre>\n<p>\uc624\ub958\uac00 \uc788\ub294 \uc0c1\ud0dc\uc5d0\uc11c \ucef4\ud30c\uc77c\ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc774 Kotlin\/JS \ud504\ub85c\uc81d\ud2b8 \uc791\uc5c5 \uc2dc \ud53c\ub4dc\ubc31 \ub8e8\ud504\ub97c \uac15\ud654\ud558\uace0 \ubc18\ubcf5 \uc791\uc5c5\uc758 \uc18d\ub3c4\ub97c \ub192\uc774\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub418\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uba74\uc11c \uc758\uacac\uc774 \uc788\uac70\ub098 \ubb38\uc81c\ub97c \ubc1c\uacac\ud55c \uacbd\uc6b0 <a href=\"http:\/\/kotl.in\/issue\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a>\uc5d0 \ud574\ub2f9 \ub0b4\uc6a9\uc744 \ub0a8\uaca8\uc8fc\uc2dc\uae30\ub97c \uae30\ub2e4\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uae30\ub2a5\uc758 \uad6c\ud604\uc740 \uacc4\uc18d \uac1c\uc120 \uc911\uc774\ubbc0\ub85c \ucd94\ud6c4 Kotlin\/JS Gradle DSL \ubc0f \ud574\ub2f9 \uc791\uc5c5\uacfc\uc758 \ub354 \uae34\ubc00\ud55c \ud1b5\ud569\ub3c4 \uc81c\uacf5\ub420 \uc608\uc815\uc785\ub2c8\ub2e4.<\/p>\n<h2>Kotlin\/Native<\/h2>\n<p><a name=\"kotlin-native\"><\/a><\/p>\n<p>\uc131\ub2a5\uc740 1.4.20\uc5d0\uc11c Kotlin\/Native\uc758 \uc8fc\uc694 \uc6b0\uc120\uc21c\uc704 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \uc774 \ubd80\ubd84\uc5d0\uc11c \ud575\uc2ec \uae30\ub2a5\uc740 \ud5a5\ud6c4 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c \uac1c\uc120\ud560 \uc608\uc815\uc778 \uc0c8\ub85c\uc6b4 \uc774\uc2a4\ucf00\uc774\ud504 \ubd84\uc11d \uba54\ucee4\ub2c8\uc998\uc758 \ud504\ub85c\ud1a0\ud0c0\uc785\uc785\ub2c8\ub2e4. \ubb3c\ub860 \ube68\ub77c\uc9c4 \ubc94\uc704 \ud655\uc778(<code>in<\/code>) \ub4f1\uc758 \uc18c\uc18c\ud55c \uc131\ub2a5 \ud5a5\uc0c1\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>1.4.20\uc5d0\uc11c Kotlin\/Native \uac1c\ubc1c\uc5d0 \uc801\uc6a9\ub41c \uac1c\uc120 \uc0ac\ud56d\uc758 \ub610 \ub2e4\ub978 \uce21\uba74\uc740 \uac1c\uc120 \ubc0f \ubc84\uadf8 \uc218\uc815\uc785\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 1.4 \uae30\ub2a5(\uc608: <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/mpp-share-on-platforms.html#share-code-on-similar-platforms\" target=\"_blank\" rel=\"noopener\">\ucf54\ub4dc \uacf5\uc720 \uba54\ucee4\ub2c8\uc998<\/a>)\uc5d0\uc11c \ubc1c\uacac\ub41c \ubb38\uc81c\ubfd0\ub9cc \uc544\ub2c8\ub77c \uc774\uc804 \ubb38\uc81c \uc911\uc5d0\uc11c\ub3c4 \ub2e4\uc218\ub97c \ud574\uacb0\ud588\uc2b5\ub2c8\ub2e4. \ud55c \uac00\uc9c0 \uac1c\uc120 \uc0ac\ud56d\uc740 \ud568\uc218 \ucc38\uc870\uc5d0\uc11c\uc758 <code>equals<\/code> \ubc0f <code>hashCode<\/code> \uc791\ub3d9 \ubc29\uc2dd\uc774\ub098 \ud504\ub85c\ud37c\ud2f0 \ucd08\uae30\ud654 \uac19\uc740 \ucf54\ub108 \ucf00\uc774\uc2a4\uc5d0\uc11c Kotlin\/Native\uc640 Kotlin\/JVM \uac04\uc758 \ub3d9\uc791 \ubd88\uc77c\uce58\ub97c \uc218\uc815\ud55c \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c, <a href=\"#handling-objective-c-exceptions\">Objective-C \uc608\uc678\ub97c Kotlin \uc608\uc678\ub85c \ub798\ud551\ud558\ub294 \uc635\uc158<\/a>\uc73c\ub85c Objective-C \uc0c1\ud638\uc6b4\uc6a9 \uae30\ub2a5\uc744 \ud655\uc7a5\ud558\uc5ec \ud574\ub2f9 \uc608\uc678\uac00 Kotlin \ucf54\ub4dc\uc5d0\uc11c \ucc98\ub9ac\ub418\ub3c4\ub85d \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\uc774\uc2a4\ucf00\uc774\ud504 \ubd84\uc11d<\/h3>\n<p>_\uc774\uc2a4\ucf00\uc774\ud504 \ubd84\uc11d_\uc740 \uac1d\uccb4\ub97c \uc2a4\ud0dd\uc5d0 \ud560\ub2f9\ud560 \uc218 \uc788\ub294\uc9c0 \uc544\ub2c8\uba74 \ud799\uc73c\ub85c &quot;\uc774\uc2a4\ucf00\uc774\ud504&quot;\ud574\uc57c \ud558\ub294\uc9c0 \uc5ec\ubd80\ub97c \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c \uacb0\uc815\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \uae30\uc220\uc785\ub2c8\ub2e4. \uc2a4\ud0dd\uc5d0\uc11c\uc758 \ud560\ub2f9\uc740 \uc18d\ub3c4\uac00 \ud6e8\uc52c \ube60\ub974\uba70 \ud5a5\ud6c4 \uac00\ube44\uc9c0 \uc218\uc9d1\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Kotlin\/Native\uc5d0\ub294 \uc774\ubbf8 \uc9c0\uc5ed \uc774\uc2a4\ucf00\uc774\ud504 \ubd84\uc11d\uc774 \uc788\uc9c0\ub9cc \uc774\uc81c \ub354 \ud6a8\uc728\uc801\uc778 \uc0c8\ub85c\uc6b4 \uc804\uc5ed \uc774\uc2a4\ucf00\uc774\ud504 \ubd84\uc11d\uc744 \ud504\ub85c\ud1a0\ud0c0\uc785\uc73c\ub85c \uad6c\ud604\ud558\uc5ec \ub3c4\uc785\ud558\ub824 \ud569\ub2c8\ub2e4. \uc774 \ubd84\uc11d\uc740 \ub9b4\ub9ac\uc2a4 \ube4c\ub4dc\uc5d0 \ub300\ud55c \ubcc4\ub3c4\uc758 \ucef4\ud30c\uc77c \ub2e8\uacc4\uc5d0\uc11c \uc218\ud589\ub429\ub2c8\ub2e4(<code>-opt<\/code> \ucef4\ud30c\uc77c\ub7ec \uc635\uc158 \uc0ac\uc6a9).<\/p>\n<p>\uc774 \ud504\ub85c\ud1a0\ud0c0\uc785\uc740 \uc774\ubbf8 \ubca4\uce58\ub9c8\ud06c\uc5d0\uc11c \ud3c9\uade0 10%\uc758 \uc131\ub2a5 \ud5a5\uc0c1 \ub4f1 \uba87\uac00\uc9c0 \uae30\ub300\ub418\ub294 \uacb0\uacfc\ub97c \uac70\ub450\uc5c8\uc2b5\ub2c8\ub2e4. \ud604\uc7ac\ub294 \uc54c\uace0\ub9ac\uc998\uc744 \ucd5c\uc801\ud654\ud558\uc5ec \uc2a4\ud0dd \ud560\ub2f9\uc6a9 \uac1d\uccb4\ub97c \ub354 \ub9ce\uc774 \ucc3e\uace0 \ud504\ub85c\uadf8\ub7a8 \uc18d\ub3c4\ub97c \ub354 \ub192\uc77c \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \uc5f0\uad6c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc800\ud76c\uac00 \ud504\ub85c\ud1a0\ud0c0\uc785 \uc791\uc5c5\uc744 \uacc4\uc18d\ud558\ub294 \ub3d9\uc548 \uc0ac\uc6a9\uc790 \uc5ec\ub7ec\ubd84\uc774 \uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud574\ubcf4\uace0 \uc2e4\uc81c \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uc5bb\uc740 \uacb0\uacfc\ub97c \uacf5\uc720\ud574 \uc8fc\uc2dc\uba74 \ud070 \ub3c4\uc6c0\uc774 \ub420 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc2a4\ucf00\uc774\ud504 \ubd84\uc11d \ub2e8\uacc4\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc73c\ub824\uba74 <code>-Xdisable-phases=EscapeAnalysis<\/code> \ucef4\ud30c\uc77c\ub7ec \uc635\uc158\uc744 \uc0ac\uc6a9\ud558\uc138\uc694.<\/p>\n<h3>Objective-C \uc608\uc678 \ub798\ud551 \uc635\uc158<\/h3>\n<p>Objective-C\uc5d0\uc11c \uc608\uc678\uc758 \ubaa9\uc801\uc740 Kotlin\uc5d0\uc11c\uc758 \uc608\uc678\uc758 \ubaa9\uc801\uacfc \ub9e4\uc6b0 \ub2e4\ub985\ub2c8\ub2e4. Objective-C\uc758 \uc608\uc678\ub294 \uc77c\ubc18\uc801\uc73c\ub85c \uac1c\ubc1c \uc911 \uc624\ub958\ub97c \ucc3e\ub294 \ub370 \uc0ac\uc6a9\uc774 \ud55c\uc815\ub429\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uae30\uc220\uc801\uc73c\ub85c Objective-C \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 \ub7f0\ud0c0\uc784 \uc2dc \uc608\uc678\ub97c \ub358\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc804\uc5d0\ub294 Kotlin\/Native\uc5d0\uc11c \uc774\ub7ec\ud55c \uc608\uc678\ub97c \ucc98\ub9ac\ud560 \uc218 \uc788\ub294 \uc635\uc158\uc774 \uc5c6\uc5c8\uae30 \ub54c\ubb38\uc5d0 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \ub358\uc838\uc9c4 <code>NSException<\/code>\uc774 \ubc1c\uc0dd\ud558\uba74 \uc804\uccb4 Kotlin\/Native \ud504\ub85c\uadf8\ub7a8\uc774 \uc885\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>1.4.20\uc5d0\uc11c\ub294 \ud504\ub85c\uadf8\ub7a8 \ucda9\ub3cc\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud574 \ub7f0\ud0c0\uc784\uc5d0\uc11c \uc774\ub7ec\ud55c \uc608\uc678\ub97c \ucc98\ub9ac\ud558\ub294 \uc635\uc158\uc744 \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4. <code>NSException<\/code>\uc744 Kotlin\uc758 <code>ForeignException<\/code>\uc73c\ub85c \ub798\ud551\ud558\ub3c4\ub85d \uc120\ud0dd\ud558\uba74 Kotlin \ucf54\ub4dc\uc5d0\uc11c \ucd94\uac00 \ucc98\ub9ac\ub97c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c <code>ForeignException<\/code>\uc740 \uc6d0\ubcf8 <code>NSException<\/code>\uc5d0 \ub300\ud55c \ucc38\uc870\ub97c \ubcf4\uc720\ud558\uace0 \uc788\uc73c\ubbc0\ub85c \uadfc\ubcf8 \uc6d0\uc778\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Objective-C \uc608\uc678 \ub798\ud551\uc744 \ud65c\uc131\ud654\ud558\ub824\uba74 <code>cinterop<\/code> \ud638\ucd9c\uc5d0\uc11c <code>-Xforeign-exception-mode objc-wrap<\/code> \uc635\uc158\uc744 \uc9c0\uc815\ud558\uac70\ub098 <code>foreignExceptionMode = objc-wrap<\/code> \ud504\ub85c\ud37c\ud2f0\ub97c <code>.def<\/code> \ud30c\uc77c\uc5d0 \ucd94\uac00\ud558\uc138\uc694. <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/native\/cocoapods.html\" target=\"_blank\" rel=\"noopener\">CocoaPods \ud1b5\ud569 \uae30\ub2a5<\/a>\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, \ub2e4\uc74c\uacfc \uac19\uc774 \uc885\uc18d \uc694\uc18c\uc758 <code>pod {}<\/code> \ube4c\ub4dc \uc2a4\ud06c\ub9bd\ud2b8 \ube14\ub85d\uc5d0\uc11c \uc635\uc158\uc744 \uc9c0\uc815\ud558\uc138\uc694.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\r\npod(&quot;foo&quot;) {\r\n   extraOpts = listOf(&quot;-Xforeign-exception-mode\u201d, \u201cobjc-wrap&quot;)\r\n}\r\n<\/pre>\n<p>\ub514\ud3f4\ud2b8 \ub3d9\uc791\uc740 \ubcc0\uacbd\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Objective-C \ucf54\ub4dc\uc5d0\uc11c \uc608\uc678\uac00 \ub358\uc838\uc9c0\uba74 \ud504\ub85c\uadf8\ub7a8\uc774 \uc885\ub8cc\ub429\ub2c8\ub2e4.<\/p>\n<h3>CocoaPods \ud50c\ub7ec\uadf8\uc778 \uac1c\uc120 \uc0ac\ud56d<\/h3>\n<h4>\ud5a5\uc0c1\ub41c \uc791\uc5c5 \uc2e4\ud589<\/h4>\n<p>\uc774\ubc88 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c\ub294 \uc791\uc5c5 \uc2e4\ud589 \ud750\ub984\uc774 \ud06c\uac8c \uac1c\uc120\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \uc0c8\ub85c\uc6b4 CocoaPods \uc885\uc18d \uc694\uc18c\uac00 \ucd94\uac00\ub418\uc5b4\ub3c4 \uae30\uc874 \uc885\uc18d \uc694\uc18c\uac00 \ub2e4\uc2dc \ube4c\ub4dc\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub300\uc0c1\uc744 \ucd94\uac00\ud574\ub3c4 \uae30\uc874 \ub300\uc0c1\uc5d0 \ub300\ud55c \uc885\uc18d \uc694\uc18c\ub294 \ub2e4\uc2dc \ube4c\ub4dc\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<h4>\ud655\uc7a5\ub41c DSL<\/h4>\n<p>1.4.20\uc5d0\uc11c\ub294 Kotlin \ud504\ub85c\uc81d\ud2b8\uc5d0 <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/native\/cocoapods.html\" target=\"_blank\" rel=\"noopener\">CocoaPods<\/a> \uc885\uc18d \uc694\uc18c\ub97c \ucd94\uac00\ud560 \uc218 \uc788\ub3c4\ub85d DSL\uc744 \ud655\uc7a5\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>CocoaPods \uc800\uc7a5\uc18c\uc758 \ub85c\uceec Pods \ubc0f Pods \uc678\uc5d0\ub3c4 \ub2e4\uc74c \uc720\ud615\uc758 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc885\uc18d \uc694\uc18c\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc0ac\uc591 \uc800\uc7a5\uc18c\uc758 \ub77c\uc774\ube0c\ub7ec\ub9ac<\/li>\n<li>Git \uc800\uc7a5\uc18c\uc758 \uc6d0\uaca9 \ub77c\uc774\ube0c\ub7ec\ub9ac<\/li>\n<li>\uc544\uce74\uc774\ube0c\uc758 \ub77c\uc774\ube0c\ub7ec\ub9ac(\uc784\uc758\uc758 HTTP \uc8fc\uc18c\ub85c\ub3c4 \uc0ac\uc6a9 \uac00\ub2a5)<\/li>\n<li>\uc815\uc801 \ub77c\uc774\ube0c\ub7ec\ub9ac<\/li>\n<li>\uc0ac\uc6a9\uc790 \uc9c0\uc815 cinterop \uc635\uc158\uc774 \uc788\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac<\/li>\n<\/ul>\n<p>\uc774\uc804 DSL \uad6c\ubb38\uc740 \uacc4\uc18d \uc9c0\uc6d0\ub429\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c \uc608\uc2dc\uc5d0\uc11c DSL\uc758 \ubcc0\uacbd \ub0b4\uc6a9\uc744 \uba87\uac00\uc9c0 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\n<p><strong>Git \uc800\uc7a5\uc18c\uc758 \uc6d0\uaca9 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \uc788\ub294 \uc885\uc18d \uc694\uc18c<\/strong>.<br \/>\n\ud574\ub2f9\ud558\ub294 \ud0a4\uc6cc\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud0dc\uadf8, \ucee4\ubc0b \ub610\ub294 \ube0c\ub79c\uce58\ub97c \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608:<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\r\n    pod(&quot;JSONModel&quot;) {\r\n    source = git(&quot;https:\/\/github.com\/jsonmodel\/jsonmodel.git&quot;) {\r\n        branch = &quot;key-mapper-class&quot;\r\n    }\r\n}\r\n   <\/pre>\n<\/p>\n<p>\ub610\ud55c \uc774\ub7ec\ud55c \ud0a4\uc6cc\ub4dc\ub97c \uacb0\ud569\ud558\uc5ec \ud544\uc694\ud55c \ubc84\uc804\uc758 Pod\ub97c \uac00\uc838\uc62c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/li>\n<li>\n<p><strong>\uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc0ac\uc591 \uc800\uc7a5\uc18c\uc758 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \uc788\ub294 \uc885\uc18d \uc694\uc18c<\/strong>.<br \/>\n\ub2e4\uc74c\uacfc \uac19\uc774 \ud2b9\uc218 <code>specRepos<\/code> \ub9e4\uac1c\ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\uc138\uc694.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\r\n    specRepos {\r\n    url(&quot;https:\/\/github.com\/Kotlin\/kotlin-cocoapods-spec.git&quot;)\r\n}\r\npod(&quot;example&quot;)\r\n<\/pre>\n<\/p>\n<\/li>\n<\/ul>\n<p>\ub354 \ub9ce\uc740 \uc608\uc2dc\ub294 <a href=\"https:\/\/github.com\/Kotlin\/kotlin-with-cocoapods-sample\" target=\"_blank\" rel=\"noopener\">Kotlin \ubc0f CocoaPods \uc0d8\ud50c<\/a>\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h4>\uc5c5\ub370\uc774\ud2b8\ub41c Xcode \ud1b5\ud569 \uae30\ub2a5<\/h4>\n<p>Kotlin\uc774 Xcode\uc5d0\uc11c \uc62c\ubc14\ub974\uac8c \uc791\ub3d9\ud558\ub824\uba74 Podfile\uc744 \uba87\uac00\uc9c0 \ubcc0\uacbd\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\n<p>Kotlin Pod\uc5d0 Git, HTTP \ub610\ub294 specRepo pod \uc885\uc18d \uc694\uc18c\uac00 \uc788\ub294 \uacbd\uc6b0 Podfile\uc5d0\uc11c\ub3c4 \ud574\ub2f9 \uc694\uc18c\ub97c \uc9c0\uc815\ud574\uc57c \ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 CocoaPods \uc800\uc7a5\uc18c\uc758 <code>AFNetworking<\/code>\uc5d0 \uc788\ub294 \uc885\uc18d \uc694\uc18c\ub97c \ucd94\uac00\ud558\ub294 \uacbd\uc6b0 Podfile\uc5d0\uc11c\ub3c4 \ub2e4\uc74c\uacfc \uac19\uc774 \uc120\uc5b8\ud558\uc138\uc694.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">pod &#039;AFNetworking&#039;<\/pre>\n<\/li>\n<li>\n<p>\uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc0ac\uc591\uc758 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucd94\uac00\ud560 \uacbd\uc6b0\uc5d0\ub294 Podfile\uc758 \uc2dc\uc791 \ubd80\ubd84\uc5d0 \uc0ac\uc591 <a href=\"https:\/\/guides.cocoapods.org\/syntax\/podfile.html#source\" target=\"_blank\" rel=\"noopener\">\uc704\uce58<\/a>\ub3c4 \uc9c0\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">source &#039;https:\/\/github.com\/Kotlin\/kotlin-cocoapods-spec.git&#039;\n\ntarget &#039;kotlin-cocoapods-xcproj&#039; do\n  \/\/ ... other Pods ...\n  pod &#039;example&#039;\nend<\/pre>\n<\/li>\n<\/ul>\n<p>\ud1b5\ud569 \uc624\ub958\ub294 \uc774\uc81c IntelliJ IDEA\uc5d0 \uc790\uc138\ud55c \uc124\uba85\uc774 \uc788\uc73c\ubbc0\ub85c Podfile\uc5d0 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud55c \uacbd\uc6b0 \uc218\uc815 \ubc29\ubc95\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \ubc14\ub85c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/github.com\/Kotlin\/kotlin-with-cocoapods-sample\" target=\"_blank\" rel=\"noopener\">Kotlin \ubc0f CocoaPods \uc0d8\ud50c<\/a>\uc758 <code>withXcproject<\/code> \ube0c\ub79c\uce58\ub97c \ud655\uc778\ud574 \ubcf4\uc138\uc694. \uc5ec\uae30\uc5d0\ub294 <code>kotlin-cocoapods-xcproj<\/code>\ub77c\ub294 \uae30\uc874 Xcode \ud504\ub85c\uc81d\ud2b8\uc640\uc758 <a href=\"#updated-integration-with-xcode\">Xcode \ud1b5\ud569 \uc608\uc2dc<\/a>\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>Xcode 12 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc9c0\uc6d0<\/h3>\n<p>Xcode 12\uc640 \ud568\uaed8 \uc81c\uacf5\ub418\ub294 \uc0c8\ub85c\uc6b4 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc744 \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4. \uc774 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c Kotlin \ucf54\ub4dc\uc5d0\uc11c \ub9c8\uc74c\uaecf \uc0ac\uc6a9\ud558\uc138\uc694!<\/p>\n<h2>\uba40\ud2f0\ud50c\ub7ab\ud3fc \ub77c\uc774\ube0c\ub7ec\ub9ac \uac8c\uc2dc\uc758 \uad6c\uc870 \uc5c5\ub370\uc774\ud2b8<\/h2>\n<p><a name=\"updated-structure-of-multiplatform-library-publications\"><\/a><\/p>\n<p>Kotlin 1.4.20 \uc774\uc804\uc5d0\ub294 <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/mpp-publish-lib.html\" target=\"_blank\" rel=\"noopener\">\uba40\ud2f0\ud50c\ub7ab\ud3fc \ub77c\uc774\ube0c\ub7ec\ub9ac \uac8c\uc2dc<\/a>\uc5d0 \ud50c\ub7ab\ud3fc\ubcc4 \uac8c\uc2dc\uc640 \uba54\ud0c0\ub370\uc774\ud130 \uac8c\uc2dc\uac00 \ud3ec\ud568\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uba54\ud0c0\ub370\uc774\ud130 \uac8c\uc2dc\uc5d0\ub9cc \uc758\uc874\ud560 \ud544\uc694\uac00 \uc5c6\uc5c8\uc73c\ubbc0\ub85c \uc774 \uc544\ud2f0\ud329\ud2b8\ub294 \uba85\uc2dc\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Kotlin 1.4.20\ubd80\ud130\ub294 \ub354 \uc774\uc0c1 \ubcc4\ub3c4\uc758 \uba54\ud0c0\ub370\uc774\ud130 \uac8c\uc2dc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774\uc81c \uba54\ud0c0\ub370\uc774\ud130 \uc544\ud2f0\ud329\ud2b8\uac00 \uc804\uccb4 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ub098\ud0c0\ub0b4\ub294 \ub8e8\ud2b8 \uac8c\uc2dc\uc5d0 \ud3ec\ud568\ub418\uba70, \uacf5\ud1b5 \uc18c\uc2a4 \uc138\ud2b8\uc5d0 \uc885\uc18d \uc694\uc18c\ub85c\uc11c \ucd94\uac00\ub420 \ub54c \uc790\ub3d9\uc73c\ub85c \uc54c\ub9de\uc740 \ud50c\ub7ab\ud3fc\uc6a9 \uc544\ud2f0\ud329\ud2b8\ub85c \ud655\uc778\ub429\ub2c8\ub2e4.<\/p>\n<p>\ub2e8, Maven Central\uacfc \uac19\uc740 \uc800\uc7a5\uc18c\uc758 \uc694\uad6c\uc0ac\ud56d\uc744 \ucda9\uc871\ud558\ub824\uba74 \ubd84\ub958\uc790 \uc5c6\ub294 \ube48 \uc544\ud2f0\ud329\ud2b8\ub97c \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \ub8e8\ud2b8 \ubaa8\ub4c8\uc5d0 \ucd94\uac00\ud574\uc11c\ub294 \uc548 \ub429\ub2c8\ub2e4. \uadf8\ub807\uac8c \ud558\uba74 \ud604\uc7ac \uc774 \ubaa8\ub4c8\uc5d0 \ud3ec\ud568\ub41c \uba54\ud0c0\ub370\uc774\ud130 \uc544\ud2f0\ud329\ud2b8\uc640 \ucda9\ub3cc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>1.4.20\uc73c\ub85c \uac8c\uc2dc\ub41c \ub77c\uc774\ube0c\ub7ec\ub9ac\uc640\uc758 \ud638\ud658\uc131<\/h3>\n<p><a href=\"https:\/\/kotlinlang.org\/docs\/reference\/mpp-share-on-platforms.html#share-code-on-similar-platforms\" target=\"_blank\" rel=\"noopener\">\uacc4\uce35\uc801 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870 \uc9c0\uc6d0<\/a>\uc744 \ud65c\uc131\ud654\ud55c \ud6c4 Kotlin 1.4.20 \uc774\uc0c1\uc5d0\uc11c \uc774\ub7ec\ud55c \uc9c0\uc6d0\uacfc \ud568\uaed8 \uac8c\uc2dc\ub41c \uba40\ud2f0\ud50c\ub7ab\ud3fc \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub824\uba74, \ud504\ub85c\uc81d\ud2b8\uc758 Kotlin\ub3c4 \ubc84\uc804 1.4.20 \uc774\uc0c1\uc73c\ub85c \uc5c5\uadf8\ub808\uc774\ub4dc\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\ub77c\uc774\ube0c\ub7ec\ub9ac \uc791\uc131\uc790\uc774\uace0 \uacc4\uce35\uc801 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870 \uc9c0\uc6d0\uc774 \ud3ec\ud568\ub41c Kotlin 1.4.20 \uc774\uc0c1\uc5d0\uc11c \uba40\ud2f0\ud50c\ub7ab\ud3fc \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uac8c\uc2dc\ud558\ub294 \uacbd\uc6b0, \uacc4\uce35\uc801 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870 \uc9c0\uc6d0\uc744 \ud65c\uc131\ud654\ud55c \uc774\uc804 Kotlin \ubc84\uc804 \uc0ac\uc6a9\uc790\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc774\uc6a9\ud560 \uc218 \uc5c6\ub2e4\ub294 \uc810\uc5d0 \uc720\uc758\ud558\uc138\uc694. \uc774\ub7ec\ud55c \uacbd\uc6b0 Kotlin\uc744 1.4.20 \uc774\uc0c1\uc73c\ub85c \uc5c5\uadf8\ub808\uc774\ub4dc\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub7ec\ub098 \uadf8\ub7ec\ud55c \uc0ac\uc6a9\uc790 \ub610\ub294 \uadf8\ub7ec\ud55c \uc0ac\uc6a9\uc790\uc758 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc0ac\uc6a9\uc790\uac00 \uacc4\uce35\uc801 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870 \uc9c0\uc6d0\uc744 \ud65c\uc131\ud654\ud558\uc9c0 \uc54a\uc740 \uacbd\uc6b0, \uc774\uc804 Kotlin \ubc84\uc804\uc744 \uc0ac\uc6a9\ud574\ub3c4 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uacc4\uc18d \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/kotlinlang.org\/docs\/reference\/mpp-publish-lib.html\" target=\"_blank\" rel=\"noopener\">\uba40\ud2f0\ud50c\ub7ab\ud3fc \ub77c\uc774\ube0c\ub7ec\ub9ac \uac8c\uc2dc<\/a>\uc5d0 \uad00\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694.<\/p>\n<h2>\ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac \ubcc0\uacbd \ub0b4\uc6a9<\/h2>\n<p><a name=\"standard-library-changes\"><\/a><\/p>\n<h3>java.nio.file.Path\uc6a9 \ud655\uc7a5 \uae30\ub2a5<\/h3>\n<p>1.4.20\ubd80\ud130 \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 <code>java.nio.file.Path<\/code>\uc5d0 \ub300\ud55c \uc2e4\ud5d8\uc801 \ud655\uc7a5 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>\uad00\uc6a9\uc801 Kotlin \ubc29\uc2dd\uc73c\ub85c \ucd5c\uc2e0 JVM \ud30c\uc77c API\ub85c \uc791\uc5c5\ud558\ub294 \uac83\uc740 \uc774\uc81c <code>kotlin.io<\/code> \ud328\ud0a4\uc9c0\uc758 <code>java.io.File<\/code> \ud655\uc7a5 \uae30\ub2a5\uc73c\ub85c \uc791\uc5c5\ud558\ub294 \uac83\uacfc \uc720\uc0ac\ud574\uc84c\uc2b5\ub2c8\ub2e4. \ub300\ubd80\ubd84\uc758 <code>Files<\/code>\uc758 \uc815\uc801 \uba54\uc18c\ub4dc\uac00 <code>Path<\/code> \uc720\ud615\uc758 \ud655\uc7a5 \uae30\ub2a5\uc73c\ub85c \uc81c\uacf5\ub418\ubbc0\ub85c \ub354 \uc774\uc0c1 \ud574\ub2f9 \uba54\uc18c\ub4dc\ub97c \ud638\ucd9c\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub7ec\ud55c \ud655\uc7a5 \uae30\ub2a5\uc740 <code>kotlin.io.path<\/code> \ud328\ud0a4\uc9c0\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. <code>Path<\/code> \uc790\uccb4\ub294 JDK 7 \uc774\uc0c1\uc5d0\uc11c \uc81c\uacf5\ub418\ubbc0\ub85c \uc774 \ud655\uc7a5 \uae30\ub2a5\uc740 <code>kotlin-stdlib-jdk7<\/code> \ubaa8\ub4c8\uc5d0 \ubc30\uce58\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9\ud558\ub824\uba74 \uc2e4\ud5d8\uc801 \uc5b4\ub178\ud14c\uc774\uc158\uc778 <code>ExperimentalPathApi<\/code>\ub97c \uc120\ud0dd\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\r\n\/\/ construct path with the div (\/) operator\r\nval baseDir = Path(&quot;\/base&quot;)\r\nval subDir = baseDir \/ &quot;subdirectory&quot; \r\n\r\n\/\/ list files in a directory\r\nval kotlinFiles: List&lt;Path&gt; = Path(&quot;\/home\/user&quot;).listDirectoryEntries(&quot;*.kt&quot;)\r\n```\r\n<\/pre>\n<p>\uc774\ub7ec\ud55c \ud655\uc7a5 \uae30\ub2a5\uc774 \ud3ec\ud568\ub41c \ucd08\uae30 PR\uc744 \uc81c\ucd9c\ud574\uc8fc\uc2e0 \uae30\uc5ec\uc790 <a href=\"https:\/\/github.com\/ajalt\" target=\"_blank\" rel=\"noopener\">AJ Alt<\/a> \ub2d8\uaed8 \ud2b9\ubcc4\ud788 \uac10\uc0ac\uc758 \ub9d0\uc500\uc744 \uc804\ud569\ub2c8\ub2e4.<\/p>\n<h3><code>String.replace<\/code> \ud568\uc218\uc758 \uc131\ub2a5 \ud5a5\uc0c1<\/h3>\n<p>Kotlin \ucee4\ubba4\ub2c8\ud2f0\uc5d0\uc11c \uac1c\uc120 \uc0ac\ud56d\uc774 \uc81c\uc548\ub420 \ub54c\ub9c8\ub2e4 \uc800\ud76c\ub294 \ud56d\uc0c1 \uae30\uc069\ub2c8\ub2e4. \ub2e4\uc74c\ub3c4 \uadf8\ub7ec\ud55c \uc0ac\ub840 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \uc774\ubc88 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c\ub294 <code>String.replace()<\/code> \ud568\uc218\uc758 \uad6c\ud604\uc744 \ubcc0\uacbd\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub300\uc18c\ubb38\uc790\ub97c \uad6c\ubd84\ud558\ub294 \ubcc0\ud615\uc740 <code>indexOf<\/code>\ub97c \uae30\ubc18\uc73c\ub85c \ud558\ub294 \uc218\ub3d9 \uad50\uccb4 \ub8e8\ud504\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc18\uba74, \ub300\uc18c\ubb38\uc790\ub97c \uad6c\ubd84\ud558\uc9c0 \uc54a\ub294 \ubcc0\ud615\uc740 \uc815\uaddc\uc2dd \uc77c\uce58\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uac1c\uc120 \uc0ac\ud56d\uc740 \ud2b9\uc815 \uacbd\uc6b0\uc5d0 \ud568\uc218\uc758 \uc2e4\ud589 \uc18d\ub3c4\ub97c \ub192\uc5ec\uc90d\ub2c8\ub2e4.<\/p>\n<h2>Kotlin Android Extensions \uc9c0\uc6d0 \uc911\ub2e8<\/h2>\n<p><a name=\"deprecation-of-kotlin-android-extensions\"><\/a><\/p>\n<p>Kotlin Android Extensions\ub294 \uc81c\uc791\ub41c \uc774\ub798, Android \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uc5d0\uc11c Kotlin\uc758 \uc778\uae30\ub97c \ub192\uc774\ub294 \ub370 \ud070 \uc5ed\ud560\uc744 \ud588\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ud655\uc7a5 \uae30\ub2a5\uc744 \ud1b5\ud574 \uc800\ud76c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc0c1\uc6a9\uad6c \ucf54\ub4dc\ub97c \uc904\uc77c \uc218 \uc788\ub294 \ud3b8\ub9ac\ud558\uace0 \ud6a8\uc728\uc801\uc778 \ub3c4\uad6c\ub97c \uac1c\ubc1c\uc790\uc5d0\uac8c \uc81c\uacf5\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>UI \uc0c1\ud638\uc791\uc6a9\uc744 \uc704\ud55c \ud1b5\ud569 \ubdf0(<code>kotlinx.android.synthetics<\/code>)<\/li>\n<li>\uac1d\uccb4\ub97c <code>Parcel<\/code> \uac1d\uccb4\ub85c\uc11c \uc804\ub2ec\ud558\uae30 \uc704\ud55c <code>Parcelable<\/code> \uad6c\ud604 \uc0dd\uc131\uae30(<code>@Parcelize<\/code>)<\/li>\n<\/ul>\n<p>\ucc98\uc74c\uc5d0 \uc800\ud76c\ub294 <code>kotlin-android-extensions<\/code>\uc5d0 \ub354 \ub9ce\uc740 \uad6c\uc131 \uc694\uc18c\ub97c \ucd94\uac00\ud558\ub824\uace0 \uc0dd\uac01\ud588\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774 \uc791\uc5c5\uc740 \uc9c4\ud589\ub418\uc9c0 \uc54a\uc558\uace0, \uc2ec\uc9c0\uc5b4 \uc774 \ud50c\ub7ec\uadf8\uc778\uc744 \ub3c5\ub9bd\ub41c \ubd80\ubd84\uc73c\ub85c \ubd84\ud560\ud574 \ub2ec\ub77c\ub294 <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-25280\" target=\"_blank\" rel=\"noopener\">\uc0ac\uc6a9\uc790 \uc694\uccad<\/a>\ub3c4 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Android \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uc740 \ud56d\uc0c1 \ubc1c\uc804\ud558\uace0 \uc788\uc73c\uba70 \uac1c\ubc1c\uc790\ub294 \uc791\uc5c5\uc744 \ub354 \ud3b8\ud558\uac8c \ub3c4\uc640\uc8fc\ub294 \uc0c8\ub85c\uc6b4 \ub3c4\uad6c\ub97c \uc5bb\uace0 \uc788\uc2b5\ub2c8\ub2e4. Kotlin Android Extensions\uac00 \uba54\uc6b0\ub358 \uba87\uac00\uc9c0 \uaca9\ucc28\ub294 \uc774\uc81c Google\uc758 \uae30\ubcf8 \uba54\ucee4\ub2c8\uc998\uc73c\ub85c \ud574\uacb0\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 UI \uc0c1\ud638\uc791\uc6a9\uc744 \uc704\ud55c \uac04\uacb0\ud55c \uad6c\ubb38\uc758 \uacbd\uc6b0, \uc774\uc81c Kotlin synthetics\ucc98\ub7fc <code>findViewById<\/code>\ub97c \ub300\uccb4\ud558\ub294 <a href=\"https:\/\/developer.android.com\/topic\/libraries\/view-binding\" target=\"_blank\" rel=\"noopener\">\ubdf0 \ubc14\uc778\ub529<\/a>\uc774 \uc788\ub294 Android Jetpack\uc774 \uc0dd\uacbc\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub7ec\ud55c \ub450 \uac00\uc9c0 \uc694\uc778\uc744 \uace0\ub824\ud558\uc5ec \ubdf0 \ubc14\uc778\ub529\uc744 \uc704\ud55c synthetics\ub97c \ud3d0\uae30\ud558\uace0 Parcelable \uad6c\ud604 \uc0dd\uc131\uae30\ub97c \ubcc4\ub3c4\uc758 \ud50c\ub7ec\uadf8\uc778\uc73c\ub85c \uc774\ub3d9\ud558\uae30\ub85c \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>1.4.20\uc5d0\uc11c\ub294 <code>kotlin-android-extensions<\/code>\uc5d0\uc11c Parcelable \uad6c\ud604 \uc0dd\uc131\uae30\ub97c \ucd94\ucd9c\ud558\uace0 \ub098\uba38\uc9c0\ub294 \uc9c0\uc6d0 \uc911\ub2e8 \uc8fc\uae30\ub97c \uc2dc\uc791\ud558\uc5ec \ud604\uc7ac synthetics\ub85c\ub9cc \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc9c0\uae08 synthetics\uc740 \uc9c0\uc6d0 \uc911\ub2e8 \uacbd\uace0\uc640 \ud568\uaed8 \uacc4\uc18d \uc791\ub3d9\ud558\uc9c0\ub9cc, \ub098\uc911\uc5d0\ub294 \uc791\uc5c5 \uc911\uc778 \ud504\ub85c\uc81d\ud2b8\ub97c \ub2e4\ub978 \uc194\ub8e8\uc158\uc73c\ub85c \uc804\ud658\ud574\uc57c \ud569\ub2c8\ub2e4. synthetics\uc5d0\uc11c \ubdf0 \ubc14\uc778\ub529\uc73c\ub85c Android \ud504\ub85c\uc81d\ud2b8\ub97c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\ub294 \ubc29\ubc95\uc740 \uc774 <a href=\"https:\/\/goo.gle\/kotlin-android-extensions-deprecation\" target=\"_blank\" rel=\"noopener\">\uac00\uc774\ub4dc\ub77c\uc778<\/a>\uc744 \ucc38\uc870\ud558\uc138\uc694.<\/p>\n<p>Parcelable \uad6c\ud604 \uc0dd\uc131\uae30\ub294 \uc774\uc81c \uc0c8\ub85c\uc6b4 <a href=\"https:\/\/developer.android.com\/kotlin\/parcelize\" target=\"_blank\" rel=\"noopener\"><code>kotlin-parcelize<\/code> \ud50c\ub7ec\uadf8\uc778<\/a>\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>kotlin-android-extensions<\/code> \ub300\uc2e0 \uc774 \ud50c\ub7ec\uadf8\uc778\uc744 \uc801\uc6a9\ud558\uac70\ub098 synthetics\ub97c \uacc4\uc18d \uc0ac\uc6a9\ud558\ub824\ub294 \uacbd\uc6b0 \ucd94\uac00\ub85c \uc801\uc6a9\ud558\uc138\uc694. <code>@Parcelize<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc740 <code>kotlinx.parcelize<\/code> \ud328\ud0a4\uc9c0\ub85c \uc774\ub3d9\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\uc5c5\ub370\uc774\ud2b8 \ubc29\ubc95<\/h2>\n<p><a name=\"how-to-update\"><\/a><\/p>\n<p>\ud504\ub85c\uc81d\ud2b8\ub97c \ucd5c\uc2e0 \ubc84\uc804\uc758 Kotlin\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ud558\uae30 \uc804\uc5d0 <a href=\"http:\/\/play.kotl.in\/\" target=\"_blank\" rel=\"noopener\">play.kotl.in<\/a>\uc5d0\uc11c \uc628\ub77c\uc778\uc73c\ub85c \uc0c8\ub85c\uc6b4 \uc5b8\uc5b4 \ubc0f \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>IntelliJ IDEA \ubc0f Android Studio\uc5d0\uc11c Kotlin \ud50c\ub7ec\uadf8\uc778\uc744 1.4.20 \ubc84\uc804\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/kotlinlang.org\/releases.html#updating-to-a-new-release\" target=\"_blank\" rel=\"noopener\">\uc5ec\uae30<\/a>\uc5d0\uc11c \uadf8 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc138\uc694.<\/p>\n<p>\uc774\uc804 Kotlin \ubc84\uc804\uc73c\ub85c \uc0dd\uc131\ud55c \uae30\uc874 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uc791\uc5c5\ud558\ub824\uba74 \ud574\ub2f9 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc131\uc5d0\uc11c <code>1.4.20<\/code> Kotlin \ubc84\uc804\uc744 \uc0ac\uc6a9\ud558\uc138\uc694. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"http:\/\/kotlinlang.org\/docs\/reference\/using-gradle.html\" target=\"_blank\" rel=\"noopener\">Gradle<\/a> \ubc0f <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/using-maven.html\" target=\"_blank\" rel=\"noopener\">Maven<\/a>\uc5d0 \ub300\ud55c \ubb38\uc11c\ub97c \ucc38\uc870\ud558\uc138\uc694.<\/p>\n<p>\uba85\ub839\uc904 \ucef4\ud30c\uc77c\ub7ec\ub294 <a href=\"https:\/\/github.com\/JetBrains\/kotlin\/releases\/tag\/v1.4.20\" target=\"_blank\" rel=\"noopener\">GitHub \ub9b4\ub9ac\uc2a4 \ud398\uc774\uc9c0<\/a>\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c\ub294 \ub2e4\uc74c \ub77c\uc774\ube0c\ub7ec\ub9ac \ubc84\uc804\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/Kotlin\/kotlinx.atomicfu\" target=\"_blank\" rel=\"noopener\">kotlinx.atomicfu<\/a> \ubc84\uc804 <a href=\"https:\/\/bintray.com\/kotlin\/kotlinx\/kotlinx.atomicfu\/0.14.4\" target=\"_blank\" rel=\"noopener\">0.14.4<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Kotlin\/kotlinx.coroutines\" target=\"_blank\" rel=\"noopener\">kotlinx.coroutines<\/a> \ubc84\uc804 <a href=\"https:\/\/bintray.com\/kotlin\/kotlinx\/kotlinx.coroutines\/1.4.1\" target=\"_blank\" rel=\"noopener\">1.4.1<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\" target=\"_blank\" rel=\"noopener\">kotlinx.serialization<\/a> \ubc84\uc804 <a href=\"https:\/\/bintray.com\/kotlin\/kotlinx\/kotlinx.serialization.runtime\/1.0.1\" target=\"_blank\" rel=\"noopener\">1.0.1<\/a><\/li>\n<li><a href=\"https:\/\/ktor.io\/\" target=\"_blank\" rel=\"noopener\">ktor<\/a> \ubc84\uc804 <a href=\"https:\/\/bintray.com\/kotlin\/ktor\/ktor\/1.4.1\" target=\"_blank\" rel=\"noopener\">1.4.1<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Kotlin\/kotlinx.html\" target=\"_blank\" rel=\"noopener\">kotlinx.html<\/a> \ubc84\uc804 <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.html\/releases\/tag\/0.7.2\" target=\"_blank\" rel=\"noopener\">0.7.2<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Kotlin\/kotlinx-nodejs\" target=\"_blank\" rel=\"noopener\">kotlinx-nodejs<\/a> \ubc84\uc804 <a href=\"https:\/\/bintray.com\/kotlin\/kotlinx\/kotlinx.nodejs\/0.0.6\" target=\"_blank\" rel=\"noopener\">0.0.6<\/a><\/li>\n<\/ul>\n<p><code>kotlin-wrappers<\/code>(<code>kotlin-react<\/code> \ub4f1)\uc758 \ub77c\uc774\ube0c\ub7ec\ub9ac \ubc84\uc804\uc740 <a href=\"https:\/\/github.com\/JetBrains\/kotlin-wrappers\" target=\"_blank\" rel=\"noopener\">\ud574\ub2f9 \uc800\uc7a5\uc18c<\/a>\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub9b4\ub9ac\uc2a4\uc5d0 \uad00\ud55c \uc138\ubd80 \uc815\ubcf4 \ubc0f \ud638\ud658\ub418\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac \ubaa9\ub85d\uc740 <a href=\"https:\/\/kotlinlang.org\/releases.html#release-details\" target=\"_blank\" rel=\"noopener\">\uc5ec\uae30<\/a>\uc5d0 \ub098\uc640 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc0c8 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c \uc774\uc288\uac00 \ubc1c\uc0dd\ud55c \uacbd\uc6b0 \uc5b8\uc81c\ub4e0\uc9c0 <a href=\"http:\/\/kotlinlang.slack.com\/\" target=\"_blank\" rel=\"noopener\">Slack<\/a>(<a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up?_ga=2.134077326.1218289669.1605167163-154294388.1603171954\" target=\"_blank\" rel=\"noopener\">\uc5ec\uae30<\/a>\uc5d0\uc11c \ucd08\ub300 \ubc1b\uae30)\uc5d0\uc11c \ub3c4\uc6c0\uc744 \uc694\uccad\ud558\uac70\ub098 <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/KT\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a>\uc5d0 \uc774\uc288\ub97c \ubcf4\uace0\ud574 \uc8fc\uc138\uc694.<\/p>\n<h2>\uc678\ubd80 \uae30\uc5ec\uc790<\/h2>\n<p><a name=\"external-contributors\"><\/a><\/p>\n<p>\uc774 \ub9b4\ub9ac\uc2a4\uc5d0 \ud3ec\ud568\ub41c \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub97c \uc81c\uacf5\ud574 \uc8fc\uc2e0 \ubaa8\ub4e0 \uc678\ubd80 \uae30\uc5ec\uc790\uaed8\ub3c4 \uac10\uc0ac\uc758 \ub9c8\uc74c\uc744 \uc804\ud569\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/github.com\/jsjeon\" target=\"_blank\" rel=\"noopener\">Jinseong Jeon<\/a><br \/>\n<a href=\"https:\/\/github.com\/t-kameyama\" target=\"_blank\" rel=\"noopener\">Toshiaki Kameyama<\/a><br \/>\n<a href=\"https:\/\/github.com\/sfs\" target=\"_blank\" rel=\"noopener\">Steven Sch\u00e4fer<\/a><br \/>\n<a href=\"https:\/\/github.com\/madsager\" target=\"_blank\" rel=\"noopener\">Mads Ager<\/a><br \/>\n<a href=\"https:\/\/github.com\/punzki\" target=\"_blank\" rel=\"noopener\">Mark Punzalan<\/a><br \/>\n<a href=\"https:\/\/github.com\/gavra0\" target=\"_blank\" rel=\"noopener\">Ivan Gavrilovic<\/a><br \/>\n<a href=\"https:\/\/github.com\/pyos\" target=\"_blank\" rel=\"noopener\">pyos<\/a><br \/>\n<a href=\"https:\/\/github.com\/jimgoog\" target=\"_blank\" rel=\"noopener\">Jim Sproch<\/a><br \/>\n<a href=\"https:\/\/github.com\/kandersen\" target=\"_blank\" rel=\"noopener\">Kristoffer Andersen<\/a><br \/>\n<a href=\"https:\/\/github.com\/aleksandrina-streltsova\" target=\"_blank\" rel=\"noopener\">Aleksandrina Streltsova<\/a><br \/>\n<a href=\"https:\/\/github.com\/cketti\" target=\"_blank\" rel=\"noopener\">cketti<\/a><br \/>\n<a href=\"https:\/\/github.com\/kvirolainen\" target=\"_blank\" rel=\"noopener\">Konstantin Virolainen<\/a><br \/>\n<a href=\"https:\/\/github.com\/ajalt\" target=\"_blank\" rel=\"noopener\">AJ Alt<\/a><br \/>\n<a href=\"https:\/\/github.com\/tunedal\" target=\"_blank\" rel=\"noopener\">Henrik Tunedal<\/a><br \/>\n<a href=\"https:\/\/github.com\/juan-chen\" target=\"_blank\" rel=\"noopener\">Juan Chen<\/a><br \/>\n<a href=\"https:\/\/github.com\/kotlinisland\" target=\"_blank\" rel=\"noopener\">KotlinIsland<\/a><br \/>\n<a href=\"https:\/\/github.com\/valery1707\" target=\"_blank\" rel=\"noopener\">Valeriy Vyrva<\/a><br \/>\n<a href=\"https:\/\/github.com\/achmyr\" target=\"_blank\" rel=\"noopener\">Alex Chmyr<\/a><br \/>\n<a href=\"https:\/\/github.com\/cdracm\" target=\"_blank\" rel=\"noopener\">Alexey Kudravtsev<\/a><br \/>\n<a href=\"https:\/\/github.com\/mano7onam\" target=\"_blank\" rel=\"noopener\">Andrey Matveev<\/a><br \/>\n<a href=\"https:\/\/github.com\/liutikas\" target=\"_blank\" rel=\"noopener\">Aurimas Liutikas<\/a><br \/>\n<a href=\"https:\/\/github.com\/Dattish\" target=\"_blank\" rel=\"noopener\">Dat Trieu<\/a><br \/>\n<a href=\"https:\/\/github.com\/devbridie\" target=\"_blank\" rel=\"noopener\">Dereck Bridie<\/a><br \/>\n<a href=\"https:\/\/github.com\/efemoney\" target=\"_blank\" rel=\"noopener\">Efeturi Money<\/a><br \/>\n<a href=\"https:\/\/github.com\/elijahverdoorn\" target=\"_blank\" rel=\"noopener\">Elijah Verdoorn<\/a> <a href=\"https:\/\/github.com\/43851243+enteerman\" target=\"_blank\" rel=\"noopener\">Enteerman<\/a><br \/>\n<a href=\"https:\/\/github.com\/fee1-dead\" target=\"_blank\" rel=\"noopener\">fee1-dead<\/a><br \/>\n<a href=\"https:\/\/github.com\/fvasco\" target=\"_blank\" rel=\"noopener\">Francesco Vasco<\/a><br \/>\n<a href=\"https:\/\/github.com\/duckladydinh\" target=\"_blank\" rel=\"noopener\">Gia Thuan Lam<\/a><br \/>\n<a href=\"https:\/\/github.com\/gdarmont\" target=\"_blank\" rel=\"noopener\">Guillaume Darmont<\/a><br \/>\n<a href=\"https:\/\/github.com\/JakeWharton\" target=\"_blank\" rel=\"noopener\">Jake Wharton<\/a><br \/>\n<a href=\"https:\/\/github.com\/juliankotrba\" target=\"_blank\" rel=\"noopener\">Julian Kotrba<\/a><br \/>\n<a href=\"https:\/\/github.com\/kevin1e100\" target=\"_blank\" rel=\"noopener\">Kevin Bierhoff<\/a><br \/>\n<a href=\"https:\/\/github.com\/gharrma\" target=\"_blank\" rel=\"noopener\">Matthew Gharrity<\/a><br \/>\n<a href=\"https:\/\/github.com\/Matts966\" target=\"_blank\" rel=\"noopener\">Matts966<\/a><br \/>\n<a href=\"https:\/\/github.com\/rsauciuc\" target=\"_blank\" rel=\"noopener\">Raluca Sauciuc<\/a><br \/>\n<a href=\"https:\/\/github.com\/rnett\" target=\"_blank\" rel=\"noopener\">Ryan Nett<\/a><br \/>\n<a href=\"https:\/\/github.com\/pocmo\" target=\"_blank\" rel=\"noopener\">Sebastian Kaspari<\/a><br \/>\n<a href=\"https:\/\/github.com\/develar\" target=\"_blank\" rel=\"noopener\">Vladimir Krivosheev<\/a><br \/>\n<a href=\"https:\/\/github.com\/n-p-s\" target=\"_blank\" rel=\"noopener\">n-p-s<\/a><br \/>\n<a href=\"https:\/\/github.com\/pavlospt\" target=\"_blank\" rel=\"noopener\">Pavlos-Petros Tournaris<\/a><br \/>\n<a href=\"https:\/\/github.com\/rbares\" target=\"_blank\" rel=\"noopener\">Robert Bares<\/a><br \/>\n<a href=\"https:\/\/github.com\/shiraji\" target=\"_blank\" rel=\"noopener\">Yoshinori Isogai<\/a><br \/>\n<a href=\"https:\/\/github.com\/zekehul\" target=\"_blank\" rel=\"noopener\">Kris<\/a><br \/>\n<a href=\"https:\/\/github.com\/bodin\" target=\"_blank\" rel=\"noopener\">Derek Bodin<\/a><br \/>\n<a href=\"https:\/\/github.com\/Lurker2k\" target=\"_blank\" rel=\"noopener\">Dominik Wuttke<\/a><br \/>\n<a href=\"https:\/\/github.com\/samofcorinth\" target=\"_blank\" rel=\"noopener\">Sam Wang<\/a><br \/>\n<a href=\"https:\/\/github.com\/uzilan\" target=\"_blank\" rel=\"noopener\">Uzi Landsmann<\/a><br \/>\n<a href=\"https:\/\/github.com\/yurano\" target=\"_blank\" rel=\"noopener\">Yuya Urano<\/a><br \/>\nNorbert Nogacki<br \/>\nAlexandre Juca<\/p>\n<p><em>\uc774 \uac8c\uc2dc\ubb3c\uc740 <a href=\"https:\/\/blog.jetbrains.com\/author\/pavel-semyonovjetbrains-com\/\">Pavel Semyonov<\/a>\uac00 \uc791\uc131\ud55c <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2020\/11\/kotlin-1-4-20-released\/\">Kotlin 1.4.20 Released<\/a>\ub97c \ubc88\uc5ed\ud55c \uae00\uc785\ub2c8\ub2e4.<\/em><\/p>\n","protected":false},"author":964,"featured_media":95157,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/kotlin\/97327"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/users\/964"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/comments?post=97327"}],"version-history":[{"count":3,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/kotlin\/97327\/revisions"}],"predecessor-version":[{"id":97338,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/kotlin\/97327\/revisions\/97338"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/95157"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=97327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=97327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=97327"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=97327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}