{"id":34039,"date":"2020-04-01T13:08:11","date_gmt":"2020-04-01T04:08:11","guid":{"rendered":"https:\/\/blog.jetbrains.com\/kr\/?p=697"},"modified":"2020-07-27T11:24:48","modified_gmt":"2020-07-27T11:24:48","slug":"kotlin-1-3-70-released-ko","status":"publish","type":"post","link":"https:\/\/blog.jetbrains.com\/ko\/2020\/04\/01\/kotlin-1-3-70-released-ko\/","title":{"rendered":"Kotlin 1.3.70 \ucd9c\uc2dc\ub418\uc5c8\uc2b5\ub2c8\ub2e4"},"content":{"rendered":"\uc624\ub298\uc740 Kotlin\uc758 \ucd5c\uc2e0 \ubc84\uc804\uc778 1.3.70\uc5d0 \ub300\ud55c \uc990\uac70\uc6b4 \uc18c\uc2dd\uc744 \uc804\ud574 \ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.\n\n\uc774 \ucd94\uac00 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c\ub294 \uc0c8\ub85c\uc6b4 \uc8fc\uc694 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uae30\uc874 \uae30\ub2a5\uc744 \uac1c\uc120\ud558\uace0 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uba70 \uc0ac\uc6a9\uc790\uac00 \uccb4\ud5d8\ud574\ubcfc \uc218 \uc788\ub294 \uc2e4\ud5d8\uc801\uc778 \uae30\ub2a5\uc744 \ucd94\uac00\ud558\uae30 \uc704\ud574 \ucd5c\uc120\uc744 \ub2e4\ud588\uc2b5\ub2c8\ub2e4. Kotlin 1.3.70\uc758 \uc8fc\uc694 \ud2b9\uc9d5\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\n\ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 Kotlin \uceec\ub809\uc158\uc5d0 \ub300\ud55c \uc0c8\ub85c\uc6b4 \ud568\uc218 \ubc0f \ud074\ub798\uc2a4\nIntelliJ Kotlin \ud50c\ub7ec\uadf8\uc778\uc5d0 \ub2e4\uc591\ud55c \uac1c\uc120 \uc0ac\ud56d \uc801\uc6a9: \uac1c\uc120\ub41c *.gradle.kts \uc9c0\uc6d0, \ud14c\uc2a4\ud2b8, \ub514\ubc84\uadf8, \ucf54\ub4dc \uc644\uc131 \uae30\ub2a5 \ub4f1\nKotlin\/JVM \ucef4\ud30c\uc77c\ub7ec\uac00 \uc774\uc81c Java 8 \uc774\ud6c4 \ubc84\uc804 \ub300\uc0c1\uc758 \ubc14\uc774\ud2b8\ucf54\ub4dc\uc5d0\uc11c \uc720\ud615 \uc8fc\uc11d\uc744 \uc0dd\uc131\n\ubc88\ub4e4 \ucd5c\uc801\ud654, npm \uc885\uc18d \uc694\uc18c \uc120\uc5b8 \ubc0f \uc624\ub7ab\ub3d9\uc548 \uae30\ub2e4\ub824\uc628 Kotlin\/JS\uc5d0 \ub300\ud55c \uc0c8\ub85c\uc6b4 \ubb38\uc11c\nKotlin\/Native \ucef4\ud30c\uc77c \ubc0f \ub514\ubc84\uadf8 \uc18d\ub3c4 \ud5a5\uc0c1\nIDE \ubc0f \uba85\ub839\uc904 \ub3c4\uad6c\uc5d0\uc11c \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131 \uc2dc \uc81c\uacf5\ub418\ub294 \uc9c0\uc6d0 \ud5a5\uc0c1\n\n\uc804\uccb4 \ubcc0\uacbd \ubaa9\ub85d\uc740 \ubcc0\uacbd \ub85c\uadf8\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5b8\uc81c\ub098 \uadf8\ub807\ub4ef\uc774 \uc678\ubd80 \uae30\uc5ec\uc790\ub4e4\uaed8 \uac10\uc0ac\uc758 \ub9d0\uc500\uc744 \uc804\ud569\ub2c8\ub2e4.\n\uadf8\ub7ec\uba74 \uc9c0\uae08\ubd80\ud130 \uc138\ubd80 \uc0ac\ud56d\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4!\n\n\ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac \ubcc0\uacbd \ub0b4\uc6a9\n\ubaa8\ub4e0 \uc0c8\ub85c\uc6b4 \ud568\uc218\ub294 \uc2e4\ud5d8\uc801 \uc0c1\ud0dc\ub85c \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \ucd94\uac00\ub418\ub2c8 \uc720\uc758\ud574\uc8fc\uc138\uc694.\n\uacf5\ud1b5 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c StringBuilder \ud655\uc7a5\nStringBuilder\ub294 \uc774\ubbf8 kotlin.text \ud328\ud0a4\uc9c0\uc758 \uc77c\ubc18 \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \uc788\uc5c8\uc9c0\ub9cc \uc218\ub9ce\uc740 \uc911\uc694\ud55c \uba64\ubc84\uac00 \ub204\ub77d\ub418\uac70\ub098 JVM\uc5d0\uc11c\ub9cc \uc0ac\uc6a9 \uac00\ub2a5\ud588\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ubaa8\ub4e0 JVM StringBuilder \uae30\ub2a5\uc774 \ub2e4\uc591\ud55c \ud50c\ub7ab\ud3fc\uc5d0 \ub300\uc751\ud558\ub294 \uad6c\ud604\uc744 \uac00\uc9c4 \uacf5\ud1b5 expect class\uc5d0 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc989, \ud544\uc694\ud55c \ubaa8\ub4e0 \uba64\ubc84\uac00 \uc788\uc73c\ubbc0\ub85c \uacf5\ud1b5 \ucf54\ub4dc\uc5d0\uc11c StringBuilder\ub97c \ud6a8\uacfc\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nKClass \uc791\uc5c5\n\uc774\uc81c KClass\uc758 \uc77c\ubd80 \uc720\uc6a9\ud55c \uae30\ubcf8 \uba64\ubc84\uc5d0\uc11c JVM\uc5d0 \ub300\ud55c kotlin-reflect \uc885\uc18d \uc694\uc18c\uac00 \ud544\uc694 \uc5c6\uc2b5\ub2c8\ub2e4.\n\nimport kotlin.reflect.cast\n\n@OptIn(ExperimentalStdlibApi::class)\nfun main() {\n    val kClass = String::class\n    println(kClass.simpleName) \/\/ String\n    println(kClass.qualifiedName) \/\/ kotlin.String\n\n    println(kClass.isInstance(\"abc\")) \/\/ true\n    println(kClass.isInstance(10)) \/\/ false\n    println(kClass.cast(\"abc\")) \/\/ abc\n}\n\n\uc774\uc804\uc5d0\ub294 \ub7f0\ud0c0\uc784\uc5d0\uc11c Kotlin \ub9ac\ud50c\ub809\uc158 \uad6c\ud604\uc744 \uc81c\uacf5\ud574\uc57c \ud588\uc9c0\ub9cc, \uc774\uc81c \ucd94\uac00 \uc885\uc18d \uc694\uc18c \uc5c6\uc774 \uc774\ub7ec\ud55c \uac04\ub2e8\ud55c \uba64\ubc84\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc2e4\ud5d8\uc801 \uc8fc\uc11d \uc774\ub984 \ubcc0\uacbd(@Experimental \ubc0f @UseExperimental)\n\uc544\uc2dc\ub2e4\uc2dc\ud53c Kotlin\uc5d0\ub294 \uc2e4\ud5d8\uc801 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud55c \uba54\ucee4\ub2c8\uc998\uc774 \uae30\ubcf8 \uc81c\uacf5\ub429\ub2c8\ub2e4. \uc774 \uba54\ucee4\ub2c8\uc998\uc5d0\ub294 \ub2e4\ub978 \uc2e4\ud5d8\uc801 \uc120\uc5b8\uc744 \uc0ac\uc6a9\ud558\uac70\ub098 \uadf8 \uc790\uccb4\uac00 \uc2e4\ud5d8\uc801\uc778 \uc120\uc5b8\uc744 \ud45c\uc2dc\ud558\ub294 \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc8fc\uc11d\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc804 \ubc84\uc804\uc5d0\uc11c \uc774\ub7ec\ud55c \uc8fc\uc11d\uc740 @UseExperimental \ubc0f @Experimental\uc774\uc5c8\uc2b5\ub2c8\ub2e4.\n\uadf8\ub7ec\ub098 \uc2e4\ud5d8\uc801 \uc0c1\ud0dc\ub77c\ub294 \uac83\uc774 API \uc0ac\uc6a9 \uc2dc \ub3d9\uc758\uac00 \ud544\uc694\ud55c \uc720\uc77c\ud55c \uc774\uc720\ub294 \uc544\ub2c8\uae30\uc5d0 \uc774 \uba54\ucee4\ub2c8\uc998\uc758 \ubc94\uc704\ub97c \ub113\ud788\uae30\ub85c \ud588\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 API\uac00 \ub0b4\ubd80\uc6a9\uc774\uac70\ub098 \uc77c\ubd80 \uc81c\ud55c\uc774 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \uc774\ub97c \ubc18\uc601\ud558\uae30 \uc704\ud574 @UseExperimental \ubc0f @Experimental\uc774\ub77c\ub294 \uc8fc\uc11d \uc774\ub984\uc744 @OptIn \ubc0f @RequiresOptIn\uc73c\ub85c \ubcc0\uacbd\ud588\uc2b5\ub2c8\ub2e4. \ucef4\ud30c\uc77c\ub7ec \uc778\uc218 -Xuse-experimental\uc758 \uc774\ub984\uc740 -Xopt-in\uc73c\ub85c \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. -Xexperimental\uc740 \uac70\uc758 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uace0 \ubcf5\uc7a1\uc131\uc744 \uc99d\uac00\uc2dc\ud0a4\uae30 \ub54c\ubb38\uc5d0 \uc5c6\uc574\uc2b5\ub2c8\ub2e4. @Experimental \ubc0f @UseExperimental\uc758 \uc774\uc804 \uc120\uc5b8\uc740 \u200b\u200b1.3.70\uc5d0\uc11c \uc5ec\uc804\ud788 \uc9c0\uc6d0\ub418\uc9c0\ub9cc 1.4\uc5d0\uc11c\ub294 \uc5c6\uc5b4\uc9d1\ub2c8\ub2e4.\n\uc2e4\ud5d8 \uc2dc\uac04 \uce21\uc815 API\uc758 \uc774\ub984 \ubcc0\uacbd\n\ub610 \ub2e4\ub978 \uc774\ub984 \ubcc0\uacbd\uc740 Duration and Time measurement API\uc5d0 \uad00\ud55c \uac83\uc785\ub2c8\ub2e4. Clock \ubc0f ClockMark\uc758 \uc774\ub984\uc774 TimeSource \ubc0f TimeMark\ub85c \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc804 \uc774\ub984\uc740 \ud604\uc7ac \ub354 \uc774\uc0c1 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\ub294 \uc720\ud615 \ubcc4\uce6d\uc73c\ub85c \uc720\uc9c0\ub429\ub2c8\ub2e4.\n\uc591\ubc29\ud5a5 \ud050 \uad6c\ud604: ArrayDeque\nKotlin \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \uc591\ubc29\ud5a5 \ud050\uc758 \uad6c\ud604\uc778 kotlin.collections.ArrayDeque\ud074\ub798\uc2a4\uac00 \ub4dc\ub514\uc5b4 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4! \uc774\ub294 \ucee4\ubba4\ub2c8\ud2f0\uc5d0\uc11c \ud55c\ub3d9\uc548 \uacc4\uc18d \uc694\uccad\ud588\ub358 \uae30\ub2a5\uc774\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc804\uc5d0\ub3c4 Java \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 java.util.ArrayDeque \ud074\ub798\uc2a4\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc5c8\uc9c0\ub9cc Kotlin\/JS, Kotlin\/Native\uc5d0\uc11c \ubfd0\ub9cc \uc544\ub2c8\ub77c \uac00\uc7a5 \uc911\uc694\ud55c \uacf5\ud1b5 \ucf54\ub4dc\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uacf5\ud1b5 \uad6c\ud604\uc774 \uc5c6\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \uc2e4\ud5d8\uc801 \uc0c1\ud0dc\uc774\uc9c0\ub9cc \uadf8\ub7ec\ud55c \uad6c\ud604\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.\n\uc591\ubc29\ud5a5 \ud050\ub97c \uc0ac\uc6a9\ud558\uba74 \uc0c1\uac01\ub41c \uc77c\uc815\ud55c \uc2dc\uac04\uc5d0 \ud050\uc758 \uc2dc\uc791\uacfc \ub05d \ubaa8\ub450\uc5d0\uc11c \uc694\uc18c\ub97c \ucd94\uac00\/\uc81c\uac70\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n@OptIn(ExperimentalStdlibApi::class)\nfun main() {\n    val deque = ArrayDeque(listOf(1, 2, 3))\n\n    deque.addFirst(0)\n    deque.addLast(4)\n    println(deque) \/\/ [0, 1, 2, 3, 4]\n\n    println(deque.first()) \/\/ 0\n    println(deque.last()) \/\/ 4\n\n    deque.removeFirst()\n    deque.removeLast()\n    println(deque) \/\/ [1, 2, 3]\n}\n\n\ucf54\ub4dc\uc5d0 \ud050 \ub610\ub294 \uc2a4\ud0dd\uc774 \ud544\uc694\ud560 \ub54c \uae30\ubcf8\uc801\uc73c\ub85c \uc591\ubc29\ud5a5 \ud050\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nkotlin.collections.ArrayDeque \uad6c\ud604\uc740 \uc544\ub798\uc758 \ud06c\uae30 \uc870\uc815 \uac00\ub2a5\ud55c \ubc30\uc5f4\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ub0b4\uc6a9\uc740 \uc21c\ud658 \ubc84\ud37c\uc778 Array\uc5d0 \uc800\uc7a5\ud558\uace0 \uc774 Array\uac00 \uac00\ub4dd \ucc30 \ub54c\ub9cc \ud06c\uae30\ub97c \uc870\uc815\ud569\ub2c8\ub2e4.\n\uac1c\ub150\uc801\uc73c\ub85c ArrayDeque\uc758 \uad6c\ud604\uc740 java.util.ArrayDeque\uc758 \uad6c\ud604\uacfc \ub9e4\uc6b0 \uc720\uc0ac\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774\ub294 \ub2e4\ub978 \uad6c\ud604\uc774\uba70 \uc774 \ud074\ub798\uc2a4\uac00 Kotlin\/JVM\uc5d0\uc11c \uc0ac\uc6a9\ub420 \ub54c \uc774 \uc0c8\ub85c\uc6b4 \uad6c\ud604\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc774\ub294 \ub2e4\ub978 \uceec\ub809\uc158\uacfc \uc791\ub3d9 \ubc29\uc2dd\uc774 \ub2e4\ub985\ub2c8\ub2e4. ArrayList\ub97c \uc0dd\uc131\ud558\uace0 \uc774\ub97c JVM\uc73c\ub85c \ucef4\ud30c\uc77c\ud560 \ub54c java.util.ArrayList \ud074\ub798\uc2a4\uac00 \ub0b4\ubd80\uc5d0\uc11c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. Collection \uc778\ud130\ud398\uc774\uc2a4\ub9cc \uad6c\ud604\ud558\ub294 Java\uc758 ArrayDeque\uc640 \ub2ec\ub9ac Kotlin\uc758 ArrayDeque\ub294 MutableList\ub97c \uad6c\ud604\ud569\ub2c8\ub2e4. \uc989, \uc0c9\uc778\uc73c\ub85c \ubaa8\ub4e0 \uc694\uc18c\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc73c\uba70 \uc774\ub294 Java\uc758 ArrayDeque\uc5d0\uc11c\ub294 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4.\n\ud604\uc7ac ArrayDeque \ud074\ub798\uc2a4\ub294 \uc2e4\ud5d8\uc801 \uc0c1\ud0dc\ub85c \ucd9c\uc2dc\ub418\uc5c8\uc73c\uba70 \uc774\uc5d0 \ub300\ud55c \uc5ec\ub7ec\ubd84\uc758 \uc758\uacac\uc744 \uae30\ub2e4\ub9ac\uace0 \uc788\uc2b5\ub2c8\ub2e4!\n\uceec\ub809\uc158 \ube4c\ub354\n\ub610 \ub2e4\ub978 \uc911\uc694\ud55c \uc0c8 \uae30\ub2a5\uc740 \uceec\ub809\uc158\uc5d0 \ub300\ud55c \ube4c\ub354 \ud568\uc218\uc778 buildList, buildSet, buildMap\uc785\ub2c8\ub2e4. \uc774 \ube4c\ub354 \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\uba74 \uc0dd\uc131 \ub2e8\uacc4\uc5d0\uc11c \uac00\ubcc0 \uceec\ub809\uc158\uc744 \ud3b8\ub9ac\ud558\uac8c \uc870\uc791\ud558\uace0 \uc77d\uae30 \uc804\uc6a9 \uceec\ub809\uc158\uc744 \uacb0\uacfc\ub85c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n@OptIn(ExperimentalStdlibApi::class)\nfun main() {\n    val needsZero = true\n    val initial = listOf(2, 6, 41)\n\n    val ints = buildList { \/\/ this: MutableList\n        if (needsZero) {\n            add(0)\n        }\n        initial.mapTo(this) { it + 1 }\n    }\n    println(ints) \/\/ [0, 3, 7, 42]\n}\n\n\uc774 \ube4c\ub354 \ud568\uc218\ub294 buildString\uacfc \uc720\uc0ac\ud558\uac8c \uad6c\ud604\ub429\ub2c8\ub2e4. buildList\ub294 \ub9ac\uc2dc\ubc84\uac00 \uc788\ub294 \ub78c\ub2e4\ub97c \uc778\uc218\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ub78c\ub2e4 \ub0b4\ubd80\uc758 \ubb35\uc2dc\uc801 \"this\" \ub9ac\uc2dc\ubc84\ub294 \uc720\ud615 MutableList\ub97c \uac00\uc9c0\uc9c0\ub9cc buildList\ub294 \uc77d\uae30 \uc804\uc6a9 List\ub97c \uacb0\uacfc\ub85c \ubc18\ud658\ud569\ub2c8\ub2e4.\n\uc870\uac74 \uc0ac\uc6a9, \uc5ec\ub7ec \ucd08\uae30 \uceec\ub809\uc158 \uc218\uc815 \ubc0f \uacb0\uacfc \ubcd1\ud569 \ub4f1\uacfc \uac19\uc740 \ubcf5\uc7a1\ud55c \uc870\uc791\uc744 \uc218\ud589\ud574\uc57c \ud560 \ub54c \ube4c\ub354 \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\uba74 \uac00\ub3c5\uc131\ub3c4 \ub192\uc544\uc9c0\uace0 \uc131\ub2a5 \uba74\uc5d0\uc11c \ud6a8\uacfc\uc801\uc778 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uc774 \uc0c8\ub85c\uc6b4 \ud568\uc218\ub294 \uc2e4\ud5d8\uc801 \uc0c1\ud0dc\ub85c \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \ucd94\uac00\ub418\ub2c8 \uc720\uc758\ud574\uc8fc\uc138\uc694.\nreduceOrNull() \uc640 randomOrNull() \ub300\uc751 \ud568\uc218\nKotlin\uc758 \uc774 \uaddc\uce59\uc744 \ub2e4\ub4e4 \uc54c\uace0 \uacc4\uc2e4 \uac81\ub2c8\ub2e4. \ud55c \uc30d\uc758 \ud568\uc218\uac00 \uc788\uc744 \ub54c \uc5f0\uc0b0\uc774 \ubd88\uac00\ub2a5\ud558\uba74 \uccab \ubc88\uc9f8 \ud568\uc218\uac00 \uc608\uc678\ub97c \ub358\uc9c0\uace0 \ub450 \ubc88\uc9f8 \ud568\uc218\ub294 string.toInt()\ub098 string.toIntOrNull()\uacfc \uac19\uc740 null\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. \uc774\uc81c \ub3d9\uc77c\ud55c \uaddc\uce59\uc5d0 \ub530\ub77c \uc0c8\ub85c\uc6b4 randomOrNull() \ubc0f reduceOrNull() \ub300\uc751 \ud568\uc218\uac00 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4.\n\n@OptIn(ExperimentalStdlibApi::class)\nfun main() {\n    val list = listOf(1, 2, 3)\n    println(list.randomOrNull()) \/\/ 2\n    println(list.reduceOrNull { a, b -&gt; a + b }) \/\/ 6\n\n    val emptyList = emptyList&lt;Int&gt;()\n    println(emptyList.randomOrNull()) \/\/ null\n    println(emptyList.reduceOrNull { a, b -&gt; a + b }) \/\/ null\n}\n\nrandom() \ub610\ub294 reduce()\ub97c \uc0ac\uc6a9\ud558\uba74 \uceec\ub809\uc158\uc774 \ube44\uc5b4 \uc788\uc744 \ub54c \uc608\uc678\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.\nscan() \ud568\uc218\n\ubaa9\ub85d\uacfc \uc2dc\ud000\uc2a4 \uc791\uc5c5\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc0c8\ub85c\uc6b4 \ud568\uc218\uac00 \ucd94\uac00\ub429\ub2c8\ub2e4. \uc774 \ud568\uc218\ub294 \"\uc2a4\uce94\"\uc758 \uac1c\ub150\uc744 \ub098\ud0c0\ub0b4\uba70 \uc774\uc640 \uc720\uc0ac\ud55c \ud568\uc218\ub294 \uc774\ubbf8 \ub2e4\uc591\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\uc640 \uc5b8\uc5b4\uc5d0 \uc788\uc2b5\ub2c8\ub2e4.\nscan()\uc740 fold()\uc640 \ubc00\uc811\ud55c \uad00\ub828\uc774 \uc788\uc2b5\ub2c8\ub2e4. scan()\uacfc fold() \ubaa8\ub450 \uc8fc\uc5b4\uc9c4 2\uc9c4 \uc5f0\uc0b0\uc744 \uac12 \uc2dc\ud000\uc2a4\uc5d0 \uc801\uc6a9\ud558\uc9c0\ub9cc scan()\uc740 \uc911\uac04 \uacb0\uacfc\uc758 \uc804\uccb4 \uc2dc\ud000\uc2a4\ub97c \ubc18\ud658\ud558\ub294 \ubc18\uba74 fold()\ub294 \ucd5c\uc885 \uacb0\uacfc\ub9cc \ubc18\ud658\ud55c\ub2e4\ub294 \uc810\uc774 \ub2e4\ub985\ub2c8\ub2e4.\n\n@OptIn(ExperimentalStdlibApi::class)\nfun main() {\n    val ints = (1..4).asSequence()\n    println(ints.fold(0) { acc, elem -&gt; acc + elem }) \/\/ 10\n\n    val sequence = ints.scan(0) { acc, elem -&gt; acc + elem }\n    println(sequence.toList()) \/\/ [0, 1, 3, 6, 10]\n}\n\nfold\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c, scan\uc740 \ucd08\uae30 \ub204\uc801\uc790\uc758 \uac12\uc744 \ucde8\ud569\ub2c8\ub2e4.\n\n\uacb0\uacfc \uc720\ud615\uc774 \uc694\uc18c \uc720\ud615\uacfc \ub3d9\uc77c\ud558\uace0 \uccab \ubc88\uc9f8 \uc694\uc18c\ub97c \ucd08\uae30 \uac12\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uacbd\uc6b0 reduce() \ubc0f scanReduce() \ud568\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n\uc2dc\ud000\uc2a4\uc5d0\uc11c scan() \ubc0f scanReduce()\ub97c \uc0ac\uc6a9\ud558\uba74 \ubcf8\uc9c8\uc801\uc73c\ub85c \uc9c0\uc5f0\ub418\ub294 \uc2dc\ud000\uc2a4\uac00 \uacb0\uacfc\ub85c \ubc18\ud658\ub429\ub2c8\ub2e4. \uc989, \uc2a4\uce94 \ud504\ub85c\uc138\uc2a4\ub294 \uacb0\uacfc \uc2dc\ud000\uc2a4\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uc694\uccad\ud560 \ub54c, \ud2b9\ud788 toList() \ub610\ub294 max()\uc640 \uac19\uc740 \ud130\ubbf8\ub110 \uc791\uc5c5(\ub2e4\ub978 \uc2dc\ud000\uc2a4 \uc774\uc678\uc758 \uac83\uc744 \ubc18\ud658\ud558\ub294 \uc791\uc5c5)\uc744 \ud638\ucd9c\ud560 \ub54c\ub9cc \uc2dc\uc791\ub429\ub2c8\ub2e4. \ubaa9\ub85d\uc5d0\uc11c scan() \ubc0f scanReduce()\ub97c \uc0ac\uc6a9\ud558\uba74 \ubaa9\ub85d\uc774 \uacb0\uacfc\ub85c \ubc18\ud658\ub429\ub2c8\ub2e4.\n\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc774 KEEP\ub97c \ucc38\uc870\ud558\uc138\uc694.\nIntelliJ IDEA \uc9c0\uc6d0\n\uc774 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c\ub294 IntelliJ IDEA\uc758 Kotlin \uc9c0\uc6d0\uc774 \uba87\uac00\uc9c0 \uac1c\uc120\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc9c0\uae08\ubd80\ud130 \uac00\uc7a5 \ud765\ubbf8\ub85c\uc6b4 \uac1c\uc120 \uc0ac\ud56d\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\n*.gradle.kts \uc9c0\uc6d0\n1.3.70\uc5d0\uc11c\ub294 Gradle Kotlin DSL \uc2a4\ud06c\ub9bd\ud2b8(*.gradle.kts \ud30c\uc77c)\uc5d0 \ub300\ud55c IntelliJ IDEA\uc758 \uc9c0\uc6d0\uc744 \uac1c\uc120\ud558\uae30 \uc704\ud574 \ub178\ub825\ud588\uc2b5\ub2c8\ub2e4. \uadf8 \uacb0\uacfc \ucd5c\uc2e0 \ubc84\uc804\uc758 Kotlin \ud50c\ub7ec\uadf8\uc778\uc740 \uad6c\ubb38 \uac15\uc870, \ucf54\ub4dc \uc644\uc131, \uac80\uc0c9 \ubc0f \uae30\ud0c0 Kotlin \ube4c\ub4dc \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc5c5\uc758 \uce21\uba74\uc5d0\uc11c \ub354 \ub098\uc740 \uc131\ub2a5\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4. \uac1c\uc120 \uc0ac\ud56d\uc5d0 \ub300\ud55c \uc790\uc138\ud788 \uac80\ud1a0\ub294 \uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0 \ub098\uc640 \uc788\uc2b5\ub2c8\ub2e4.\n\ubaa8\ub4e0 \ubcc0\uacbd \ubc0f \uac1c\uc120 \uc0ac\ud56d\uc744 \uc0ac\uc6a9\ud574 \ubcf4\ub824\uba74 Gradle 6.0 \uc774\ud6c4 \ubc84\uc804\uacfc \ud568\uaed8 IntelliJ IDEA 2019.2 \uc774\ud6c4 \ubc84\uc804\uc744 \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.\n\ucf54\ub4dc \uc644\uc131\n1.3.70\uc5d0\uc11c\ub294 IntelliJ IDEA\uc758 Kotlin \ucf54\ub4dc \uc644\uc131 \uae30\ub2a5\uc774 \ub208\uc5d0 \ub744\uac8c \ud5a5\uc0c1\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ud655\uc7a5 \ud568\uc218, \uac1d\uccb4 \uc218\uc900 \uc7ac\uc815\uc758, \uc911\ucca9\ub41c \uac1d\uccb4\uc5d0 \uc120\uc5b8\ub41c \ud568\uc218 \ub4f1 \uac1d\uccb4\uc5d0\uc11c \uc120\uc5b8\ub41c \ud568\uc218\uac00 \ucf54\ub4dc \uc644\uc131 \uc81c\uc548\uc5d0 \ud3ec\ud568\ub429\ub2c8\ub2e4.\n\n\ub610\ud55c \ucf54\ub4dc \uc644\uc131 \ubaa9\ub85d\uc744 \uc815\ub82c\ud558\ub294 \uba38\uc2e0 \ub7ec\ub2dd \ubaa8\ub378 \uac1c\uc120\ub418\uc5b4 \uac00\uc7a5 \uad00\ub828\uc131\uc774 \ub192\uc740 \uc635\uc158\uc774 \ub9e8 \uc704\uc5d0 \ud45c\uc2dc\ub429\ub2c8\ub2e4.\n\uc0c8\ub85c\uc6b4 \uc0c9 \uad6c\uc131\ud45c\n\uc5d0\ub514\ud130\uc5d0\uc11c Kotlin \ucf54\ub4dc \ud45c\uc2dc\ub97c \uc6d0\ud558\ub294 \ub300\ub85c \ubcc0\uacbd\ud560 \uc218 \uc788\ub3c4\ub85d \uc0c8\ub85c\uc6b4 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc0c9 \uad6c\uc131\ud45c\uac00 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud2b9\ud788, \uc774\uc81c suspend \ud568\uc218 \ud638\ucd9c \ubc0f \uc18d\uc131 \uc120\uc5b8\uc5d0 \ub300\ud574 \uace0\uc720\ud55c \uc0c9 \uad6c\uc131\ud45c\ub97c \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\ub514\ubc84\uadf8 \uac1c\uc120 \uc0ac\ud56d\n\uc774\uc804 \ubc84\uc804\uc5d0\uc11c Kotlin\/Native \ub514\ubc84\uac70\ub294 \ubcc4\ub3c4\uc758 \uc911\ub2e8\uc810 \uc720\ud615\uc744 \uc0ac\uc6a9\ud588\uc2b5\ub2c8\ub2e4. \uc774 \ub54c\ubb38\uc5d0 \uc77c\ubd80 \uc0ac\uc6a9\uc790\ub294 \u201c\uc5ec\uae30\uc5d0\uc11c \uc5b4\ub5a4 \uc911\ub2e8\uc810 \uc720\ud615\uc744 \uc0ac\uc6a9\ud574\uc57c \ud560\uae4c?\u201d\uc640 \uac19\uc740 \uc758\ubb38\uc744 \ub358\uc9c0\uba70 \uba85\ud655\ud558\uc9c0 \uc54a\uc740 \uc120\ud0dd\uc9c0\uc5d0\uc11c \ud63c\ub780\uc2a4\ub7ec\uc6cc\ud588\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ub2e8\uc77c\ud55c \uc911\ub2e8\uc810 \uc720\ud615\uc778 Kotlin Line Breakpoint\uac00 JVM \ubc0f Native \ud0c0\uac9f \ubaa8\ub450\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4.\nKotlin\/JS \ubc0f Kotlin\/Native \ud14c\uc2a4\ud2b8\n\uc774\uc81c Kotlin\/JS \ubc0f Kotlin\/Native\uc758 \ud14c\uc2a4\ud2b8 \uacb0\uacfc\uac00 Kotlin\/JVM \ud14c\uc2a4\ud2b8\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c IntelliJ IDEA\uc5d0 \ubc14\ub85c \ud45c\uc2dc\ub429\ub2c8\ub2e4. \ub610\ud55c Kotlin\/JS\uc5d0 \ub300\ud55c \ud14c\uc2a4\ud2b8 \ud544\ud130\ub9c1\uc774 \uc218\uc815\ub418\uc5b4 \uac1c\ubcc4 \ud14c\uc2a4\ud2b8\ub97c \uc2e4\ud589\ud560 \uc218 \uc788\uc73c\uba70 iOS \uc2dc\ubbac\ub808\uc774\ud130\ub97c \ub300\uc0c1\uc73c\ub85c \ud558\ub294 Kotlin\/Native \ud14c\uc2a4\ud2b8\ub97c \u201cPlay\u201d \ubc84\ud2bc\uc744 \ub20c\ub7ec \ubc14\ub85c \uc2dc\uc791\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\n\n\ub610\ud55c IntelliJ IDEA Ultimate\uc5d0\uc11c\ub294 \ud14c\uc2a4\ud2b8 \uc120\uc5b8 \uadfc\ucc98\uc758 \uc544\uc774\ucf58\uc744 \ud074\ub9ad\ud558\uc5ec Kotlin\/JS \ub514\ubc84\uadf8\ub97c \uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n\n\ub610\ub294 Gradle \ub3c4\uad6c \ucc3d\uc5d0\uc11c nodeRun, nodeTest \ub610\ub294 browserTest \uc791\uc5c5\uc744 \uc218\ub3d9\uc73c\ub85c \uc120\ud0dd\ud558\uc5ec \ub514\ubc84\uadf8\ub97c \uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. browserRun\uc758 \uacbd\uc6b0 Attach to Node.js\/Chrome \uc2e4\ud589 \uc124\uc815\uc744 \uc0ac\uc6a9\ud558\uc5ec \uac1c\ubc1c \uc11c\ubc84\ub97c \uc2dc\uc791\ud55c \ud6c4 \ub514\ubc84\uac70\ub97c \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uae30\ud0c0 \uc8fc\ubaa9\ud560 \ub9cc\ud55c \uc0ac\ud56d\n\uc774 \ubc16\uc5d0\ub3c4 IntelliJ IDEA\uc5d0\uc11c\uc758 Kotlin \uc9c0\uc6d0\uc5d0\uc11c \uac1c\uc120\ub41c \uc0ac\ud56d\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uba87 \uac00\uc9c0 \uc8fc\uc694\ud55c \ud56d\ubaa9\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\n\ud30c\uc77c \ubd84\uc11d \ubc0f \ubcf5\uc0ac\/\ubd99\uc5ec\ub123\uae30 \uc561\uc158\uc758 \uc131\ub2a5\uc774 \ud5a5\uc0c1\ub418\uc5c8\uc2b5\ub2c8\ub2e4.\n\ubb34\uc758\ubbf8\ud55c \ub2e8\ud56d \uc5f0\uc0b0\uc790\uc5d0 \ub300\ud55c \uc0c8\ub85c\uc6b4 \uac80\uc0ac\uac00 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ubb34\uc758\ubbf8\ud55c \ub2e8\ud56d \uc5f0\uc0b0\uc790\ub294 \uae34 \ud45c\ud604\uc2dd\uc744 \uc5ec\ub7ec \uc904\ub85c \ub098\ub20c \ub54c \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\ud638\ucd9c \uccb4\uc778, \uc904 \ubc14\uafc8, \uacf5\ubc31, \uc8fc\uc11d\uc758 \uc11c\uc2dd\uc744 \ud3ec\ud568\ud558\uc5ec \ub2e4\uc591\ud55c \uc11c\uc2dd \uc9c0\uc815 \uae30\ub2a5\uc774 \uac1c\uc120\ub418\uc5c8\uc2b5\ub2c8\ub2e4.\n\nKotlin\/JVM\n\uc774\uc81c Kotlin\uc740 JVM \ubc14\uc774\ud2b8\ucf54\ub4dc(\ub300\uc0c1 \ubc84\uc804 1.8 \uc774\ud6c4)\uc5d0\uc11c \uc720\ud615 \uc8fc\uc11d\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uc774\ub7ec\ud55c \uc8fc\uc11d\uc744 \ub7f0\ud0c0\uc784\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 \uc77c\ubd80 \uae30\uc874 Java \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ud6e8\uc52c \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ub3d5\uace0 \uc0c8 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc791\uc131 \uc2dc \uac15\ub825\ud55c \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud558\uae30 \ub54c\ubb38\uc5d0 \ucee4\ubba4\ub2c8\ud2f0\uc5d0\uc11c \ud55c\ub3d9\uc548 \uc694\uccad\ub418\uc5b4 \uc654\uc2b5\ub2c8\ub2e4.\n\ub2e4\uc74c\uc758 \uc608\uc640 \uac19\uc774, String \uc720\ud615\uc5d0 \uad00\ud55c @Foo \uc8fc\uc11d\uc740 \ubc14\uc774\ud2b8\ucf54\ub4dc\ub85c \ucd9c\ub825\ub41c \ub2e4\uc74c \ub77c\uc774\ube0c\ub7ec\ub9ac \ucf54\ub4dc\uc5d0\uc11c \uc0ac\uc6a9\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n@Target(AnnotationTarget.TYPE)\nannotation class Foo\n\nclass A {\n    fun foo(): @Foo String = \"OK\"\n}\n\n\ubc14\uc774\ud2b8\ucf54\ub4dc\uc5d0\uc11c \uc720\ud615 \uc8fc\uc11d\uc744 \ucd9c\ub825\ud558\ub824\uba74 \ub2e4\uc74c \ub2e8\uacc4\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694. \n\uc120\uc5b8\ub41c \uc8fc\uc11d\uc5d0 \uc62c\ubc14\ub978 \uc8fc\uc11d \ub300\uc0c1(Java\uc758 ElementType.TYPE_USE \ub610\ub294 Kotlin\uc758 AnnotationTarget.TYPE)\uacfc \ubcf4\uc874 \ud56d\ubaa9(AnnotationRetention.RUNTIME)\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.\n\uc8fc\uc11d \ud074\ub798\uc2a4 \uc120\uc5b8\uacfc \uc774 \uc8fc\uc11d\uc744 \uc0ac\uc6a9\ud558\ub294 \ucf54\ub4dc(\uc704 \uc608\uc2dc\uc758 \ud074\ub798\uc2a4 A)\ub97c JVM \ubc14\uc774\ud2b8\ucf54\ub4dc \ub300\uc0c1 \ubc84\uc804 1.8 \uc774\ud6c4\ub85c \ubaa8\ub450 \ucef4\ud30c\uc77c\ud569\ub2c8\ub2e4. \uc774\ub294 -jvm-target=1.8 \ucef4\ud30c\uc77c\ub7ec \uc635\uc158\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc8fc\uc11d\uc744 \uc0ac\uc6a9\ud558\ub294 \ucf54\ub4dc\ub97c -Xemit-jvm-type-annotations \ucef4\ud30c\uc77c\ub7ec \uc635\uc158\uc744 \uc0ac\uc6a9\ud574 \ucef4\ud30c\uc77c\ud569\ub2c8\ub2e4.\n\n\ub2e8, \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc720\ud615 \uc8fc\uc11d\uc740 \ub300\uc0c1 \ubc84\uc804 1.6\uc73c\ub85c \ucef4\ud30c\uc77c\ub418\ubbc0\ub85c \ubc14\uc774\ud2b8\ucf54\ub4dc\ub85c \ucd9c\ub825\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\ud604\uc7ac\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ubcf8 \uc0ac\ub840\ub9cc \uc9c0\uc6d0\ub429\ub2c8\ub2e4.\n\uba54\uc18c\ub4dc \ub9e4\uac1c\ubcc0\uc218, \uba54\uc18c\ub4dc \ubc18\ud658 \uc720\ud615, \uc18d\uc131 \uc720\ud615\uc5d0 \ub300\ud55c \uc720\ud615 \uc8fc\uc11d\n\uc720\ud615 \uc778\uc218\uc758 \ubd88\ubcc0 \ud504\ub85c\uc81d\uc158(\uc608: Smth&lt;&gt;, Array&lt;@Ann Foo&gt;\n\n\ud5a5\ud6c4\uc5d0\ub294 \uacf5\ubcc0\uc131 \ubc0f \ubc18\uacf5\ubcc0\uc131 \uc720\ud615 \ud504\ub85c\uc81d\uc158\uc5d0 \ub300\ud55c \uc720\ud615 \uc8fc\uc11d\uacfc \ub0b4\ubd80 \uc720\ud615\uc5d0 \ub300\ud55c \uc8fc\uc11d(\uc608: Smth&lt;@Ann Outer.Inner&gt;)\uc758 \uc0dd\uc131\uc744 \uc9c0\uc6d0\ud560 \uacc4\ud68d\uc785\ub2c8\ub2e4. \uc9c0\uc6d0\ub418\ub294 \uc0ac\ub840\uac00 \ub300\ubd80\ubd84\uc758 \uc2e4\uc81c \uc2dc\ub098\ub9ac\uc624\ub97c \ub2e4\ub8e8\uace0 \uc788\ub2e4\uace0 \uc0dd\uac01\ud569\ub2c8\ub2e4\ub9cc, \ub354 \ubcf5\uc7a1\ud55c \uc0ac\ub840\uc5d0 \ub300\ud55c \uc720\ud615 \uc8fc\uc11d\uc774 \ud544\uc694\ud55c \uacbd\uc6b0 \uc800\ud76c\uc5d0\uac8c \uc54c\ub824\uc8fc\uc138\uc694. \nKotlin\/JS\nKotlin 1.3.70\uc5d0\uc11c\ub294 JavaScript \ub300\uc0c1\uc774 \ubc88\ub4e4 \ud06c\uae30 \uba74\uc5d0\uc11c \ud06c\uac8c \ucd5c\uc801\ud654\ub418\uace0 \uc885\uc18d \uc694\uc18c, \ub9ac\uc18c\uc2a4, \ud14c\uc2a4\ud2b8\ub97c \ucc98\ub9ac\ud558\ub294 \ubc29\uc2dd\uc5d0\uc11c \uc0b6\uc758 \uc9c8\uc744 \ub192\uc5ec\uc8fc\ub294 \uba87\uac00\uc9c0 \ubcc0\ud654\uac00 \ucd94\uac00\ub429\ub2c8\ub2e4. \ub610\ud55c \uae30\uc058\uac8c\ub3c4 \ub300\uc0c1 \uad00\ub828 \ubb38\uc11c\ub3c4 \uac1c\ud3b8\ub418\uc5c8\uc2b5\ub2c8\ub2e4.\n\ubc88\ub4e4 \ucd5c\uc801\ud654\nKotlin 1.3.70\ubd80\ud130 DCE(Dead Code Elimination)\ub97c org.jetbrains.kotlin.js Gradle \ud50c\ub7ec\uadf8\uc778\uc744 \ud1b5\ud574 \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc73c\uba70 \uc218\ub3d9\uc73c\ub85c \ucd94\uac00\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. DCE\ub294 JS \ud504\ub85c\uc81d\ud2b8 \ucd5c\uc801\ud654 \ubc0f \uc2e4\ud589\uc744 \uc81c\uc5b4\ud558\ub294 \u200b\u200b\ub370 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc77c\ub828\uc758 \uc0c8\ub85c\uc6b4 \uc791\uc5c5\uc744 \uc218\uc2e0\ud569\ub2c8\ub2e4.\n\uac1c\ubc1c\ud558\ub294 \ub3d9\uc548 browserDevelopmentRun\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubc88\ub4e4 \uac1c\ubc1c \uc11c\ubc84\ub85c \ucd5c\uc801\ud654\ub418\uc9c0 \uc54a\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc2e4\ud589\uc744 \uc2dc\uc791\ud558\uace0 browserDevelopmentWebpack\uc744 \uc0ac\uc6a9\ud558\uc5ec build\/distributions \ud3f4\ub354\uc5d0 \ucd5c\uc801\ud654\ub418\uc9c0 \uc54a\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ubc88\ub4e4\uc744 \uc0dd\uc131\ud558\uc138\uc694. \ucd5c\uc801\ud654\ub97c \uc2e4\ud589\ud558\uc9c0 \uc54a\uc73c\uba74 \ube4c\ub4dc \uc2dc\uac04\uc774 \ube68\ub77c\uc9c0\uc9c0\ub9cc \ucef4\ud30c\uc77c\ub41c \ud504\ub85c\uadf8\ub7a8\uc758 \ud30c\uc77c \ud06c\uae30\ub294 \ub354 \ucee4\uc9d1\ub2c8\ub2e4.\n\ud504\ub85c\ub355\uc158\uc744 \uc900\ube44\ud560 \ub54c\ub294 browserProductionRun\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucd5c\uc801\ud654\ub41c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc2e4\ud589\uc744 \uc2dc\uc791\ud558\uace0 browserProductionWebpack\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud504\ub85c\ub355\uc158\uc5d0\uc11c \ubc30\ud3ec\ud558\uae30\uc5d0 \uc801\ud569\ud55c \ucd5c\uc801\ud654\ub41c \ubc88\ub4e4\uc744 \uc0dd\uc131\ud558\uc138\uc694. \ud504\ub85c\ub355\uc158 \ube4c\ub4dc\ub294 \ucef4\ud30c\uc77c\ud558\ub294 \ub370 \uc2dc\uac04\uc774 \uc870\uae08 \ub354 \uac78\ub9ac\uc9c0\ub9cc \uac1c\ubc1c \ube4c\ub4dc\ubcf4\ub2e4 \uc0c1\ub2f9\ud788 \ucd5c\uc801\ud654\ub41c \ubc88\ub4e4\uc774 \ub429\ub2c8\ub2e4.\n\ud504\ub85c\uc81d\ud2b8\n\uac1c\ubc1c \ube4c\ub4dc(gzip)\n\ud504\ub85c\ub355\uc158 \ube4c\ub4dc(gzip)\n\u201cHello, World\u201d\n963KiB\n14KiB\nKotlin\/React \uc608\uc2dc(\u201cCodeQuiz\u201d)\n4.1MiB\n345KiB\n\n\uc774\uc804 Gradle \uc791\uc5c5\uc778 browserRun(\ud604\uc7ac browserDevelopmentRun\uc758 \ubcc4\uce6d) \ubc0f browserWebpack(\ud604\uc7ac browserProductionWebpack\uc758 \ubcc4\uce6d)\uc744 \uc9c0\uae08\ub3c4 \uacc4\uc18d \uc0ac\uc6a9\ud560 \uc218 \uc788\uc9c0\ub9cc \ube4c\ub4dc \uc2a4\ud06c\ub9bd\ud2b8\uc5d0\uc11c \uc0c8\ub85c \ucd94\uac00\ub41c \ud574\ub2f9 \ud56d\ubaa9\uc73c\ub85c \uad50\uccb4\ud574\uc57c \ud569\ub2c8\ub2e4.\n\uc774\ub7ec\ud55c Gradle \uc791\uc5c5\uc740 multiplatform \ub610\ub294 kotlin.js Gradle \ud50c\ub7ec\uadf8\uc778\uc744 \uc0ac\uc6a9\ud558\ub294 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. kotlin.js\uc758 \uacbd\uc6b0 \uc9e7\uc740 \uc791\uc5c5 \ubcc4\uce6d\uc744 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4(browserDevelopmentRun\uc740 run, browserProductionWebpack\uc740 build).\nKotlin\/JS\uc758 Dead Code Elimination \ubc0f \uc138\uc138\ud558\uac8c \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \uc54c\uace0 \uc2f6\uc740 \uacbd\uc6b0 \ubb38\uc11c\ub97c \ud655\uc778\ud558\uc138\uc694.\n\ub9ac\uc18c\uc2a4 \uc790\ub3d9 \ubcf5\uc0ac\ndistributions \ud3f4\ub354\uc5d0 \ubc88\ub4e4\uc744 \uc0dd\uc131\ud558\ub294 \ube4c\ub4dc \uc791\uc5c5(\uc608: browserProductionWebpack)\uc5d0\uc11c resources \ud3f4\ub354\uc758 \ubaa8\ub4e0 \uc560\uc14b\uc744 \ubcf5\uc0ac\ud558\ubbc0\ub85c \uc774\uc81c \ubc30\ud3ec \uac00\ub2a5\ud55c \uc544\ud2f0\ud329\ud2b8 \uc138\ud2b8\ub97c \uc5bb\uae30 \uc704\ud574 \uc774\ubbf8\uc9c0, \uc2a4\ud0c0\uc77c\uc2dc\ud2b8 \ub4f1\uc744 \uc77c\uc77c\uc774 \ubcf5\uc0ac\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.\nnpm \uc885\uc18d \uc694\uc18c \uc120\uc5b8\uc5d0 \ub300\ud55c \uc6d0\ud65c\ud55c \uc9c0\uc6d0\nKotlin\/JS Gradle \ud50c\ub7ec\uadf8\uc778\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uc774\uc81c \uc8fc\uc694 \uc18c\uc2a4 \uc138\ud2b8\ub97c \uc77c\uc77c\uc774 \ucd94\uac00\ud560 \ud544\uc694 \uc5c6\uc774 \ucd5c\uc0c1\uc704 \uc885\uc18d \uc694\uc18c \ube14\ub85d \ub0b4\uc5d0 npm \uc885\uc18d \uc694\uc18c\ub97c \uc120\uc5b8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \uc774\uc81c \ub2e4\uc74c \uc870\uac01\uc774 \uc720\ud6a8\ud568\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.\n\ndependencies {\n    implementation(npm(\"react\", \"16.12.0\"))\n}\n\nGradle\uc744 \ud1b5\ud55c \uc2e4\ud5d8\uc801 \ud14c\uc2a4\ud2b8 \ub514\ubc84\uadf8\nKotlin\/JS \ube0c\ub77c\uc6b0\uc800 \ub300\uc0c1\uc5d0 \ub300\ud574 IntelliJ IDEA \ub0b4\uc5d0\uc11c \ubc14\ub85c \ud14c\uc2a4\ud2b8\ub97c \ub514\ubc84\uadf8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc2e4\ud328\ud55c \ud14c\uc2a4\ud2b8\ub97c \ub514\ubc84\uadf8\ud558\ub824\uba74 IDE\uc5d0\uc11c \uc911\ub2e8\uc810\uc744 \uc124\uc815\ud55c \ub2e4\uc74c \ub514\ubc84\uadf8 \ubaa8\ub4dc\uc5d0\uc11c check Gradle \uc791\uc5c5\uc744 \uc2dc\uc791\ud558\uac70\ub098 \uc5ec\ubc31 \uc544\uc774\ucf58\uc744 \uc0ac\uc6a9\ud574 \ud14c\uc2a4\ud2b8 \uc138\ud2b8\ub97c \ub514\ubc84\uadf8\ud558\uc138\uc694. Gradle\uc774 \ud50c\ub7ab\ud3fc\uc5d0 \ub300\ud55c \ud14c\uc2a4\ud2b8 \uc791\uc5c5\uc744 \uc2e4\ud589\ud558\uba74 \ub514\ubc84\uac70\uac00 \ud1b5\ud569 \uc911\ub2e8\uc810\uc5d0\uc11c \uba48\ucda5\ub2c8\ub2e4. \ub514\ubc84\uac70\ub294 Gradle\uc774 browserTest \uc791\uc5c5\uc744 \ucf58\uc194\uc5d0 \ud45c\uc2dc\ud558\ub294 \uc989\uc2dc \uc911\ub2e8\uc810\uc5d0 \ub3c4\ub2ec\ud569\ub2c8\ub2e4.\n\n&gt; Task :browserTest\n\n\uc774\ub54c \ub514\ubc84\uac70\uc5d0\uc11c ::browserTest \uc138\uc158\uc73c\ub85c \uc804\ud658\ud558\uace0 \u201cDebugger\u201d(\ub514\ubc84\uac70)\ub77c\ub294 \ud0ed\uc744 \uc120\ud0dd\ud558\uc138\uc694. \ud14c\uc2a4\ud2b8 \uc2e4\ud589\uc744 \uc2dc\uc791\ud558\ub824\uba74 'Resume Program'(\ud504\ub85c\uadf8\ub7a8 \uc7ac\uc2dc\uc791) \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc138\uc694.\n\n\ud604\uc7ac \uc774 \ud504\ub85c\uc138\uc2a4\ub294 IntelliJ IDEA\uc758 \ub514\ubc84\uac70\ub97c JS \uc5d4\uc9c4\uacfc \ub3d9\uae30\ud654\ud558\uae30 \uc704\ud574 \ud544\uc694\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \ub514\ubc84\uadf8 \uc138\uc158\uc744 \uc2dc\uc791\ud558\uae30 \uc704\ud574 \uc774\ucc98\ub7fc \uc5ec\ub7ec \ub2e8\uacc4\ub97c \uac70\uce58\uae30\ub294 \ubc88\uac70\ub85c\uc6b4 \uac83\uc774 \uc0ac\uc2e4\uc785\ub2c8\ub2e4. \ud6e8\uc52c \uc6d0\ud65c\ud55c \ub514\ubc84\uadf8 \ud658\uacbd\uc774 \uc900\ube44\ub420 \ub54c\uae4c\uc9c0 \ud5a5\ud6c4 \ubc84\uc804\uc744 \uacc4\uc18d \ud655\uc778\ud574 \uc8fc\uc138\uc694!\n\ub610\ud55c \uc77c\ubd80 \ub0a8\uc544 \uc788\ub294 \ubb38\uc81c\ub97c \ud574\uacb0\ud55c \ud6c4 Node.js\ub97c \ub300\uc0c1\uc73c\ub85c\ud558\ub294 Kotlin \ucf54\ub4dc \ub514\ubc84\uadf8\uc5d0\ub3c4 \ub3d9\uc77c\ud55c \ud658\uacbd\uc744 \uc81c\uacf5\ud560 \uacc4\ud68d\uc785\ub2c8\ub2e4.\n\uac1c\uc120\ub41c \ubb38\uc11c\nKotlin 1.3.70\uc5d0\uc11c\ub294 \ubaa8\ub450 \uc624\ub7ab\ub3d9\uc548 \uae30\ub2e4\ub824\uc628 JavaScript \ub300\uc0c1 \uad00\ub828 \ubb38\uc11c \ubc0f \ud29c\ud1a0\ub9ac\uc5bc\uc744 \ubcc0\uacbd\ud588\uc2b5\ub2c8\ub2e4. \uc774 \ubcc0\uacbd\uc73c\ub85c Kotlin\/JS\ub97c \ub354 \uc27d\uac8c \uc2dc\uc791\ud560 \uc218 \uc788\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4. \ubb38\uc11c\ub97c \uac1c\ud3b8\ud558\uba74\uc11c \uc624\ub798\ub41c \uc790\ub8cc\ub294 \uc0ad\uc81c\ud588\uc2b5\ub2c8\ub2e4. \ub610\ud55c Kotlin\/JS \uc791\uc5c5 \uc2dc \ubcf4\uac8c \ub418\ub294 \uc77c\ubc18\uc801\uc778 \uc791\uc5c5\uc744 \uac04\ub7b5\ud788 \uc124\uba85\ud574 \ub193\uc740 \uc77c\ub828\uc758 \uc9e7\uc740 \ud29c\ud1a0\ub9ac\uc5bc\uc744 \uc6f9\uc0ac\uc774\ud2b8\uc5d0 \uc0c8\ub85c \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4. \uc774 \ud29c\ud1a0\ub9ac\uc5bc\uc740 Kotlin\/JS Gradle \ud50c\ub7ec\uadf8\uc778\uc744 \uc2dc\uc791\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub418\uba70 JavaScript \ub300\uc0c1 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ube4c\ub4dc\ud560 \ub54c \ub9c8\uc8fc\uce58\uac8c \ub418\ub294 \uc77c\ubc18 \uc791\uc5c5\uc744 \ub2e4\ub8f9\ub2c8\ub2e4. \uc2e4\uc2b5 \uad50\uc721 \uacfc\uc815\uc778 \u201cBuilding Web Applications with React and Kotlin\/JS\u201d(React \ubc0f Kotlin\/JS\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ube4c\ub4dc\ud558\uae30)\ub3c4 \uc5c5\ub370\uc774\ud2b8\ub418\uc5b4 \uc774\uc81c Gradle\uc6a9 Kotlin\/JS \ud50c\ub7ec\uadf8\uc778\uc744 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \ubc30\uc6b8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub7ec\ud55c \ubcc0\uacbd\uc774 \ud2b9\ud788 \ud504\ub7f0\ud2b8\uc5d4\ub4dc \uac1c\ubc1c\uc5d0\uc11c Kotlin\/JS\ub97c \uc0ac\uc6a9\ud558\ub824\ub294 \uacbd\uc6b0 \ub354 \uc27d\uac8c \uc2dc\uc791\ud558\uace0 \u200b\u200b\uc791\uc5c5\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub418\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4. JetBrains\ub294 Kotlin\/JS \ud559\uc2b5\uc5d0 \ub3c4\uc6c0\uc774 \ub418\ub294 \ubb38\uc11c \ubc0f \ucc38\uc870 \uc790\ub8cc\ub97c \uc9c0\uc18d\uc801\uc73c\ub85c \uac1c\uc120\ud558\uae30 \uc704\ud574 \ub178\ub825\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ubb38\uc11c\ub098 \uc548\ub0b4\uc11c\uc5d0 \ub204\ub77d\ub41c \uc815\ubcf4\uac00 \uc788\uac70\ub098, \uc5c5\ub370\uc774\ud2b8 \ub418\uc5b4\uc57c \ud558\ub294 \ud544\uc218 \uc815\ubcf4\uac00 \uc788\ub294 \uacbd\uc6b0 \ub313\uae00\ub85c \uc54c\ub824\uc8fc\uc138\uc694.\nKotlin\/Native\n\uc131\ub2a5 \ucd5c\uc801\ud654\n1.3.70\uc5d0\uc11c\ub294 Kotlin\/Native \uac1c\ubc1c \ud504\ub85c\uc138\uc2a4\uc758 \uc804\ubc18\uc801\uc778 \uc131\ub2a5\uc744 \ucd5c\uc801\ud654\ud55c \uc791\uc5c5\uc758 \uccab \ubc88\uc9f8 \uacb0\uacfc\ubb3c\uc744 \ubcf4\uc5ec \ub4dc\ub9ac\ub824 \ud569\ub2c8\ub2e4. \ucef4\ud30c\uc77c \uc2dc\uac04 \uc131\ub2a5\uc740 Kotlin\/Native \uac1c\ubc1c\uc5d0\uc11c \uc54c\ub824\uc9c4 \uc57d\uc810 \uc911 \ud558\ub098\uc600\uae30\uc5d0 \ucef4\ud30c\uc77c \uc2dc\uac04\uc744 \ub2e8\ucd95\ud558\uae30 \uc704\ud55c \ub450 \uac00\uc9c0 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \uc900\ube44\ud588\uc2b5\ub2c8\ub2e4.\n\uc774\uc81c Kotlin\/Native \ucef4\ud30c\uc77c\ub7ec\uac00 Gradle daemon\uc5d0\uc11c \ubc14\ub85c \uc2e4\ud589\ub418\ubbc0\ub85c \uc0c8 \ud504\ub85c\uc138\uc2a4\ub97c \uc2dc\uc791\ud558\uace0 \uac01 \ucef4\ud30c\uc77c\uc5d0 \ucef4\ud30c\uc77c\ub7ec\ub97c \ud504\ub85c\uc138\uc2a4\ub85c \ub85c\ub4dc\ud558\ub294 \ub370 \uc2dc\uac04\uc774 \ub4e4\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\ub514\ubc84\uadf8 \ubaa8\ub4dc\uc5d0\uc11c \ucef4\ud30c\uc77c\ub7ec\uac00 \ud504\ub85c\uc81d\ud2b8 \uc885\uc18d \uc694\uc18c\ub97c \uce90\uc2dc\ud569\ub2c8\ub2e4. \uc774\uc5d0 \ub530\ub77c \uccab \ubc88\uc9f8 \ucef4\ud30c\uc77c\uc740 \uc870\uae08 \ub354 \uc624\ub798 \uac78\ub9ac\uc9c0\ub9cc \ud6c4\uc18d \ucef4\ud30c\uc77c\uc740 \ub354 \ube68\ub9ac \uc644\ub8cc\ub429\ub2c8\ub2e4. \ub2e8, \ud604\uc7ac \uc774 \uae30\ub2a5\uc740 iOS \uc2dc\ubbac\ub808\uc774\ud130(iosX64) \ubc0f macOS(macosX64)\uc5d0\uc11c\ub9cc \uc791\ub3d9\ud558\uba70 \uc5ec\uc804\ud788 \uc791\uc5c5 \uc911\uc785\ub2c8\ub2e4.\n\n\ub7f0\ud0c0\uc784\uacfc \ub514\ubc84\uadf8 \uc131\ub2a5\ub3c4 \ube60\ub728\ub9ac\uc9c0 \uc54a\uace0 \ud5a5\uc0c1\ud588\uc2b5\ub2c8\ub2e4. 1.3.70\uc5d0\uc11c\ub294 \uac1d\uccb4 \ud560\ub2f9\uc5d0 \uc18c\uc694\ub418\ub294 \uc2dc\uac04\uc744 \uc904\uc5ec \uc774\uc81c \ub354 \ub9ce\uc740 \uac1d\uccb4\uac00 \uc2a4\ud0dd\uc5d0 \ud560\ub2f9\ub418\uace0(\ud799 \ud560\ub2f9\ubcf4\ub2e4 \ube60\ub984) \ucef4\ud30c\uc77c \uc2dc \uc77c\ubd80 \uc2f1\uae00\ud1a4 \uac1d\uccb4\uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4. \ub514\ubc84\uadf8 \ud504\ub85c\uc138\uc2a4\ub3c4 \ube68\ub77c\uc84c\uc2b5\ub2c8\ub2e4.\n\ub2e8\uc77c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc5ec\ub7ec Kotlin \ud504\ub808\uc784\uc6cc\ud06c \uc9c0\uc6d0\n\uc774\uc804\uc5d0\ub294 \ub7f0\ud0c0\uc784\uc5d0 \uc815\uc758\ub41c Obj-C \ud074\ub798\uc2a4\uac00 \ub7f0\ud0c0\uc784 \uc778\uc2a4\ud134\uc2a4 \ucd9c\ucc98\uac00 \uc11c\ub85c \ub2ec\ub77c \ucda9\ub3cc\uc744 \uc77c\uc73c\ucf1c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c 2\uac1c \uc774\uc0c1\uc758 \ub3d9\uc801 Kotlin\/Native \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub294 \uc54c\ub824\uc9c4 \ubb38\uc81c\uac00 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. 1.3.70\uc5d0\uc11c\ub294 \uc774 \ubb38\uc81c\uac00 \uc218\uc815\ub418\uc5b4 \uc774\uc81c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc5ec\ub7ec Kotlin\/Native \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uacf5\ud1b5 \uc885\uc18d \uc694\uc18c\ub294 \uc11c\ub85c \ub2e4\ub978 Swift \ubaa8\ub4c8\uc5d0 \uc788\ub294 (\uadf8\ub9ac\uace0 \uc11c\ub85c \ub2e4\ub978 Obj-C \uc811\ub450\uc5b4\ub97c \uac00\uc9c4) \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ud45c\uc2dc\ub429\ub2c8\ub2e4.\n\ubca1\ud130 \uc720\ud615 \uc9c0\uc6d0\n1.3.70\ubd80\ud130 Kotlin\/Native\ub294 SIMD \uc720\ud615\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc774\uc5d0 \ub530\ub77c \ub354 \ub2e4\uc591\ud55c \uc81c3\uc790 API(\uc608: \uc778\uae30 Apple \ud504\ub808\uc784\uc6cc\ud06c\uc778 Accelerate \ubc0f SpriteKit)\ub97c Kotlin\/Native\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.\n\uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc5c5\n1.3.70 \ubc84\uc804\uc740 IntelliJ IDEA \ubc0f Kotlin \uba85\ub839\uc904 \ub3c4\uad6c\uc5d0\uc11c Kotlin \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ub354 \ud6a8\uacfc\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc77c\ub828\uc758 \uac1c\uc120 \uc0ac\ud56d\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.\n\uc5ec\uae30\uc5d0 \ub354\ud574 \uc0ac\uc6a9\uc790\uac00 Kotlin \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc5c5\uc5d0 \uc775\uc219\ud574\uc9c0\ub3c4\ub85d \uc608\uc2dc\uac00 \ud3ec\ud568\ub41c \ud504\ub85c\uc81d\ud2b8\ub3c4 \uc900\ube44\ud588\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\ub294 \ud45c\uc900 \uc2a4\ud06c\ub9bd\ud2b8 \uc608\uc2dc(*.main.kts)\uc640 \uc2a4\ud06c\ub9bd\ud305 API \uc0ac\uc6a9 \ubc0f \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc2a4\ud06c\ub9bd\ud2b8 \uc815\uc758\uc758 \uc608\uc2dc\uac00 \ud3ec\ud568\ub429\ub2c8\ub2e4. \ud504\ub85c\uc81d\ud2b8\ub97c \uc0ac\uc6a9\ud574 \ubcf4\uace0 \uc774\uc288 \ud2b8\ub798\ucee4\uc5d0\uc11c \uc5ec\ub7ec\ubd84\uc758 \uc758\uacac\uc744 \uacf5\uc720\ud574 \uc8fc\uc138\uc694.\n\ucef4\ud30c\uc77c\ub7ec \ubc0f IDE\uc5d0\uc11c kotlin-main-kts \uc9c0\uc6d0\nKotlin 1.3\uc5d0\uc11c\ub294 \uae30\ubcf8 \uc720\ud2f8\ub9ac\ud2f0 \uc2a4\ud06c\ub9bd\ud2b8\uc758 \uc791\uc131 \ubc0f \uc0ac\uc6a9\uc744 \ub2e8\uc21c\ud654\ud558\ub294 kotlin-main-kts \uc544\ud2f0\ud329\ud2b8\ub97c \ub3c4\uc785\ud588\uc2b5\ub2c8\ub2e4. \uc774 \uc544\ud2f0\ud329\ud2b8\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Kotlin \ucef4\ud30c\uc77c\ub7ec\uc640 IntelliJ \ud50c\ub7ec\uadf8\uc778\uc73c\ub85c \ub85c\ub4dc\ub418\ubbc0\ub85c *.main.kts \uc2a4\ud06c\ub9bd\ud2b8\uac00 \ubc14\ub85c \uc9c0\uc6d0\ub429\ub2c8\ub2e4. \ud2b9\ud788, \uc774\uc81c kotlin-main-kts.jar\uc744 \ud074\ub798\uc2a4 \uacbd\ub85c\uc5d0 \ucd94\uac00\ud558\uc9c0 \uc54a\uace0\ub3c4 \uc774\ub7ec\ud55c \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nIntelliJ IDEA\uc5d0\uc11c\ub294 \uc18c\uc2a4 \ub514\ub809\ud130\ub9ac \uc678\ubd80\uc5d0\uc11c\ub3c4 *.main.kts \ud30c\uc77c\uc5d0 \ub300\ud55c \ub3d9\uc801 \uc885\uc18d \uc694\uc18c \ubd84\uc11d\uc744 \ud3ec\ud568\ud55c \uac15\uc870 \ud45c\uc2dc \ubc0f \ud0d0\uc0c9 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.\n\ub610\ud55c \ucef4\ud30c\uc77c\ub41c *.main.kts \uc2a4\ud06c\ub9bd\ud2b8 \uc2e4\ud589\uc758 \uce90\uc2f1\uc744 \ud65c\uc131\ud654\ud558\uc5ec \ud6c4\uc18d \uc2e4\ud589\uc744 \ud6e8\uc52c \ube60\ub974\uac8c \uc218\ud589\ud560 \uc218 \uc788\ub3c4\ub85d \uc131\ub2a5\uc744 \uac1c\uc120\ud588\uc2b5\ub2c8\ub2e4.\n\uba85\ub839\uc904 \ub3c4\uad6c\n\uba85\ub839\uc904 \ub3c4\uad6c\uc5d0\ub3c4 Kotlin \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc744 \ud655\uc7a5\ud588\uc2b5\ub2c8\ub2e4.\n\uc774\uc81c Kotlin \uba85\ub839\uc904 \ucef4\ud30c\uc77c\ub7ec\uc640 \ud568\uaed8 \ubc30\ud3ec\ub418\ub294 kotlin \ub7ec\ub108\ub294 \uc2a4\ud06c\ub9bd\ud2b8 \uc2e4\ud589\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. kotlin\uc73c\ub85c \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\ub824\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc2a4\ud06c\ub9bd\ud2b8 \ud30c\uc77c \uc774\ub984\uc744 \uc804\ub2ec\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4.\n\nkotlin myscript.main.kts\n\n\uc774\ub7ec\ud55c \ud638\ucd9c\uc740 -script \uc635\uc158\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucef4\ud30c\uc77c\ub7ec\ub97c \ud638\ucd9c\ud558\ub294 \uac83\uacfc \ub3d9\uc77c\ud55c \ubc29\uc2dd\uc73c\ub85c \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4. kotlin\uc740 \uae30\ubcf8\uc801\uc73c\ub85c .main.kts \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc778\uc2dd\ud569\ub2c8\ub2e4.\n\ub610\ud55c kotlin \ub7ec\ub108\ub294 \ud45c\ud604\uc2dd \ud3c9\uac00\uc5d0\ub3c4 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud45c\ud604\uc2dd\uc744 \ud3c9\uac00\ud558\ub824\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \u2013\u2013e\/-expression \uc635\uc158\uc758 \uac12\uc73c\ub85c\uc11c \ud45c\ud604\uc2dd\uc744 \uc804\ub2ec\ud558\uc138\uc694.\n\nkotlin -e \"1 + 3 + 70\"\n\n\uadf8\ub7ec\uba74 \uacb0\uacfc\uac00 \ubc14\ub85c \ub098\uc635\ub2c8\ub2e4.\n\ub3d9\uc77c\ud55c \uae30\ub2a5\uc774 Kotlin \uba85\ub839\uc904 \ucef4\ud30c\uc77c\ub7ec\uc5d0 \ucd94\uac00\ub418\uc5b4 \uc788\uc9c0\ub9cc \uc635\uc158 \uc774\ub984\uc774 \ub2e4\ub985\ub2c8\ub2e4(-Xexpression).\n\nkotlinc -Xexpression \"1 + 3 + 70\"\n\n\uc5c5\ub370\uc774\ud2b8 \ubc29\ubc95\n\uc5b8\uc81c\ub098\ucc98\ub7fc play.kotl.in\uc5d0\uc11c Kotlin\uc744 \uc628\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nGradle \ubc0f Maven: \ucef4\ud30c\uc77c\ub7ec \ubc0f \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \ubc84\uc804\uc73c\ub85c 1.3.70\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. Gradle \ubc0f Maven\uc5d0 \ub300\ud55c \ubb38\uc11c\ub97c \ucc38\uc870\ud558\uc138\uc694.\nIn IntelliJ IDEA \ubc0f Android Studio: Kotlin \ud50c\ub7ec\uadf8\uc778\uc744 1.3.70 \ubc84\uc804\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4. Tools(\ub3c4\uad6c) | Kotlin | Configure Kotlin Plugin Updates(Kotlin \ud50c\ub7ec\uadf8\uc778 \uc5c5\ub370\uc774\ud2b8 \uc124\uc815)\uc744 \uc0ac\uc6a9\ud558\uc5ec 'Check again'(\ub2e4\uc2dc \ud655\uc778) \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc138\uc694.\nEclipse: \ub9c8\ucf13\ud50c\ub808\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud574\uc11c \ud50c\ub7ec\uadf8\uc778\uc744 \uc124\uce58\ud569\ub2c8\ub2e4.\n\uba85\ub839\uc904 \ucef4\ud30c\uc77c\ub7ec\ub294 Github \ub9b4\ub9ac\uc2a4 \ud398\uc774\uc9c0\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n\uc0c8 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud55c \uacbd\uc6b0 \uc5b8\uc81c\ub4e0\uc9c0 Slack \ud3ec\ub7fc(\uc5ec\uae30\uc5d0\uc11c \ucd08\ub300\ubc1b\uae30)\uc5d0\uc11c \ub3c4\uc6c0\uc744 \uc694\uccad\ud558\uac70\ub098 \uc774\uc288 \ud2b8\ub798\ucee4\uc5d0 \ubb38\uc81c\ub97c \ubcf4\uace0\ud574 \uc8fc\uc138\uc694.\nLet\u2019s Kotlin!\n\uc678\ubd80 \uae30\uc5ec\uc790\n\uceec\ub809\uc158\uc6a9 \ube4c\ub354 \ud568\uc218 \uc9c0\uc6d0\uc744 \ucd94\uac00\ud574 \uc8fc\uc2e0 Fleshgrinder\uc640 reduceOrNull() \ud568\uc218\ub97c \ucd94\uac00\ud574 \uc8fc\uc2e0 adellibovi\uaed8 \uac10\uc0ac\uc758 \ub9d0\uc500\uc744 \uc804\ud569\ub2c8\ub2e4.\n\uc774 \ub9b4\ub9ac\uc2a4\uc5d0 \ud3ec\ud568\ub41c pull \uc694\uccad\uc744 \uc81c\uacf5\ud574 \uc8fc\uc2e0 \ubaa8\ub4e0 \uc678\ubd80 \uae30\uc5ec\uc790\ubd84\ub4e4\uc5d0\uac8c\ub3c4 \uac10\uc0ac\uc758 \ub9d0\uc500\uc744 \uc804\ud569\ub2c8\ub2e4. \npyos\nSteven Sch\u00e4fer\nToshiaki Kameyama\nMark Punzalan\nMads Ager\nKristoffer Andersen\nIvan Gavrilovic\nJiaxiang Chen\nKevin Bierhoff\nAlfredo Delli Bovi\nTillmann Berg\nVictor Turansky\nAlexander Shustanov\nLeonardo Colman Lopes\nJuan Chen\nJordan Demeulenaere\nJim Sproc\nBurak Eregar\nDmitriy Jarosh\nDat Trieu\nDmitry Borodin\nEfeturi Money\nMiguel Serra\nFleshgrinder\nJens Klingenberg\nLouis CAD\n\n\ubcf8 \uac8c\uc2dc\ubb3c\uc740 Pavel Semyonov\uc758 Kotlin 1.3.70 Released\ub97c \ubc88\uc5ed\ud55c \uae00\uc785\ub2c8\ub2e4.","protected":false},"excerpt":{"rendered":"\uc624\ub298\uc740 Kotlin\uc758 \ucd5c\uc2e0 \ubc84\uc804\uc778 1.3.70\uc5d0 \ub300\ud55c \uc990\uac70\uc6b4 \uc18c\uc2dd\uc744 \uc804\ud574 \ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.\n\n\uc774 \ucd94\uac00 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c\ub294 \uc0c8\ub85c\uc6b4 \uc8fc\uc694 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uae30\uc874 \uae30\ub2a5\uc744 \uac1c\uc120\ud558\uace0 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uba70 \uc0ac\uc6a9\uc790\uac00 \uccb4\ud5d8\ud574\ubcfc \uc218 \uc788\ub294 \uc2e4\ud5d8\uc801\uc778 \uae30\ub2a5\uc744 \ucd94\uac00\ud558\uae30 \uc704\ud574 \ucd5c\uc120\uc744 \ub2e4\ud588\uc2b5\ub2c8\ub2e4. Kotlin 1.3.70\uc758 \uc8fc\uc694 \ud2b9\uc9d5\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\n\ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 Kotlin","protected":false},"author":{"name":"Jessie Cho","link":"https:\/\/blog.jetbrains.com\/ko\/author\/jessie-chojetbrains-com"},"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[4113],"tags":[21,4345],"cross-post-tag":[],"acf":[],"featured_image":null,"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/posts\/34039"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/users\/964"},{"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=34039"}],"version-history":[{"count":3,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/posts\/34039\/revisions"}],"predecessor-version":[{"id":61268,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/posts\/34039\/revisions\/61268"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=34039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=34039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=34039"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=34039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}