{"id":34067,"date":"2020-05-18T13:06:54","date_gmt":"2020-05-18T04:06:54","guid":{"rendered":"https:\/\/blog.jetbrains.com\/kr\/?p=796"},"modified":"2020-05-20T00:41:24","modified_gmt":"2020-05-19T15:41:24","slug":"1-4-m2-standard-library-ko","status":"publish","type":"post","link":"https:\/\/blog.jetbrains.com\/ko\/2020\/05\/18\/1-4-m2-standard-library-ko\/","title":{"rendered":"Kotlin 1.4-M2 \ubbf8\ub9ac \uc0b4\ud3b4\ubcf4\uae30: \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac \uac1c\uc120 \uc0ac\ud56d"},"content":{"rendered":"Kotlin 1.1.4 \uc791\uc5c5\uc774 \uacc4\uc18d \uc9c4\ud589\ub418\ub294 \uac00\uc6b4\ub370 \ub2e4\uc74c \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc778\u00a01.4-M2\uac00 \uace7 \ucd9c\uc2dc\ub429\ub2c8\ub2e4. \uc9c0\uae08\ubd80\ud130 \uc774\ubc88 \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc758 \uc77c\ubd80 \uac1c\uc120 \uc0ac\ud56d\uc744 \uacf5\uac1c\ud558\ub824 \ud569\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \ubcc0\uacbd \ub0b4\uc6a9\uc5d0 \uad00\ud574 \uc54c\ub824 \ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.\r\n\r\n1.4-M2\uc758 \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \uad6c\ud604\ub41c \ud575\uc2ec \uac1c\uc120 \uc0ac\ud56d \uc911 \uba87\uac00\uc9c0\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\r\n\r\n\t\uc2dc\uadf8\ub108\ucc98 \uc5c5\ub370\uc774\ud2b8 \ubc0f \uc0c8\ub85c\uc6b4 \uc0c1\uc218 \ub3c4\uc785 \ub4f1 \uae30\uc874 API \ubcc0\uacbd\r\n\t\uacf5\ud1b5 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \ub354 \ub2e4\uc591\ud574\uc9c4 \uae30\ub2a5\r\n\t\ubc30\uc5f4 \ubc0f \uceec\ub809\uc158\uc6a9 \uc0c8\ub85c\uc6b4 \ud568\uc218\r\n\t\uc18d\uc131 \uc704\uc784 \uac1c\uc120\r\n\r\nKotlin 1.4-M2\ub294 \uc544\uc9c1 \ucd9c\uc2dc\ub418\uc9c0 \uc54a\uc558\uc9c0\ub9cc \uc870\uae30 \ubc84\uc804\uc774 Kotlin playground\uc5d0 \ucd94\uac00\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c \uc774 \uae00\uc5d0\uc11c \ud655\uc778\ud55c \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc758 \ucf54\ub4dc \uc0d8\ud50c\uc740 \uc0c8 \ubc84\uc804\uc5d0\uc11c\ub3c4 \uc2e4\ud589\ub429\ub2c8\ub2e4.\r\n\r\n\uc0c8 \ubc84\uc804\uc744 \uc0ac\uc6a9\ud574\ubcf4\uace0 \uc2f6\uc73c\uc2dc\ub2e4\uba74, Kotlin \ube14\ub85c\uadf8 \ub274\uc2a4\ub808\ud130\ub97c \uad6c\ub3c5\ud558\uba74 \ucd9c\uc2dc\uc77c\uc5d0 \ubc14\ub85c \uc18c\uc2dd\uc744 \ubc1b\uc544\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n&nbsp;\r\n\uacf5\ud1b5 \ub77c\uc774\ube0c\ub7ec\ub9ac \ud655\uc7a5\r\nAndroid \ubc0f iOS \ub610\ub294 JVM \ubc0f JS \ub4f1 \ub2e4\uc591\ud55c \ud50c\ub7ab\ud3fc\uc5d0\uc11c \uacf5\uc720\ub418\ub294 '\uacf5\ud1b5' \ucf54\ub4dc\ub85c \ub41c \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uacf5\ud1b5 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 \uc810\ucc28 \ud655\ub300\ud558\uc5ec \ub204\ub77d\ub41c \uae30\ub2a5\uc744 \ucd94\uac00\ud558\uace0 \uc774\ub3d9\ud560 \uc608\uc815\uc785\ub2c8\ub2e4.\r\n\r\nKotlin\/JVM\uc5d0\uc11c \uc774\uc804 appendln\uc758 \uad6c\ud604\uc740 \uc2dc\uc2a4\ud15c\ubcc4 \uc904 \uad6c\ubd84 \uae30\ud638\ub97c \ucd94\uac00\ud588\uc5c8\uc2b5\ub2c8\ub2e4(UNIX \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub294 \\n, Windows\uc5d0\uc11c\ub294 \\r\\n). \uadf8\ub7ec\ub098 \uacf5\ud1b5 \ucf54\ub4dc\uc5d0 \uad00\ud574 \ub17c\uc758\ud560 \uac83\uc774\uba74 \uc6b4\uc601 \uccb4\uc81c\uc640 \uae30\ubc18 \ud50c\ub7ab\ud3fc\uc5d0 \uad00\uacc4\uc5c6\uc774 \ub3d9\uc77c\ud55c \ub3d9\uc791\uc744 \ubcf4\uc7a5\ud558\ub294 \uac83\uc774 \uc911\uc694\ud558\ub2e4\uace0 \uc0dd\uac01\ud569\ub2c8\ub2e4. \uc774\uac83\uc774 \uc0c8\ub85c\uc6b4 appendLine \ud568\uc218\ub97c \uc704\ud574 appendln\uc744 \ub354 \uc774\uc0c1 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uc774\uc720\uc785\ub2c8\ub2e4. \uc774 \ud568\uc218\ub294 \ud56d\uc0c1 \ub2e8\uc77c \\n \ubb38\uc790\ub85c \uc904\uc744 \uc885\ub8cc\ud569\ub2c8\ub2e4.\r\n\r\n[kotlin version=\"1.4-M2-preview\"]\r\nfun main() {\r\n\/\/sampleStart\r\n   println(buildString {\r\n       appendLine(\"Hello,\")\r\n       appendLine(\"Kotlin 1.4-M2\")\r\n   })\r\n\/\/sampleEnd\r\n}\r\n[\/kotlin]\r\n\r\nJVM\uc5d0\uc11c \ud50c\ub7ab\ud3fc \uace0\uc720\uc758 \uad6c\ubd84 \uae30\ud638\uac00 \ud544\uc694\ud55c \uacbd\uc6b0 System.lineSeparator()\ub97c \uacc4\uc18d \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\uc774\uc81c \uacf5\ud1b5 \ucf54\ub4dc\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \ub2e4\ub978 \ud568\uc218\ub97c \ud1b5\ud574, \uc9c0\uc815\ub41c \uc2a4\ud0dd \ucd94\uc801\uc758 \ubb38\uc790\uc5f4 \ud45c\ud604\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Throwable.stackTraceToString() \ud655\uc7a5\uc740 \uc2a4\ud0dd \ucd94\uc801\uacfc \ud568\uaed8 \uc774 throwable\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \uc124\uba85\uc744 \ubc18\ud658\ud558\uace0 Throwable.printStackTrace()\ub294 \uc774 \uc124\uba85\uc744 \ud45c\uc900 \uc624\ub958 \ucd9c\ub825\uc73c\ub85c \uc778\uc1c4\ud569\ub2c8\ub2e4.\r\n\r\n\ub610\ud55c \uacf5\ud1b5 \ucf54\ub4dc\uc5d0\uc11c\ub294 Throwable.addSuppressed() \ud568\uc218\ub85c\uc608\uc678\ub97c \uc804\ub2ec\ud558\uae30 \uc704\ud574 \uc5b5\uc81c\ub41c \uc608\uc678\ub97c \uc9c0\uc815\ud560 \uc218 \uc788\uc73c\uba70\u00a0Throwable.suppressedExceptions \uc18d\uc131\uc73c\ub85c \uc804\uccb4 \uc5b5\uc81c \uc608\uc678 \ubaa9\ub85d\uc744\ubc18\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\uc0c8\ub85c\uc6b4 \ubc30\uc5f4 \ud568\uc218\r\n\ub2e4\uc591\ud55c \ucee8\ud14c\uc774\ub108 \uc720\ud615\uc73c\ub85c \uc791\uc5c5\ud560 \ub54c \uc77c\uad00\ub41c \ud658\uacbd\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ubc30\uc5f4\uc5d0 \ub300\ud55c \uc0c8\ub85c\uc6b4 \ud655\uc7a5 \ud568\uc218\ub97c \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.\r\n\r\n\tshuffle() - \ubc30\uc5f4 \uc694\uc18c\ub97c \uc784\uc758\uc758 \uc21c\uc11c\ub85c \ub123\uc2b5\ub2c8\ub2e4.\r\n\tonEach() - \uac01 \ubc30\uc5f4 \uc694\uc18c\uc5d0 \ub300\ud574 \uc9c0\uc815\ub41c \uc561\uc158\uc744 \uc218\ud589\ud558\uace0 \ubc30\uc5f4 \uc790\uccb4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.\r\n\r\n\uc774\ub7ec\ud55c \ud568\uc218\ub294 \ubaa9\ub85d\uc744 \uc0ac\uc6a9\ud558\ub294 \uc0ac\ub78c\ub4e4\uc5d0\uac8c \uce5c\uc219\ud55c \uac83\uc73c\ub85c, \ubc30\uc5f4\uc5d0\uc11c\ub3c4 \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \uc791\ub3d9\ud569\ub2c8\ub2e4.\r\n[kotlin version=\"1.4-M2-preview\"]\r\nfun main() {\r\n\/\/sampleStart\r\n    var language = \"\"\r\n    val letters = arrayOf(\"k\", \"o\", \"t\", \"l\", \"i\", \"n\")\r\n    val fileExt = letters.onEach { language += it }\r\n       .filterNot { it in \"aeuio\" }.take(2)\r\n       .joinToString(prefix = \".\", separator = \"\")\r\n    println(language) \/\/ \"kotlin\"\r\n    println(fileExt) \/\/ \".kt\"\r\n\r\n    letters.shuffle()\r\n    println(letters.contentToString())\r\n\/\/sampleEnd\r\n}\r\n[\/kotlin]\r\n\r\n\ubc30\uc5f4 \ud558\uc704 \ubc94\uc704\ub97c \uc815\ub82c\ud558\ub294 \uc0c8\ub85c\uc6b4 \ud568\uc218\ub3c4 \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4. \uc774\uc804\uc5d0\ub294 \ub9e4\uac1c\ubcc0\uc218\uac00 fromIndex \ubc0f toIndex\uc778 sort()\uac00 \uc788\uc5c8\uc73c\uba70 \uc774\ub294 JVM \uc804\uc6a9\uc774\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c\ub294 \uacf5\ud1b5\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uace0 reverse() \ubc0f sortDescending()\uc758 \ud558\uc704 \ubc94\uc704 \ubc84\uc804\uc778 2\uac1c\uc758 \uc0c8\ub85c\uc6b4 \uad00\ub828 \ud568\uc218\uac00 \uc0dd\uacbc\uc2b5\ub2c8\ub2e4. \uac01 \ud568\uc218\ub294 \uc774\ub984\uc5d0\uc11c \uc790\uba85\ud558\uac8c \ud30c\uc545\ub418\ub294 \ubc29\uc2dd\uc73c\ub85c 2\uac1c\uc758 \uc0c9\uc778\uc744 \ucde8\ud558\uc5ec \ud574\ub2f9 \ubc94\uc704 \uc0ac\uc774\uc758 \uc694\uc18c\ub97c \uc7ac\uc815\ub82c\ud569\ub2c8\ub2e4(fromIndex\ub294 \ud3ec\ud568\ud558\uc9c0\ub9cc toIndex\ub294 \uc81c\uc678).\r\n\r\n\t\ubc30\uc5f4 \ud558\uc704 \ubc94\uc704\uc5d0 \ub300\ud55c reverse()\ub294 \ud558\uc704 \ubc94\uc704\uc758 \uc694\uc18c \uc21c\uc11c\ub97c \ubc18\ub300\ub85c \ubc14\uafc9\ub2c8\ub2e4.\r\n\t\ubc30\uc5f4 \ud558\uc704 \ubc94\uc704\uc5d0 \ub300\ud55c sortDescending()\uc740 \ud558\uc704 \ubc94\uc704\uc758 \uc694\uc18c\ub97c \ub0b4\ub9bc\ucc28\uc21c\uc73c\ub85c \uc815\ub82c\ud569\ub2c8\ub2e4.\r\n\r\n[kotlin version=\"1.4-M2-preview\"]\r\nfun main() {\r\n\/\/sampleStart\r\n    val letters = arrayOf(\"i\", \"o\", \"k\", \"l\", \"t\", \"n\")\r\n    letters.reverse(0, 3)\r\n    letters.sortDescending(2, 5)\r\n    println(letters.contentToString()) \/\/ [k, o, t, l, i, n]\r\n\/\/sampleEnd\r\n}\r\n[\/kotlin]\r\n\r\nCollections API \ub0b4 \uc0c8\ub85c\uc6b4 \ud568\uc218\r\n1.4-M2\ub294 \uc2e4\uc81c \uc0ac\ub840\uc5d0 \ub354 \ud6a8\uacfc\uc801\uc73c\ub85c \ub300\uc751\ud560 \uc218 \uc788\ub3c4\ub85d \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 Collections API \ud655\uc7a5\uc744 \uacc4\uc18d \ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\t\uc0c8\ub85c\uc6b4 \uc9d1\ud569 \uc0dd\uc131 \ud568\uc218 setOfNotNull()\uc740 \uc81c\uacf5\ub41c \uc778\uc218 \uc911 null\uc774 \uc544\ub2cc \ubaa8\ub4e0 \ud56d\ubaa9\uc73c\ub85c \uad6c\uc131\ub41c \uc9d1\ud569\uc744 \ub9cc\ub4ed\ub2c8\ub2e4.\r\n\r\n[kotlin version=\"1.4-M2-preview\"]\r\nfun main() {\r\n\/\/sampleStart\r\n    val set = setOfNotNull(null, 1, 2, 0, null)\r\n    println(set)\r\n\/\/sampleEnd\r\n}\r\n[\/kotlin]\r\n\r\n\r\n\t\uc774\uc81c shuffled()\ub97c \uc2dc\ud000\uc2a4\uc5d0\ub3c4 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n[kotlin version=\"1.4-M2-preview\"]\r\nfun main() {\r\n\/\/sampleStart\r\n    val numbers = (0 until 50).asSequence()\r\n    val result = numbers.map { it * 2 }.shuffled().take(5)\r\n    println(result.toList()) \/\/five random even numbers below 100\r\n\/\/sampleEnd\r\n}\r\n[\/kotlin]\r\n\r\n\tonEachIndexed() \ubc0f reduceIndexedOrNull()\uc774 \uac01\uac01 onEach() \ubc0f reduceOrNull()\uc758 \ub300\uc751 \ud56d\ubaa9\uc73c\ub85c \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc544\uc2dc\ub2e4\uc2dc\ud53c \uceec\ub809\uc158 \ucc98\ub9ac \ud568\uc218\uc758 \uc774\ub984\uc5d0\uc11c \uc0c9\uc778\ub418\uc5c8\ub2e4\ub294 \uac83\uc740\uc801\uc6a9\ub41c \uc791\uc5c5\uc5d0 \uc694\uc18c \uc0c9\uc778\uc774 \ub9e4\uac1c\ubcc0\uc218\ub85c \uc788\uc74c\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.\r\n\r\n[kotlin version=\"1.4-M2-preview\"]\r\nfun main() {\r\n\/\/sampleStart\r\n    val list = mutableListOf(\"a\", \"b\", \"c\", \"d\").onEachIndexed {\r\n        index, item -&gt; println(index.toString() + \":\" + item)\r\n    }\r\n\r\n    val emptyList = emptyList()\r\n    emptyList.reduceIndexedOrNull {index, a, b -&gt; index + a + b} \/\/ null\r\n\/\/sampleEnd\r\n}\r\n[\/kotlin]\r\n\r\n\trunningFold() \ubc0f runningReduce()\ub294 scan() \ubc0f scanReduce()\uc758 \ub3d9\uc758\uc5b4\ub85c \ub3c4\uc785\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc774\ub984\uc740 \uad00\ub828 \ud568\uc218 fold() \ubc0f reduce()\uc640 \ub354 \uc77c\uce58\ud569\ub2c8\ub2e4. scan()\uc740 \uc774 \uc791\uc5c5\uc5d0\uc11c \uc77c\ubc18\uc801\uc73c\ub85c \uc54c\ub824\uc9c4 \uc774\ub984\uc774\ubbc0\ub85c \ub098\uc911\uc5d0 runningFold()\uc640 \ud568\uaed8 \uc81c\uacf5\ub420 \uc608\uc815\uc785\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc2e4\ud5d8\uc801\uc778 scanReduce()\ub294 \ub354 \uc774\uc0c1 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc73c\uba70 \uace7 \uc81c\uac70\ub420 \uac83\uc785\ub2c8\ub2e4.\r\n\r\n[kotlin version=\"1.4-M2-preview\"]\t\r\nfun main() {\r\n\/\/sampleStart\r\n    val numbers = mutableListOf(0, 1, 2, 3, 4, 5)\r\n    val runningReduceSum = numbers.runningReduce() { sum, item -&gt; sum + item} \/\/ [0, 1, 3, 6, 10, 15]\r\n    val runningFoldSum = numbers.runningFold(10) { sum, item -&gt; sum + item} \/\/ [10, 10, 11, 13, 16, 20, 25]\r\n\/\/sampleEnd\r\n}\r\n[\/kotlin]\r\n\r\n\uae30\uc874 API \uac1c\uc120\r\nKotlin 1.4\ub294 \uc8fc\uc694 '\uae30\ub2a5' \ub9b4\ub9ac\uc2a4\uc774\ubbc0\ub85c \uc5b8\uc5b4\uc5d0 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc744 \ucd94\uac00\ud558\uace0 \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \uc0c8\ub85c\uc6b4 \ud568\uc218 \ub610\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 \uc2e4\ud5d8\uc801 \uc120\uc5b8\uc740 \ubd80\uac00\uc801\uc778 \ub9b4\ub9ac\uc2a4(\uc608: 1.3.70)\uc5d0\uc11c\ub9cc \ucd94\uac00\ud569\ub2c8\ub2e4. Kotlin 1.3.70\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uc9c0\ub9cc \uc2e4\ud5d8\uc801 \uc120\uc5b8\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc73c\uba74 \uc791\uc131\ud55c \ucf54\ub4dc\uac00 Kotlin 1.3.40\uc744 \uc0ac\uc6a9\ud558\ub294 \ub3d9\ub8cc\uc5d0\uac8c\ub3c4 \uc62c\ubc14\ub974\uac8c \ucef4\ud30c\uc77c\ub429\ub2c8\ub2e4.\r\n\r\n\uae30\ub2a5 \ub9b4\ub9ac\uc2a4\ub294 \ubd80\uac00\uc801 \ub9b4\ub9ac\uc2a4\uc640 \ub3d9\uc77c\ud55c \uc5c4\uaca9\ud55c \uaddc\uce59\uc744 \uc900\uc218\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.\r\n\ub530\ub77c\uc11c \uc0c8 \uae30\ub2a5 \ub610\ub294 API\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 1.3 \ubc84\uc804\uc758 Kotlin \ucef4\ud30c\uc77c\ub7ec\ub294 Kotlin 1.4\ub85c \uc791\uc131\ub41c \ucf54\ub4dc\ub97c \ucef4\ud30c\uc77c\ud558\uc9c0 \ubabb\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uac1c\uc120\ud558\uae30 \uc704\ud574 API\uc5d0 \uc77c\ubd80 \ubcc0\uacbd \ub0b4\uc6a9\uc744 \ub3c4\uc785\ud558\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc804 \ubc84\uc804\uc6a9\uc73c\ub85c \uc791\uc131\ub41c \ucf54\ub4dc\uac00 \uc774\uc804\ucc98\ub7fc \uacc4\uc18d \ucef4\ud30c\uc77c\ub418\uace0 \uc791\ub3d9\ud560 \uc218 \uc788\ub3c4\ub85d \uc774\uc804 \ubc84\uc804\uacfc\uc758 \ud638\ud658\uc131\uc744 \uc8fc\uc758 \uae4a\uac8c \uad00\ucc30\ud558\ub824\uace0 \ud569\ub2c8\ub2e4.\r\n\r\nKotlin 1.4\uc5d0\uc11c\ub294 null\uc744 \ud5c8\uc6a9\ud558\ub3c4\ub85d \uba87\uac00\uc9c0 \ud568\uc218 \uaddc\uce59\uc744 \uc644\ud654\ud588\uc2b5\ub2c8\ub2e4.\r\n[kotlin version=\"1.4-M2-preview\"]\r\nfun main() {\r\n\/\/sampleStart\r\n   val s: String? = null\r\n   println(s.toBoolean())  \/\/ false\r\n\/\/sampleEnd\r\n}\r\n[\/kotlin]\r\nKotlin 1.3\uc740 String.toBoolean()\uc758 \ub9ac\uc2dc\ubc84\uac00 null \uac00\ub2a5\ud558\ub3c4\ub85d \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uc774 \ucf54\ub4dc\ub97c \ucef4\ud30c\uc77c\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Kotlin 1.4\ub294 \ub9ac\uc2dc\ubc84\ub97c null \uac00\ub2a5 \ubb38\uc790\uc5f4\uc778 String?.toBoolean()\uc73c\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4. \uc774\uc5d0 \ub530\ub77c \uc774\uc804\uc5d0 \uc791\uc131\ub41c \ubaa8\ub4e0 \ucf54\ub4dc\ub294 Kotlin 1.4\uc5d0\uc11c \uacc4\uc18d \ucef4\ud30c\uc77c\ub418\uace0 \uc791\ub3d9\ud569\ub2c8\ub2e4.\r\n\r\n\ub3d9\uc77c\ud55c \ub17c\ub9ac\uac00 contentEquals, contentHashCode, contentToString \ud568\uc218\uc758 Array \ub9ac\uc2dc\ubc84\uc5d0\ub3c4 \uc801\uc6a9\ub418\uc5b4 \uc774 \ub9ac\uc2dc\ubc84\ub3c4 null \uac00\ub2a5\ud574\uc84c\uc2b5\ub2c8\ub2e4. \ub610\ud55c, String.format()\uc740 \ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158\uc774 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0 null\uc744 locale \uc778\uc218\ub85c \ud5c8\uc6a9\ud569\ub2c8\ub2e4.\r\n\r\nDouble\uacfc Float\uc5d0 \uc815\uc758\ub41c \ub2e4\uc74c \uc0c1\uc218\ub294 \uc774\uc81c '\uc9c4\uc9dc' \uc0c1\uc218\uc785\ub2c8\ub2e4.\r\n[kotlin version=\"1.4-M2-preview\"]\r\nfun main() {\r\n\/\/sampleStart\r\n    println(Double.NaN)  \/\/ NaN\r\n    println(Double.NEGATIVE_INFINITY)  \/\/ -Infinity\r\n    println(Double.POSITIVE_INFINITY &gt; Double.MAX_VALUE )  \/\/ true\r\n    println(Double.SIZE_BITS) \/\/ 64\r\n\/\/sampleEnd\r\n}\r\n[\/kotlin]\r\n\uc774\uc81c \uc774\ub7ec\ud55c \uc0c1\uc218\uac00 const \ubcc0\uc218\ub85c \uc815\uc758\ub418\uc5b4 \uc5b4\ub178\ud14c\uc774\uc158 \uc778\uc218\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\nSIZE_BITS \ubc0f SIZE_BYTES\ub294 Double \ubc0f Float\uc758 \uc0c8\ub85c\uc6b4 \uc0c1\uc218\uc774\ubbc0\ub85c 2\uc9c4 \ud615\uc2dd\uc73c\ub85c \uc720\ud615\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ub098\ud0c0\ub0b4\ub294 \ub370 \uc0ac\uc6a9\ub418\ub294 \ube44\ud2b8 \ubc0f \ubc14\uc774\ud2b8 \uc218\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4.\r\n\r\nKotlin\/JS\uc5d0\uc11c Float.MAX_VALUE \ubc0f Float.MIN_VALUE \uac12\ub3c4 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc804\uc5d0 \uc774 \uac12\uc740 Kotlin\/JS\uc5d0\uc11c Float\uac00 Double\uacfc \ubcf8\uc9c8\uc801\uc73c\ub85c \ub3d9\uc77c\ud558\ubbc0\ub85c JavaScript Number.MAX\/MIN_VALUE \ub610\ub294 Double.MAX\/MIN_VALUE\uc640 \ub3d9\uc77c\ud588\uc2b5\ub2c8\ub2e4. \uc774\uc81c \uc774\ub7ec\ud55c Float \ubc94\uc704\uc758 \uc0c1\uc218\ub294 \ubaa8\ub4e0 \ud50c\ub7ab\ud3fc\uc5d0\uc11c \ub3d9\uc77c\ud569\ub2c8\ub2e4.\r\nvararg\uac00 \uc0ac\uc6a9\ub418\ub294 maxOf() \ubc0f minOf()\r\n\ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 maxOf() \ubc0f minOf() \ud568\uc218\ub294 \ub450 \uac12 \uc911 \ub354 \ud070 \uac12\uacfc \uc791\uc740 \uac12\uc744 \ucc3e\uc2b5\ub2c8\ub2e4. 1.4-M1\ubd80\ud130 maxOf()\uc640minOf()\ub294 \uc778\uc218\uc758 \uac00\ubcc0 \uc22b\uc790(vararg)\ub97c \ud5c8\uc6a9\ud558\ubbc0\ub85c \uc22b\uc790 \ub610\ub294 \uae30\ud0c0 \ube44\uad50 \uac00\ub2a5\ud55c \ud56d\ubaa9 \uc9d1\ud569\uc5d0\uc11c \ud574\ub2f9 \ud568\uc218\ub97c\uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n[kotlin version=\"1.4-M2-preview\"]\r\nfun main() {\r\n\/\/sampleStart\r\n    val max = maxOf(1, 2, 3, 4)\r\n    println(max)\r\n\/\/sampleEnd\r\n}\r\n[\/kotlin]\r\n\uc18d\uc131 \uc704\uc784 \uac1c\uc120 \uc0ac\ud56d\r\nKotlin\uc5d0\uc11c \uc704\uc784\ub41c \uc18d\uc131\uc740 \uc778\ud130\ud398\uc774\uc2a4\uac00 \uc544\ub2cc \uaddc\uce59\uc744 \ud1b5\ud574 \uc791\ub3d9\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc704\uc784\uc73c\ub85c \uc0ac\uc6a9\ud558\ub824\ub294 \uc720\ud615\uc740 \ud544\uc694\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\ub294 \ub300\uc2e0 \uc5f0\uc0b0\uc790 \ud568\uc218\ub97c \uc815\uc758\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub294 \ud2b9\uc815 \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \uad6c\uc18d\ub418\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uc720\uc5f0\uc131\uc744 \uc81c\uacf5\ud558\uc9c0\ub9cc \ub9ce\uc740 \uc2e4\uc81c \uc0ac\uc6a9 \uc0ac\ub840\uc5d0\uc11c\ub294 \uc5ec\uc804\ud788 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4.\r\n\r\nKotlin 1.4\uc5d0\uc11c\ub294 \uc774\ub7ec\ud55c \ubcf4\uc644 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ub354\uc6b1 \ud6a8\uacfc\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc0c8\ub85c\uc6b4 PropertyDelegateProvider \uc778\ud130\ud398\uc774\uc2a4\ub97c \ub3c4\uc785\ud558\uc600\uc2b5\ub2c8\ub2e4.\r\n\ub610\ud55c ReadWriteProperty\uac00 ReadOnlyProperty\ub97c \uc0c1\uc18d\ud569\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uacc4\uc18d \uc77d\uc73c\uba74\uc11c \ud655\uc778\ud574 \uc8fc\uc138\uc694.\r\nDelegate \ud45c\ud604\uc2dd\r\n\uc0ac\uc6a9\uc790 \uc9c0\uc815 \ud074\ub798\uc2a4 \ub610\ub294 \uc775\uba85 \uac1d\uccb4\ub85c \uc704\uc784\uc744 \uad6c\ud604\ud558\ub294 \uacbd\uc6b0 \uc18d\uc131 \uc704\uc784\uc744 \uc815\uc758\ud560 \ub54c ReadWriteProperty \ubc0f ReadOnlyProperty \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud3b8\ub9ac\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n[kotlin version=\"1.4-M2-preview\" runnable=false]\r\nfun myDelegate(): ReadWriteProperty =\r\n   object : ReadWriteProperty {\r\n      ...\r\n   }\r\n\r\nval foo: Int by myDelegate()\r\nvar bar: Int by myDelegate()\r\n[\/kotlin]\r\n\r\n\r\n1.4\ubd80\ud130\ub294 ReadWriteProperty\uac00 ReadOnlyProperty\ub97c \uc0c1\uc18d\ud569\ub2c8\ub2e4. \uc774\uc5d0 \ub530\ub77c delegate \ud45c\ud604\uc2dd\uc744 \ub354 \uc720\uc5f0\ud558\uac8c \uc0ac\uc6a9\ud558\uc5ec \uc791\uc5c5\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \uc608\uc2dc\uc5d0\uc11c\ub294 ReadOnlyProperty\uac00 \ud544\uc694\ud560 \ub54c\ub9c8\ub2e4 myDelegate() \ud638\ucd9c\uc744 \uc804\ub2ec\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\uc5ec\uae30\uc11c\ub294 \uc77d\uae30 \uc804\uc6a9 \ubaa9\ub85d\uc774 \ubcc0\uacbd \ubd88\uac00\ub2a5\ud55c \ubaa9\ub85d\uc774 \uc544\ub2c8\ub4ef\uc774 Kotlin\uc758 '\uc77d\uae30 \uc804\uc6a9'\uc774 '\ubd88\ubcc0'\uacfc \ub3d9\uc77c\ud558\uc9c0 \uc54a\ub2e4\ub294 \uc810\uc744 \uac15\uc870\ud558\uace0 \uc2f6\uc2b5\ub2c8\ub2e4. '\uc77d\uae30 \uc804\uc6a9'\uc774\ub780 '\uc774 \uc778\ud130\ud398\uc774\uc2a4\ub294 \ud574\ub2f9 \uac1d\uccb4\uc5d0 \ub300\ud55c \uc77d\uae30 \uc804\uc6a9 \uc561\uc138\uc2a4\ub9cc \uc81c\uacf5'\ud55c\ub2e4\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.\r\n\uc704\uc784 \uc81c\uacf5\r\n\uc704\uc784\uc744 \uc81c\uacf5\ud558\ub294 \uba54\ucee4\ub2c8\uc998\uc744 \uc0ac\uc6a9\ud558\uba74 \uc18d\uc131 \uad6c\ud604\uc774 \uc704\uc784\ub418\ub294 \"delegate\" \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ub294 \ub17c\ub9ac\ub97c \ud655\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc791\ub3d9 \ubc29\uc2dd\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ubb38\uc11c\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. 1.4\uc5d0\uc11c\ub294 \uc774 \uba54\ucee4\ub2c8\uc998\uc744 \uc880 \ub354 \ud3b8\ub9ac\ud558\uac8c \uc774\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc0c8\ub85c\uc6b4 PropertyDelegateProvider \uc778\ud130\ud398\uc774\uc2a4\ub97c \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ucd94\uac00\ub85c \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uace0 \uc2f6\uc9c0 \uc54a\uace0 \uc704\uc758 myDelegate() \uc608\uc2dc\uc5d0 \ub098\uc628 \uac83\uacfc \uc720\uc0ac\ud55c \uc775\uba85 \uac1d\uccb4 \uc0ac\uc6a9\uc744 \uc120\ud638\ud558\ub294 \uacbd\uc6b0\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\ub2e4\ub978 \uc18d\uc131\uc5d0 \uc704\uc784\r\n1.4\ubd80\ud130 \uc18d\uc131\uc740 \ud574\ub2f9 getter\uc640 setter\ub97c \ub2e4\ub978 \uc18d\uc131\uc5d0 \ubc14\ub85c \uc704\uc784\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \uc774\ub294 \uc774\uc804 \ubc84\uc804\uacfc \ud638\ud658\ub418\ub294 \ubc29\uc2dd\uc73c\ub85c \uc18d\uc131\uc758 \uc774\ub984\uc744 \ubc14\uafb8\ub824\ub294 \uacbd\uc6b0 \uc720\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc0c8 \uc18d\uc131\uc744 \uc0bd\uc785\ud558\uace0 @Deprecated \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc804 \uc18d\uc131\uc5d0 \ucd94\uac00\ud55c \ub2e4\uc74c, \uad6c\ud604\uc744 \uc704\uc784\ud558\uc138\uc694.\r\n[kotlin version=\"1.4-M2-preview\"]\r\nclass MyClass {\r\n   var newName: Int = 0\r\n   @Deprecated(\"Use 'newName' instead\", ReplaceWith(\"newName\"))\r\n   var oldName: Int by this::newName\r\n}\r\n\r\nfun main() {\r\n   val myClass = MyClass()\r\n   \/\/ Notification: 'oldName: Int' is deprecated.\r\n   \/\/ Use 'newName' instead\r\n   myClass.oldName = 42\r\n   println(myClass.newName) \/\/ 42\r\n}\r\n[\/kotlin]\r\n\r\n\uc55e\uc5d0\uc11c \uc124\uba85\ud55c \ucef4\ud30c\uc77c\ub41c \uc704\uc784 \uc18d\uc131\uc758 \ucd5c\uc801\ud654\ub294 \uc774 \uacbd\uc6b0\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc704\uc784 \uc5f0\uc0b0\uc790 \uad6c\ud604\uc740 \uc704\uc784\ub418\ub294 \uc18d\uc131(oldName)\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ucef4\ud30c\uc77c\ub7ec\uac00 \ud574\ub2f9 \uc815\ubcf4\ub97c \uc0ac\uc6a9\ud558\uc5ec KProperty \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ud5a5\ud6c4\uc5d0\ub294 \uc704\uc784(newName)\uc5d0 \ub300\ud55c \ucd94\uac00 KMutableProperty \uc778\uc2a4\ud134\uc2a4\ub3c4 \uc0dd\uc131\ud560 \ud544\uc694\uac00 \uc5c6\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\uccb4\ud5d8 \ubc29\ubc95\r\n\uc774\uc0c1 \uc124\uba85\ub41c \ubaa8\ub4e0 \ubcc0\uacbd \ub0b4\uc6a9\uc740 Kotlin 1.4-M2 \ud14c\uc2a4\ud2b8\ubc84\uc804\uc758 \uc77c\ubd80\uc774\uc9c0\ub9cc play.kotl.in\uc5d0\uc11c \uc628\ub77c\uc778\uc73c\ub85c \uccb4\ud5d8\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8, \uc124\uc815\uc5d0\uc11c 1.4-M2 \ubc84\uc804\uc744 \uc120\ud0dd\ud574\uc57c \ud558\ub294 \uc810\uc744 \uc78a\uc9c0 \ub9d0\uc544\uc8fc\uc138\uc694.\r\n\uc0ac\uc804 \ub9b4\ub9ac\uc2a4 \ub178\ud2b8\r\n\uc774\uc804 \ubc84\uc804\uacfc\uc758 \ud638\ud658\uc131\uc740 \uc0ac\uc804 \ub9b4\ub9ac\uc2a4 \ubc84\uc804\uc5d0\ub294 \uc801\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uae30\ub2a5 \ubc0f API\ub294 \uc0ac\uc6a9\uc790\uc758 \ud53c\ub4dc\ubc31\uc5d0 \ub530\ub77c \ud6c4\uc18d \ub9b4\ub9ac\uc2a4\uc5d0\uc11c \ubcc0\uacbd\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\uc758\uacac\uc744 \uacf5\uc720\ud574 \uc8fc\uc138\uc694\r\n\uc774\uc288 \ud2b8\ub798\ucee4\uc5d0 \ubc84\uadf8\ub97c \ub9ac\ud3ec\ud2b8\ud574\uc8fc\uc2e0 \ubaa8\ub4e0 \ubd84\uaed8 \uac10\uc0ac\ub4dc\ub9bd\ub2c8\ub2e4. \uadf8 \ub2e4\uc74c Kotlin \ub9b4\ub9ac\uc2a4\uc5d0\uc11c \ubb38\uc81c\uac00 \ud574\uacb0\ub418\uae30\ub97c \uae30\ub2e4\ub9ac\uc2e4 \ud544\uc694\uac00 \uc5c6\ub3c4\ub85d \ucd5c\uc885 \ub9b4\ub9ac\uc2a4 \uc804\uc5d0 \ucd5c\uc120\uc744 \ub2e4\ud558\uc5ec \ubaa8\ub4e0 \uc911\uc694\ud55c \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uaca0\uc2b5\ub2c8\ub2e4.\r\n\r\n\uad81\uae08\ud55c \uc810\uc774 \uc788\uac70\ub098 \ud1a0\ub860\uc5d0 \ucc38\uc5ec\ud558\uace0 \uc2f6\uac70\ub098 \uc0c8\ub85c\uc6b4 \ud14c\uc2a4\ud2b8 \ubc84\uc804 \ube4c\ub4dc\uc5d0 \uad00\ud55c\uc54c\ub9bc\uc744 \ubc1b\uace0 \uc2f6\uc73c\uc2e0 \uacbd\uc6b0\u00a0Kotlin Slack\uc758\u00a0#eap \ucc44\ub110\uc5d0 \uc5b8\uc81c\ub4e0\uc9c0 \ucc38\uc5ec\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4(\uc5ec\uae30\uc5d0\uc11c \ucd08\ub300\ubc1b\uae30).\r\n\r\nLet\u2019s Kotlin!\r\n\r\n\uc774 \uac8c\uc2dc\ubb3c\uc740 Pavel Semyonov\uac00 \uc791\uc131\ud55c First Look at Kotlin 1.4-M2: Standard Library Improvements\ub97c \ubc88\uc5ed\ud55c \uae00\uc785\ub2c8\ub2e4.","protected":false},"excerpt":{"rendered":"Kotlin 1.1.4 \uc791\uc5c5\uc774 \uacc4\uc18d \uc9c4\ud589\ub418\ub294 \uac00\uc6b4\ub370 \ub2e4\uc74c \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc778\u00a01.4-M2\uac00 \uace7 \ucd9c\uc2dc\ub429\ub2c8\ub2e4. \uc9c0\uae08\ubd80\ud130 \uc774\ubc88 \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc758 \uc77c\ubd80 \uac1c\uc120 \uc0ac\ud56d\uc744 \uacf5\uac1c\ud558\ub824 \ud569\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \ubcc0\uacbd \ub0b4\uc6a9\uc5d0 \uad00\ud574 \uc54c\ub824 \ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.1.4-M2\uc758 \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \uad6c\ud604\ub41c \ud575\uc2ec \uac1c\uc120 \uc0ac\ud56d \uc911 \uba87\uac00\uc9c0\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\t\uc2dc\uadf8\ub108\ucc98 \uc5c5\ub370\uc774\ud2b8 \ubc0f \uc0c8","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":[5318,5882],"cross-post-tag":[],"acf":[],"featured_image":null,"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/posts\/34067"}],"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=34067"}],"version-history":[{"count":0,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/posts\/34067\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=34067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=34067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=34067"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=34067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}