{"id":33981,"date":"2019-12-30T23:34:12","date_gmt":"2019-12-30T14:34:12","guid":{"rendered":"https:\/\/blog.jetbrains.com\/kr\/?p=460"},"modified":"2019-12-30T23:46:10","modified_gmt":"2019-12-30T14:46:10","slug":"kotlin-1-4","status":"publish","type":"post","link":"https:\/\/blog.jetbrains.com\/ko\/2019\/12\/30\/kotlin-1-4\/","title":{"rendered":"Kotlin 1.4 \uc5d0 \ucd94\uac00\ub420 \uc0ac\ud56d \uadf8\ub9ac\uace0 \ud5a5\ud6c4 \uc804\ub9dd"},"content":{"rendered":"KotlinConf\uc758 \uae30\uc870 \uc5f0\uc124\uc5d0\uc11c Andrey\ub294 Kotlin \ubc1c\uc804\uc744 \uc704\ud574 \ud604\uc7ac \uc9d1\uc911\ud558\uace0 \uc788\ub294 \ubd84\uc57c\uc5d0 \ub300\ud55c \uc804\ub7b5\uc801\uc778 \uacac\ud574\uc640 \ub0b4\ub144 \uc911 \ucd9c\uc2dc\ub420 Kotlin 1.4\uc5d0 \ub300\ud55c \uacc4\ud68d\uc744 \ubc1d\ud614\uc2b5\ub2c8\ub2e4.\r\n\uc544\ub798\uc5d0\uc11c \uae30\uc870 \uc5f0\uc124\uc744 \ubcf4\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \r\n\r\n\uc6b0\ub9ac\uc758 \ube44\uc804\uc740 \uc5ec\ub7ec\ubd84\uc5d0\uac8c Kotlin\uc774 \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uc791\uc5c5 \ud30c\ud2b8\ub108\uac00 \ub418\uace0, \uc791\uc5c5 \uc2dc \uae30\ubcf8\uc801\uc73c\ub85c \uc120\ud0dd\ud558\ub294 \uc5b8\uc5b4\uac00 \ub418\uac8c \ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774 \ube44\uc804\uc744 \ub2ec\uc131\ud558\uae30 \uc704\ud558\uc5ec \uc800\ud76c\ub294 Kotlin\uc774 \ubaa8\ub4e0 \ud50c\ub7ab\ud3fc\uc5d0\uc11c \ube5b\uc744 \ubc1c\ud558\uac8c \ub9cc\ub4e4\uace0\uc790 \ud569\ub2c8\ub2e4. \uc5c5\uacc4\uc5d0\uc11c \uc778\uc9c0\ub3c4\uac00 \ub192\uc740 \uc5ec\ub7ec \ud68c\uc0ac\uc758 \uc0ac\ub840 \uc5f0\uad6c\uc5d0 \ub530\ub974\uba74 \uc6b0\ub9ac\ub294 \uc774 \ubc29\ud5a5\uc73c\ub85c \uc21c\uc870\ub86d\uac8c \uc9c4\ud589\ud558\uace0 \uc788\uc74c\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n2020\ub144 \ubd04\uc5d0 \ucd9c\uc2dc\ub420 \uc608\uc815\uc778 Kotlin 1.4\ub294 Kotlin \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uc744 \ud55c \uce35 \ub354 \ubc1c\uc804\uc2dc\ud0a4\uac8c \ub420 \uac83\uc785\ub2c8\ub2e4.\r\n\ud488\uc9c8 \uc911\uc2ec\r\n\ubb34\uc5c7\ubcf4\ub2e4\ub3c4 Kotlin 1.4\uc5d0\uc11c\ub294 \ud488\uc9c8\uacfc \uc131\ub2a5\uc5d0 \uc911\uc810\uc744 \ub458 \uc608\uc815\uc785\ub2c8\ub2e4. Kotlin\uc740 \uc774\ubbf8 \uc218\ub9ce\uc740 \uc544\uc774\ub514\uc5b4\uc640 \uc811\uadfc \ubc29\ubc95\uc744 \uc120\ub3c4\ud558\uace0 \uc788\ub294 \ucd5c\uc2e0 \uc5b8\uc5b4\uc785\ub2c8\ub2e4. \uc800\ud76c\ub294 Kotlin\uc744 \ud56d\uc0c1 \ucd5c\uc2e0 \uc0c1\ud0dc\ub85c \uc720\uc9c0\ud558\uace0, \uc9c0\uc18d\uc801\uc73c\ub85c \ubc1c\uc804\uc2dc\ud0ac \uc608\uc815\uc785\ub2c8\ub2e4.  \ud558\uc9c0\ub9cc, \ud604\uc7ac Kotlin\uc740 \ub300\uaddc\ubaa8 \uae30\ub2a5\uc744 \ucd94\uac00\ud558\ub294 \uac83\ubcf4\ub2e4\ub294 \uc804\ubc18\uc801\uc778 \uc774\uc6a9 \ud658\uacbd\uc744 \uac1c\uc120\ud558\ub294 \uac83\uc5d0 \ub354 \uc911\uc810\uc744 \ub450\uc5b4\uc57c \ud55c\ub2e4\uace0 \uc0dd\uac01\ud569\ub2c8\ub2e4.  \ub530\ub77c\uc11c Kotlin 1.4 \uc5d0\uc11c\ub294 \uc57d\uac04\uc758 \uc5b8\uc5b4 \ubcc0\uacbd \uc0ac\ud56d\ub9cc \ucd94\uac00\ub429\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc544\ub798\uc5d0 \uc124\uba85\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\ub2f9\uc0ac\ub294 Kotlin\uc744 \uc9c0\uc6d0\ud558\ub294 IDE\uc758 \uc131\ub2a5\uc744 \uac15\ud654\ud558\ub294 \ub370 \uc8fc\ubaa9\ud560 \ub9cc\ud55c \uc131\uacfc\ub97c \uc774\ubbf8 \uc77c\ubd80 \ub2ec\uc131\ud558\uc600\uc2b5\ub2c8\ub2e4. \uc774\uc804 \ubc84\uc804\uacfc \ube44\uad50\ud560 \ub54c \ucf54\ub4dc \uc644\uc131 \uc18d\ub3c4\uac00 \ub300\ud3ed \uc99d\uac00\ud558\uc600\uc2b5\ub2c8\ub2e4.\r\n\r\nGradle \ud300\uacfc \ud611\ub825\ud558\uc5ec Gradle \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ub354 \ube60\ub974\uac8c \ub9cc\ub4e4\uc5c8\uc2b5\ub2c8\ub2e4. Kotlin 1.3.10\uacfc \ube44\uad50\ud588\uc744 \ub54c Kotlin 1.3.60\uc5d0\uc11c\ub294 Android Studio\uc5d0\uc11c\uc758 Gradle Import\uac00 2.5\ubc30 \ub354 \ube60\ub974\uace0, \uba54\ubaa8\ub9ac \uc18c\ube44\uac00 75% \ub354 \uc801\uc2b5\ub2c8\ub2e4.\r\n\r\n\uac8c\ub2e4\uac00 build.gradle.kts\ub97c \ub85c\ub4dc\ud560 \ub54c CPU \uc0ac\uc6a9\ub7c9\uc774 \uac70\uc758 \uc81c\ub85c\uc5d0 \uac00\uae5d\uc2b5\ub2c8\ub2e4! \ub610\ud55c, \ucf54\ub4dc \uce90\uc2f1 \ub355\ubd84\uc5d0 \uac1c\ubc1c \ubaa8\ub4dc\uc5d0\uc11c Kotlin\/Native\ub97c \ucef4\ud30c\uc77c\ud560 \ub54c \ucd5c\ub300 2\ubc30 \ub354 \ube60\ub985\ub2c8\ub2e4.\r\n\uc800\ud76c\ub294 \ube4c\ub4dc \uc18d\ub3c4\uac00 \uc0ac\uc6a9\uc790\uc5d0\uac8c \uc885\uc885 \uac00\uc7a5 \ud070 \uad00\uc2ec \uc0ac\ud56d\uc774\ub77c\ub294 \uac83\uc744 \uc774\ud574\ud558\uace0 \uc788\uc73c\uba70, \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud558\uc5ec \uc9c0\uc18d\uc801\uc73c\ub85c \ud234\uccb4\uc778\uc744 \uac1c\uc120\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc, \uc810\uc9c4\uc801\uc778 \uac1c\uc120\uc73c\ub85c\ub294 \ud504\ub85c\ub355\uc158 \ucf54\ub4dc\ubca0\uc774\uc2a4\uc758 \uc790\uc5f0\uc801\uc778 \uc99d\uac00\ub97c \ub530\ub77c\uac08 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc800\ud76c\ub294 \ucef4\ud30c\uc77c\uc744 \ub354 \ube60\ub974\uac8c \ub9cc\ub4e4\uace0 \uc788\uc9c0\ub9cc, \uc0ac\uc6a9\uc790\ub294 \ub354 \ub9ce\uc740 \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0, \uc804\ubc18\uc801\uc778 \ube4c\ub4dc \uc2dc\uac04\uc740 \ucda9\ubd84\ud788 \uac1c\uc120\ub418\uc9c0 \uc54a\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ucef4\ud30c\uc77c\ub7ec\ub97c \uc7ac\uad6c\ud604\ud558\uc5ec \uc815\ub9d0\ub85c \ube60\ub974\uac8c \ub9cc\ub4e4 \ud544\uc694\uc131\uc774 \uba85\ud655\ud574\uc84c\uc2b5\ub2c8\ub2e4.\r\n\uc0c8\ub85c\uc6b4 \ucef4\ud30c\uc77c\ub7ec\r\n\uc0c8\ub85c\uc6b4 \ucef4\ud30c\uc77c\ub7ec \uad6c\ud604\uc758 \ubaa9\ud45c\ub294 \uc18d\ub3c4\ub97c \ub300\ud3ed \uac1c\uc120\ud558\uace0, Kotlin\uc774 \uc9c0\uc6d0\ud558\ub294 \ubaa8\ub4e0 \ud50c\ub7ab\ud3fc\uc744 \ud1b5\ud569\ud558\uba70, \ucef4\ud30c\uc77c\ub7ec \ud655\uc7a5\uc5d0 \ub300\ud55c API\ub97c \uc81c\uacf5\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774 \ubaa9\ud45c\ub97c \uc2e4\ud604\ud558\ub824\uba74 \uc218 \ub144\uc774 \uc18c\uc694\ub420 \uac83\uc73c\ub85c \uc608\uc0c1\ub418\uc9c0\ub9cc, \uc800\ud76c\uac00 \uc2dc\uc791\ud55c\uc9c0\ub294 \uc5bc\ub9c8\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c, \uc774 \uc0c8\ub85c\uc6b4 \uad6c\ud604\uc758 \uc77c\ubd80\ub9cc 1.4\uc5d0\uc11c \uc81c\uacf5\ub418\uace0, \ud5a5\ud6c4 \ub9e4\uc6b0 \uc810\uc9c4\uc801\uc73c\ub85c \uc774\ud589\ub420 \uac83\uc785\ub2c8\ub2e4. \ud604\uc7ac, \uc774\ubbf8 \uad6c\ud604\uc774 \uc801\uc6a9\ub418\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \ud0c0\uc785 \ucd94\ub860\uc5d0 \ub300\ud55c \uc0c8\ub85c\uc6b4 \uc54c\uace0\ub9ac\uc998\uc774 \uc0c8 \ucef4\ud30c\uc77c\ub7ec\uc758 \uc77c\ubd80\uc785\ub2c8\ub2e4. \ub2e4\ub978 \ubd80\ubd84\uc5d0 \ub300\ud55c \uc811\uadfc \ubc29\ubc95\ub3c4 \ub3d9\uc77c\ud569\ub2c8\ub2e4. \ub2f9\ubd84\uac04\uc740 \ub450 \ubc84\uc804, \uc989 \uc774\uc804 \ubc84\uc804\uacfc \uc2e4\ud5d8\uc801 \ubaa8\ub4dc\uc758 \uc2e0\uaddc \ubc84\uc804\uc774 \ubaa8\ub450 \uc81c\uacf5\ub429\ub2c8\ub2e4. \uc2e0\uaddc \ubc84\uc804\uc774 \uc548\uc815\ud654\uac00 \ub418\uba74, \uc774\uac83\uc774 \uae30\ubcf8 \ubc84\uc804\uc774 \ub420 \uac83\uc785\ub2c8\ub2e4.\r\n\uc0c8\ub85c\uc6b4 \ud504\ub7f0\ud2b8\uc5d4\ub4dc\ub97c \ud1b5\ud55c \uc18d\ub3c4 \uac1c\uc120\r\n\uc0c8\ub85c\uc6b4 \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c \uc800\ud76c\uac00 \uae30\ub300\ud558\ub294 \uc18d\ub3c4 \uac1c\uc120\uc758 \ub300\ubd80\ubd84\uc740 \uc0c8\ub85c\uc6b4 \ud504\ub7f0\ud2b8\uc5d4\ub4dc \uad6c\ud604\uc744 \ud1b5\ud574 \uc2e4\ud604\ub420 \uc608\uc815\uc785\ub2c8\ub2e4.\r\n\ubc30\uacbd\uc5d0 \ub300\ud574 \uc57d\uac04 \uc124\uba85\uc744 \ub4dc\ub9ac\uba74, \ucef4\ud30c\uc77c\uc740 \uc18c\uc2a4 \ud30c\uc77c\uc744 \ubc1b\uc544\uc11c \uc2e4\ud589 \uac00\ub2a5\ud55c \ucf54\ub4dc\ub85c \ub2e8\uacc4\ubcc4\ub85c \ubcc0\ud658\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc774\ub77c\uace0 \uc0dd\uac01\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uad6c\uc131\ud558\ub294 \uccab \ubc88\uc9f8 \uc8fc\uc694 \ub2e8\uacc4\ub97c \ud754\ud788 \ucef4\ud30c\uc77c\ub7ec\uc758 \ud504\ub7f0\ud2b8\uc5d4\ub4dc\ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4. \uc774 \ub2e8\uacc4\uc5d0\uc11c\ub294 \ucf54\ub4dc \uad6c\ubb38 \ubd84\uc11d, \uc774\ub984 \ud655\uc778, \ud0c0\uc785 \uac80\uc0ac \uc218\ud589 \ub4f1 \ub2e4\uc591\ud55c \uc791\uc5c5\uc774 \uc9c4\ud589\ub429\ub2c8\ub2e4. \ub610\ud55c, \uc774 \ub2e8\uacc4\uc5d0\uc11c \ucef4\ud30c\uc77c\ub7ec\ub294 \uc624\ub958 \uac15\uc870 \ud45c\uc2dc, \uc815\uc758 \ud0d0\uc0c9, \ud504\ub85c\uc81d\ud2b8 \ub0b4 \uc2ec\ubcfc \uc0ac\uc6a9 \uc704\uce58 \uac80\uc0c9 \uc2dc IDE \uc548\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0, \ud604\uc7ac kotlinc\uac00 \uac00\uc7a5 \ub9ce\uc740 \uc2dc\uac04\uc744 \ubcf4\ub0b4\ub294 \ub2e8\uacc4\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c, \uc800\ud76c\ub294 \uc774 \ub2e8\uacc4\ub97c \ub354 \ube60\ub974\uac8c \ub9cc\ub4e4\ub824\uace0 \ud569\ub2c8\ub2e4.\r\n\ud604\uc7ac\uc758 \uad6c\ud604\uc740 \uc644\uc804\ud558\uc9c0 \uc54a\uace0, 1.4\uc5d0\uc11c\ub294 \uc81c\uacf5\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc, \uc2dc\uac04\uc774 \uac78\ub9ac\ub294 \uc791\uc5c5\uc758 \ub300\ubd80\ubd84\uc740 \uc774\ubbf8 \ucc98\ub9ac\ud558\uace0 \uc788\uc73c\ubbc0\ub85c, \uc608\uc0c1\ub418\ub294 \uc18d\ub3c4 \uac1c\uc120 \ud6a8\uacfc\ub294 \uce21\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2f9\uc0ac\uc758 \ubca4\uce58\ub9c8\ud06c(YouTrack \ubc0f Kotlin \ucef4\ud30c\uc77c\ub7ec \uc790\uccb4\ub97c \ucef4\ud30c\uc77c\ud558\uae30)\uc5d0 \uc758\ud558\uba74 \uc0c8\ub85c\uc6b4 \ud504\ub7f0\ud2b8\uc5d4\ub4dc\ub294 \uae30\uc874\uc758 \uac83\ubcf4\ub2e4 \uc57d 4.5\ubc30 \ub354 \ube60\ub985\ub2c8\ub2e4.\r\n\ubc31\uc5d4\ub4dc \ud1b5\ud569 \ubc0f \ud655\uc7a5\uc131\r\n\ud504\ub7f0\ud2b8\uc5d4\ub4dc\uac00 \ucf54\ub4dc \ubd84\uc11d\uc744 \uc644\ub8cc\ud558\uba74 \ubc31\uc5d4\ub4dc\uac00 \uc2e4\ud589 \ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4. \ub2f9\uc0ac\uc758 \ubc31\uc5d4\ub4dc\uc5d0\ub294 Kotlin\/JVM, Kotlin\/JS, Kotlin\/Native\uc758 \uc138 \uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ucc98\uc74c \ub450 \uac1c\ub294 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc791\uc131\ub418\uc5b4 \ub9ce\uc740 \ucf54\ub4dc\uac00 \uacf5\uc720\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc800\ud76c\uac00 Kotlin\/Native\ub97c \uc2dc\uc791\ud588\uc744 \ub54c\ub294 \uac00\uc0c1 \uba38\uc2e0\uc758 \ubc14\uc774\ud2b8\ucf54\ub4dc\uc640 \ub2e4\uc18c \uc720\uc0ac\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 Kotlin \ucf54\ub4dc\uc6a9 \ub0b4\ubd80 \ud45c\ud604(IR)\uc744 \uc911\uc2ec\uc73c\ub85c \uad6c\ucd95\ub41c \uc0c8\ub85c\uc6b4 \uc778\ud504\ub77c\uc5d0 \uae30\ubc18\ud558\uc600\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ub2e4\ub978 \ub450 \uac1c\uc758 \ubc31\uc5d4\ub4dc\ub97c \ub3d9\uc77c\ud55c IR\ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\ub294 \uc911\uc785\ub2c8\ub2e4. \uacb0\uacfc\uc801\uc73c\ub85c \ub2f9\uc0ac\ub294 \ub9ce\uc740 \ubc31\uc5d4\ub4dc \ub85c\uc9c1\uc744 \uacf5\uc720\ud558\uace0, \ud30c\uc774\ud504\ub77c\uc778\uc744 \ud1b5\ud569\ud568\uc73c\ub85c\uc368 \ub2e8 \ud55c \ubc88\uc758 \uc791\uc5c5\uc744 \ud1b5\ud558\uc5ec \ub300\ubd80\ubd84\uc758 \uae30\ub2a5 \uad6c\ud604, \ucd5c\uc801\ud654 \ubc0f \ubc84\uadf8 \uc218\uc815\uc744 \ubaa8\ub4e0 \ub300\uc0c1\uc5d0 \uc801\uc6a9\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.\r\n\uc800\ud76c\ub294 \ub2e8\uacc4\uc801\uc73c\ub85c \uc0c8\ub85c\uc6b4 \ubc31\uc5d4\ub4dc\ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud560 \uc608\uc815\uc785\ub2c8\ub2e4. 1.4\uc5d0\uc11c\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \ud65c\uc131\ud654\ub420 \uac00\ub2a5\uc131\uc740 \ub0ae\uc9c0\ub9cc, \uc0ac\uc6a9\uc790\ub294 \uba85\uc2dc\uc801\uc778 \uc120\ud0dd\uc744 \ud1b5\ud574 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\uacf5\ud1b5\uc801\uc778 \ubc31\uc5d4\ub4dc \uc778\ud504\ub77c\ub97c \ud1b5\ud574 \ub2e4\uc911 \ud50c\ub7ab\ud3fc \ucef4\ud30c\uc77c\ub7ec \ud655\uc7a5\uc744 \uc9c0\uc6d0\ud560 \uc218 \uc788\uac8c \ub429\ub2c8\ub2e4. \ud30c\uc774\ud504\ub77c\uc778\uc5d0 \uc5f0\uacb0\ud558\uc5ec \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ucc98\ub9ac\ub098 \ubcc0\ud658\uc744 \ucd94\uac00\ud558\uba74 \ubaa8\ub4e0 \ub300\uc0c1\uc5d0 \uc790\ub3d9\uc73c\ub85c \uc801\uc6a9\ub429\ub2c8\ub2e4. 1.4\uc5d0\uc11c\ub294 \uc774\ub7ec\ud55c \ud655\uc7a5\uc5d0 \ub300\ud55c \uacf5\uc6a9 API\uac00 \uc81c\uacf5\ub418\uc9c0 \uc54a\uc9c0\ub9cc(API\ub294 \ud5a5\ud6c4 \uc548\uc815\ud654\ub420 \uc608\uc815\uc785\ub2c8\ub2e4), \uc790\uccb4 \ucef4\ud30c\uc77c\ub7ec \ud50c\ub7ec\uadf8\uc778\uc744 \uc774\ubbf8 \uad6c\ucd95\ud558\uace0 \uc788\ub294 JetPack Compose \ub4f1\uc758 \ud30c\ud2b8\ub108\uc640 \uae34\ubc00\ud788 \ud611\ub825\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.\r\nKotlin \ub77c\uc774\ube0c\ub7ec\ub9ac \ud615\uc2dd KLib \ub3c4\uc785\r\n\ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc758\uc874\ud560 \uc218 \uc788\ub3c4\ub85d Kotlin\uc5d0\uc11c \ub2e4\uc911 \ud50c\ub7ab\ud3fc \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ube4c\ub4dc\ud558\uace0 \ubc30\ud3ec\ud558\ub824\uba74 \uc5b4\ub5a4 \ud50c\ub7ab\ud3fc\uc5d0\uc11c\ub4e0 \ub611\uac19\uc774 \uc791\ub3d9\ud558\ub294 \ubc30\ud3ec \ud615\uc2dd\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uadf8\ub798\uc11c Kotlin \ub2e4\uc911 \ud50c\ub7ab\ud3fc\uc6a9 \ub77c\uc774\ube0c\ub7ec\ub9ac \ud615\uc2dd\uc778 KLib\ub97c \ub3c4\uc785\ud558\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. KLib \ud30c\uc77c\uc5d0\ub294 \uc2dc\ub9ac\uc5bc\ud654\ub41c IR\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc\ub294 \uc774\ub97c \uc885\uc18d\uc131\uc73c\ub85c \ucd94\uac00\ud560 \uc218 \uc788\uc73c\uba70, \ucef4\ud30c\uc77c\ub7ec \ubc31\uc5d4\ub4dc\ub294 \uc774\ub97c \uc0ac\uc6a9\ud574 \uc9c0\uc815\ub41c \ud50c\ub7ab\ud3fc\uc5d0 \ub300\ud55c \uc2e4\ud589 \uac00\ub2a5\ud55c \ucf54\ub4dc\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. \ubc14\uc774\ud2b8\ucf54\ub4dc\uc640\uc758 \uc720\uc0ac\uc131\uc740 \uc5ec\uae30\uc11c\ub3c4 \uc801\uc6a9\ub418\uc5b4, KLib\ub97c JVM \ubc14\uc774\ud2b8\ucf54\ub4dc\ucc98\ub7fc \ubd84\uc11d\ud558\uace0 \ubcc0\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc2dc\ub9ac\uc5bc\ud654\ub41c IR\uc5d0 \uc218\ud589\ub41c \ubaa8\ub4e0 \ubcc0\ud658\uc740 KLib\uac00 \uc0ac\uc6a9\ub418\ub294 \ubaa8\ub4e0 \ud50c\ub7ab\ud3fc\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce69\ub2c8\ub2e4.\r\n\uc0ac\uc2e4, Kotlin\/Native\ub294 \uaf64 \uc624\ub7ab\ub3d9\uc548 KLib \ud615\uc2dd\uc744 \uc0ac\uc6a9\ud574 Kotlin \ub124\uc774\ud2f0\ube0c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ubc30\ud3ec\ud558\uace0 \uc788\uc5c8\uc73c\uba70, \uc774\uc81c \ub2e4\ub978 \ubc31\uc5d4\ub4dc \ubc0f \ub2e4\uc911 \ud50c\ub7ab\ud3fc \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc9c0\uc6d0\ud558\uae30 \uc704\ud558\uc5ec \uc774 \ud615\uc2dd\uc744 \ud655\uc7a5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud615\uc2dd\uc740 1.4\uc5d0\uc11c \uc2e4\ud5d8\uc801\uc778 \ud615\ud0dc\ub85c \uc801\uc6a9\ub418\uc9c0\ub9cc \ud5a5\ud6c4 \ubc84\uc804\uc5d0\uc11c \uc548\uc815\uc801\uc778 ABI\uac00 \uc81c\uacf5\ub420 \uc608\uc815\uc785\ub2c8\ub2e4.\r\n\ub2e4\uc911 \ud50c\ub7ab\ud3fc\uc5d0 \uad00\ud55c \uae30\ud0c0 \uc18c\uc2dd\r\nAndroid Studio\uc5d0\uc11c iOS \ucf54\ub4dc \uc2e4\ud589\r\n\ud604\uc7ac, iOS \uc7a5\uce58 \ubc0f \uc2dc\ubbac\ub808\uc774\ud130\uc5d0\uc11c Kotlin \ucf54\ub4dc\ub97c \uc2e4\ud589, \ud14c\uc2a4\ud2b8, \ub514\ubc84\uadf8\ud560 \uc218 \uc788\ub294 Android Studio\uc6a9 \ud50c\ub7ec\uadf8\uc778\uc744 \uac1c\ubc1c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud50c\ub7ec\uadf8\uc778\uc740 IntelliJ\uc758 \uc790\uccb4\uc801\uc778 \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c \uc18c\uc2a4\ub294 \uacf5\uac1c\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Objective-C \ub610\ub294 Swift\uc5d0 \ub300\ud55c \uc5b8\uc5b4 \uc9c0\uc6d0\uc740 \uc81c\uacf5\ub418\uc9c0 \uc54a\uace0, AppStore \ubc30\ud3ec\uc640 \uac19\uc740 \uc77c\ubd80 \uc791\uc5c5\uc740 Xcode\uc758 \uc2e4\ud589\uc774 \ud544\uc694\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc, \uc0c8\ub85c\uc6b4 \ud50c\ub7ec\uadf8\uc778\uc744 \uc124\uce58\ud558\uba74 Kotlin \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud574 \uc218\ud589\ud558\ub294 \ubaa8\ub4e0 \uc791\uc5c5\uc774 Android Studio\uc5d0\uc11c\ub3c4 \uc9c0\uc6d0\ub429\ub2c8\ub2e4. 2020\ub144\uc5d0 \uc774 \ud50c\ub7ec\uadf8\uc778\uc758 \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc774 \uacf5\uac1c\ub420 \uc608\uc815\uc785\ub2c8\ub2e4.\r\nKotlin\/Native \ub7f0\ud0c0\uc784 \uac1c\uc120\r\nLinux, Windows, macOS \ubc0f iOS \uc678\uc5d0\ub3c4 Kotlin\/Native\uac00 \uc774\uc81c watchOS \ubc0f tvOS\uc5d0\uc11c \uc791\ub3d9\ud558\uc5ec, \uc0ac\uc2e4\uc0c1 \ubaa8\ub4e0 \uc7a5\uce58\uc5d0\uc11c Kotlin\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub610\ud55c, iOS Kotlin \ud504\ub85c\uadf8\ub7a8\uc774 \ub354 \ube60\ub974\uac8c \uc2e4\ud589\ub418\ub3c4\ub85d Kotlin\/Native\uc758 \ub7f0\ud0c0\uc784 \uc131\ub2a5\uc744 \uac1c\uc120\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.\r\n\ucf54\uc5b4 \ub77c\uc774\ube0c\ub7ec\ub9ac\r\nKotlin \ucf54\uc5b4 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 \ubaa8\ub4e0 \ud50c\ub7ab\ud3fc\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\ub294 \ubaa8\ub4e0 \uae30\ubcf8 \ud0c0\uc785 \ubc0f \uceec\ub809\uc158\uc744 \ucde8\uae09\ud558\ub294 kotlin-stdlib\uc640 kotlinx.coroutines, kotlinx.serialization \ubc0f kotlinx.io\uac00 \ud3ec\ud568\ub429\ub2c8\ub2e4. \ub2e4\uc911 \ud50c\ub7ab\ud3fc\uc5d0\uc11c\ub294 \ub0a0\uc9dc\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc774 \ub9e4\uc6b0 \ud544\uc694\ud558\uba70, \ud604\uc7ac \uc774\uc5d0 \ub300\ud55c \uc791\uc5c5\uc774 \uc9c4\ud589\ub418\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc2e4\ud5d8\uc801\uc778 Durations\uac00 stdlib\uc5d0 \uc774\ubbf8 \ucd94\uac00\ub418\uc5c8\uace0, DateTime\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc774 \ud604\uc7ac \uc9c4\ud589 \uc911\uc785\ub2c8\ub2e4.\r\nKotlin \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \ucd94\uac00\ub41c \ub610 \ub2e4\ub978 \uc911\uc694\ud55c \uae30\ub2a5\uc778 Flow\ub294 Reactive Streams\uc758 \ucf54\ub8e8\ud2f4 \uae30\ubc18 \uad6c\ud604\uc785\ub2c8\ub2e4. Flow\ub294 \ub370\uc774\ud130 \uc2a4\ud2b8\ub9bc\uc744 \ucc98\ub9ac\ud558\ub294 \ub370 \ub9e4\uc6b0 \ud0c1\uc6d4\ud558\uba70, \uc774 \ubc29\uba74\uc5d0\uc11c Kotlin\uc758 \ub2a5\ub825\uc744 \ud65c\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc778\uccb4 \uacf5\ud559\uc801 \uc7a5\uc810 \uc678\uc5d0, Flow\ub294 \uc18d\ub3c4 \ud5a5\uc0c1\uc5d0\ub3c4 \uae30\uc5ec\ud569\ub2c8\ub2e4. \uba87\uba87 \ubca4\uce58\ub9c8\ud06c\uc5d0 \uc758\ud558\uba74 Flow\ub294 \ud1b5\uc6a9\ub418\ub294 \uae30\uc874\uc758 Reactive Streams \uad6c\ud604\ubcf4\ub2e4 \uc57d 2\ubc30 \ub354 \ube60\ub985\ub2c8\ub2e4.\r\n\ub77c\uc774\ube0c\ub7ec\ub9ac \uc791\uc131\uc790\ub97c \uc704\ud55c \uac1c\uc120 \uc0ac\ud56d\r\n\uc0c8\ub85c\uc6b4 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc0dd\uc131\uc740 Kotlin \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uc5d0 \ub9e4\uc6b0 \uc911\uc694\ud55c \uc77c\uc774\ubbc0\ub85c \ub77c\uc774\ube0c\ub7ec\ub9ac \uc791\uc131\uc790\ub4e4\uc758 \uc774\uc6a9 \ud658\uacbd\uc744 \uc9c0\uc18d\uc801\uc73c\ub85c \uac1c\uc120\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc791\uc131 \ubaa8\ub4dc\ub97c \ud1b5\ud574 \uc548\uc815\uc801\uc778 API\uc5d0 \uac00\uc7a5 \uc801\ud569\ud55c \ubc29\uc2dd\uc73c\ub85c \ucf54\ub4dc\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c, Dokka 1.0\uc744 \ucd9c\uc2dc\ud558\uc5ec \ubaa8\ub4e0 \ud50c\ub7ab\ud3fc\uc5d0\uc11c \ubb38\uc11c \uc0dd\uc131\uc744 \uc9c0\uc6d0\ud560 \uc608\uc815\uc785\ub2c8\ub2e4.\r\n\ub2e4\uc911 \ud50c\ub7ab\ud3fc \uc6f9\r\n\ud50c\ub7ab\ud3fc \uac04\uc5d0 \ucf54\ub4dc\ub97c \uacf5\uc720\ud558\uba74 \ubaa8\ubc14\uc77c\uc5d0\uc11c\ubfd0\ub9cc \uc544\ub2c8\ub77c \uc6f9\uc5d0\uc11c\ub3c4 \ub9ce\uc740 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4. \uc11c\ubc84 \ubc0f \ubaa8\ubc14\uc77c \uc571\uacfc \uc218\ub9ce\uc740 \ucf54\ub4dc\ub97c \uacf5\uc720\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc800\ud76c\ub294 Kotlin\/JS \ub3c4\uad6c\uc5d0 \ub354\uc6b1\ub354 \ub9ce\uc740 \ud22c\uc790\ub97c \ud558\uace0 \uc788\uc73c\uba70, \ud604\uc7ac Kotlin \ucf54\ub4dc \ubcc0\uacbd\uc5d0\uc11c \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\uc758 \uacb0\uacfc \ud655\uc778\uae4c\uc9c0 \ub2e4\uc591\ud55c \uac1c\ubc1c \uc8fc\uae30\ub97c \ub9e4\uc6b0 \ube60\ub974\uac8c \uc9c4\ud589\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.\r\n\r\n\ub610\ud55c, JS \uc0c1\ud638 \uc6b4\uc6a9\uc131\uc744 \uac1c\uc120\ud558\uc5ec NPM \uc885\uc18d\uc131\uc744 Kotlin \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc788\uace0, .d.ts \ud0c0\uc785 \uc815\uc758\ub294 Kotlin \ud234\uccb4\uc778\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \uc120\ud0dd\ub429\ub2c8\ub2e4.\r\n\uadf8\ub9ac\uace0, \uc0c8\ub85c\uc6b4 IR \uae30\ubc18 \ubc31\uc5d4\ub4dc\ub97c \ud1b5\ud574 \ubc14\uc774\ub108\ub9ac \uaddc\ubaa8\uc5d0\uc11c \ub9ce\uc740 \uac1c\uc120 \uc0ac\ud56d\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ucef4\ud30c\uc77c\ub41c JS \ud30c\uc77c\uc740 \ud604\uc7ac \ud06c\uae30\uc758 \uc808\ubc18\uae4c\uc9c0 \uc791\uc544\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\uc0c8\ub85c\uc6b4 \uc5b8\uc5b4 \uae30\ub2a5\r\nKotlin 1.4\ub294 \uba87 \uac00\uc9c0 \uc0c8\ub85c\uc6b4 \uc5b8\uc5b4 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.\r\nKotlin \ud074\ub798\uc2a4\uc758 SAM \ubcc0\ud658\r\n\ucee4\ubba4\ub2c8\ud2f0\ub85c\ubd80\ud130 Kotlin \ud074\ub798\uc2a4\uc758 SAM \ubcc0\ud658 \uc9c0\uc6d0\uc744 \ucd94\uac00\ud558\ub3c4\ub85d \uc694\uccad\ubc1b\uc558\uc2b5\ub2c8\ub2e4(KT-7770). \ud558\ub098\uc758 \ucd94\uc0c1 \uba54\uc18c\ub4dc\ub9cc \uc9c0\ub2cc \uc778\ud130\ud398\uc774\uc2a4 \ub610\ub294 \ud074\ub798\uc2a4\uac00 \ub9e4\uac1c \ubcc0\uc218\ub85c \uae30\ub300\ub41c \uacbd\uc6b0 \ub78c\ub2e4\ub97c \uc778\uc218\ub85c \uc804\ub2ec\ud558\uba74 SAM \ubcc0\ud658\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c, \ucef4\ud30c\uc77c\ub7ec\uac00 \ucd94\uc0c1 \uba64\ubc84 \ud568\uc218\ub97c \uad6c\ud604\ud558\ub294 \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub85c \ub78c\ub2e4\ub97c \ubcc0\ud658\ud569\ub2c8\ub2e4.\r\nSAM \ubcc0\ud658\uc740 \ud604\uc7ac Java \uc778\ud130\ud398\uc774\uc2a4 \ubc0f \ucd94\uc0c1 \ud074\ub798\uc2a4\uc5d0 \ub300\ud574\uc11c\ub9cc \uc791\ub3d9\ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \uc124\uacc4\ud55c \uc6d0\ub798\uc758 \ubaa9\uc801\uc740 \uba85\uc2dc\uc801\uc73c\ub85c \ud574\ub2f9 \uc0ac\uc6a9 \uc0ac\ub840\ub85c\ub9cc \ud568\uc218 \ud615\uc2dd\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud568\uc774\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc, \ud568\uc218 \ud615\uc2dd \ubc0f \ud615\uc2dd \ubcc4\uce6d\uc774 \ubaa8\ub4e0 \uc0ac\uc6a9 \uc0ac\ub840\uc5d0 \ub300\uc751\ud558\uc9c0 \uc54a\uace0, \uc885\uc885 SAM \ubcc0\ud658\uc744 \uc218\ud589\ud560 \ubaa9\uc801\uc73c\ub85c\ub9cc Java\uc5d0\uc11c \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc720\uc9c0\ud574\uc57c \ud588\uc2b5\ub2c8\ub2e4.\r\nJava\uc640 \ub2ec\ub9ac Kotlin\uc740 \ud558\ub098\uc758 \ucd94\uc0c1 \uba54\uc18c\ub4dc\ub9cc \uc9c0\ub2cc \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \ub300\ud574 SAM \ubcc0\ud658\uc744 \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc800\ud76c\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc5d0 SAM \ubcc0\ud658\uc744 \uc801\uc6a9\ud558\ub824\ub294 \uc758\ub3c4\ub97c \uba85\ud655\ud558\uac8c \ud574\uc57c \ud55c\ub2e4\uace0 \uc0dd\uac01\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c, SAM \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc815\uc758\ud558\ub824\uba74 \uc778\ud130\ud398\uc774\uc2a4\uc5d0 fun \ud0a4\uc6cc\ub4dc\ub97c \ud45c\uae30\ud558\uc5ec, \ud574\ub2f9 \uc778\ud130\ud398\uc774\uc2a4\uac00 \ud568\uc218\ud615 \uc778\ud130\ud398\uc774\uc2a4\ub85c \uc0ac\uc6a9\ub420 \uc218 \uc788\uc74c\uc744 \uac15\uc870\ud574\uc57c \ud569\ub2c8\ub2e4.\r\n\r\nfun interface Action {\r\n    fun run()\r\n}\r\n\r\nfun runAction(a: Action) = a.run()\r\n\r\nfun main() {\r\n    runAction {\r\n        println(&quot;Hello, KotlinConf!&quot;)\r\n    }\r\n}\r\n\r\nfun interface \ub300\uc2e0 \ub78c\ub2e4\ub97c \uc804\ub2ec\ud558\ub294 \uac83\uc740 \uc0c8\ub85c\uc6b4 \ud0c0\uc785 \ucd94\ub860 \uc54c\uace0\ub9ac\uc998\uc5d0\uc11c\ub9cc \uc9c0\uc6d0\ub41c\ub2e4\ub294 \uc810\uc744 \uc720\uc758\ud574\uc8fc\uc138\uc694.  \r\n\uba85\uba85\ub41c \uc778\uc218 \ubc0f \ud3ec\uc9c0\uc154\ub110 \uc778\uc218\uc758 \ud63c\ud569\r\n\ubaa8\ub4e0 \ud3ec\uc9c0\uc154\ub110 \uc778\uc218 \ub4a4\uc5d0 \uba85\uba85\ub41c \uc778\uc218\ub97c \ubc30\uce58\ud558\ub294 \uacbd\uc6b0\ub97c \uc81c\uc678\ud558\uace0, Kotlin\uc740 \uba85\uc2dc\uc801\uc778 \uc774\ub984\uc744 \uc9c0\ub2cc \uc778\uc218(\"named\")\uc640 \uc774\ub984\uc774 \uc5c6\ub294 \uc77c\ubc18\uc801\uc778 \uc778\uc218(\"positional\")\ub97c \ud63c\ud569\ud558\ub294 \uac83\uc744 \uae08\uc9c0\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc, \ubaa8\ub4e0 \uc778\uc218\uac00 \uc815\ud655\ud55c \uc704\uce58\uc5d0 \uc788\ub294\ub370, \uc911\uac04\uc5d0 \uc788\ub294 \uc778\uc218\uc5d0 \uc774\ub984\uc744 \uc9c0\uc815\ud558\ub824\ub294 \uacbd\uc6b0 \ub9e4\uc6b0 \uc131\uac00\uc2e0 \uc791\uc5c5\uc774 \ub429\ub2c8\ub2e4. Kotlin 1.4\uc5d0\uc11c\ub294 \uc774 \ubb38\uc81c\uac00 \ud574\uacb0\ub418\uc5b4, \ub2e4\uc74c\uacfc \uac19\uc774 \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\nfun f(a: Int, b: Int, c: Int) {}\r\n\r\nfun main() {\r\n    f(1, b = 2, 3)\r\n}\r\n\r\n\ucd5c\uc801\ud654\ub41c \uc704\uc784\ub41c \uc18d\uc131\r\nlazy \uc18d\uc131 \ubc0f \ub2e4\ub978 \uba87\uba87 \uc704\uc784\ub41c \uc18d\uc131\uc774 \ucef4\ud30c\uc77c\ub418\ub294 \uae30\ubcf8\uc801\uc778 \ubc29\uc2dd\uc744 \uac1c\uc120\ud560 \uc608\uc815\uc785\ub2c8\ub2e4.\r\n\uc77c\ubc18\uc801\uc73c\ub85c \uc704\uc784\ub41c \uc18d\uc131\uc740 \uc0c1\uc751\ud558\ub294 KProperty reflection \uac1d\uccb4\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, Delegates.observable\uc744 \uc0ac\uc6a9\ud560 \ub54c \uc218\uc815\ub41c \uc18d\uc131\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \ub2e4\uc74c\uacfc \uac19\uc774 \ud45c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\nimport kotlin.properties.Delegates\r\n\r\nclass MyClass {\r\n    var myProp: String by Delegates.observable(&quot;&lt;no name&gt;&quot;) {\r\n        kProperty, oldValue, newValue -&gt;\r\n        println(&quot;${kProperty.name}: $oldValue -&gt; $newValue&quot;)\r\n    }\r\n}\r\n\r\nfun main() {\r\n    val user = MyClass()\r\n    user.myProp = &quot;first&quot;\r\n    user.myProp = &quot;second&quot;\r\n}\r\n\r\n\uc774\ub97c \uac00\ub2a5\ud558\uac8c \ud558\uae30 \uc704\ud558\uc5ec Kotlin \ucef4\ud30c\uc77c\ub7ec\ub294 \ucd94\uac00\uc801\uc778 \uad6c\ubb38 \uba64\ubc84 \uc18d\uc131\uc744 \uc0dd\uc131\ud558\uc5ec, \ud074\ub798\uc2a4 \uc548\uc5d0 \uc0ac\uc6a9\ub41c \uc704\uc784\ub41c \uc18d\uc131\uc744 \ub098\ud0c0\ub0b4\ub294 \ubaa8\ub4e0 KProperty \uac1d\uccb4\ub97c \ubc30\uc5f4\uc5d0 \ubcf4\uad00\ud569\ub2c8\ub2e4.\r\n\r\n&gt;&gt;&gt; javap MyClass\r\n\r\npublic final class MyClass {\r\n    static final kotlin.reflect.KProperty[] $$delegatedProperties;\r\n    ...\r\n}\r\n\r\n\ud558\uc9c0\ub9cc, \uc77c\ubd80 \uc704\uc784\ub41c \uc18d\uc131\uc740 \uc5b4\ub5a4 \ubc29\uc2dd\uc774\ub85c\ub4e0 KProperty\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774 \uacbd\uc6b0 $$delegatedProperties\uc5d0\uc11c \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ub294 \uac83\uc740 \ucd5c\uc801\uc774 \uc544\ub2d9\ub2c8\ub2e4. Kotlin 1.4 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c\ub294 \uc774 \uc0ac\uc6a9 \uc0ac\ub840\uac00 \ucd5c\uc801\ud654\ub429\ub2c8\ub2e4. \uc704\uc784\ub41c \uc18d\uc131 \uc5f0\uc0b0\uc790\uac00 inline\uc774\uace0, KProperty \ub9e4\uac1c \ubcc0\uc218\uac00 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0 \uc0c1\uc751\ud558\ub294 reflection \uac1d\uccb4\ub294 \uc0dd\uc131\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\r\n\uac00\uc7a5 \ub450\ub4dc\ub7ec\uc9c4 \uc608\ub294 lazy \uc18d\uc131\uc785\ub2c8\ub2e4. lazy \uc18d\uc131\uc5d0 \ub300\ud55c getValue \uad6c\ud604\uc740 inline\uc774\uace0, KProperty \ub9e4\uac1c \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\r\n\r\ninline operator fun &lt;T&gt; Lazy&lt;T&gt;.getValue(thisRef: Any?, property: KProperty&lt;*&gt;): T = value\r\n\r\nKotlin 1.4\ubd80\ud130\ub294 lazy \uc18d\uc131\uc744 \uc815\uc758\ud560 \ub54c, \uc0c1\uc751\ud558\ub294 KProperty \uc778\uc2a4\ud134\uc2a4\uac00 \uc0dd\uc131\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ud074\ub798\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \uc720\uc77c\ud55c \uc704\uc784\ub41c \uc18d\uc131\uc774 lazy \uc18d\uc131(\ubc0f \uc774 \ucd5c\uc801\ud654\uc5d0 \ubd80\ud569\ud558\ub294 \ub2e4\ub978 \uc18d\uc131)\uc77c \uacbd\uc6b0 \ud574\ub2f9 \ud074\ub798\uc2a4\uc5d0 \ub300\ud574 \uc804\uccb4 $$delegatedProperties \ubc30\uc5f4\uc740 \uc0dd\uc131\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\r\n\r\nclass MyOtherClass {\r\n    val lazyProp by lazy { 42 }\r\n}\r\n\r\n&gt;&gt;&gt; javap MyOtherClass\r\npublic final class MyOtherClass {\r\n    \/\/ no longer generated:\r\n    static final kotlin.reflect.KProperty[] $$delegatedProperties; \r\n    ...\r\n}\r\n\r\nTrailing Commas\r\n\uc774 \uc0ac\uc18c\ud55c \uad6c\ubb38 \ubcc0\uacbd\uc740 \ub180\ub77c\uc6b8 \uc815\ub3c4\uc758 \ud3b8\ub9ac\ud568\uc744 \uac00\uc838\uc654\uc2b5\ub2c8\ub2e4! \ub9e4\uac1c \ubcc0\uc218 \ubaa9\ub85d\uc758 \ub9c8\uc9c0\ub9c9 \ub9e4\uac1c \ubcc0\uc218 \ub4a4\uc5d0 trailing comma\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c, \ub204\ub77d\ub41c \uc27c\ud45c\ub97c \ucd94\uac00 \ub610\ub294 \uc81c\uac70\ud560 \ud544\uc694 \uc5c6\uc774 \ub77c\uc778\uc744 \ubc14\uafb8\uac70\ub098 \uc0c8\ub85c\uc6b4 \ub9e4\uac1c \ubcc0\uc218\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n\uae30\ud0c0 \uc8fc\ubaa9\ud560 \ub9cc\ud55c \ubcc0\uacbd \uc0ac\ud56d\r\nKotlin 1.3.40\uc5d0\uc11c \ub3c4\uc785\ub41c \uc720\uc6a9\ud55c typeof \ud568\uc218\uac00 \uc548\uc815\ud654\ub418\uc5b4 \ubaa8\ub4e0 \ud50c\ub7ab\ud3fc\uc5d0\uc11c \uc9c0\uc6d0\ub429\ub2c8\ub2e4.\r\nwhen \uc548\uc5d0\uc11c break \ubc0f continue\ub97c \ud65c\uc131\ud654\ud558\ub294 \uae30\ub2a5\uc740 1.3.60 \ub9b4\ub9ac\uc2a4 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c \uc774\ubbf8 \uc18c\uac1c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.\r\n\uac10\uc0ac\ud569\ub2c8\ub2e4!\r\nKotlin EAP \ubc0f \uc2e4\ud5d8\uc801 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud574 \ubcf4\uace0 \ud53c\ub4dc\ubc31\uc744 \uc81c\uacf5\ud574 \uc8fc\uc2e0 \ubaa8\ub4e0 \ubd84\uaed8 \uc9c4\uc2ec\uc73c\ub85c \uac10\uc0ac\ub4dc\ub9bd\ub2c8\ub2e4. \uc800\ud76c\ub294 \uc5ec\ub7ec\ubd84\uacfc \ud568\uaed8 Kotlin \uc5b8\uc5b4\ub97c \uac1c\ubc1c\ud558\uace0 \uc788\uc73c\uba70, \uc5ec\ub7ec\ubd84\uc758 \uc18c\uc911\ud55c \uc758\uacac\uc5d0 \uadfc\uac70\ud558\uc5ec \ub9ce\uc740 \ub514\uc790\uc778 \uacb0\uc815\uc744 \ub0b4\ub9ac\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ucee4\ubba4\ub2c8\ud2f0\uc640\uc758 \ud53c\ub4dc\ubc31 \uc8fc\uae30\ub97c \uc774\ub807\uac8c \ube60\ub974\uace0 \ud6a8\uacfc\uc801\uc73c\ub85c \uc720\uc9c0\ud558\ub294 \uc77c\uc740 Kotlin\uc744 \ucd5c\uace0\uc758 \uc5b8\uc5b4\ub85c \ub9cc\ub4dc\ub294 \ub370 \ub9e4\uc6b0 \uc911\uc694\ud569\ub2c8\ub2e4!\r\nKotlin\uc744 \uc0ac\uc6a9\ud574 \uc218\ub9ce\uc740 \uba4b\uc9c4 \uc791\ud488\uc744 \ub9cc\ub4e4\uace0 \uacc4\uc2e0 \ubaa8\ub4e0 \ucee4\ubba4\ub2c8\ud2f0 \ud68c\uc6d0\uaed8 \uc815\ub9d0\ub85c \uae4a\uc774 \uac10\uc0ac\ub4dc\ub9bd\ub2c8\ub2e4. \uc55e\uc73c\ub85c\ub3c4 \uacc4\uc18d\ud574\uc11c Kotlin\uc744 \ubc1c\uc804\uc2dc\ucf1c \ub098\uac14\uc73c\uba74 \uc88b\uaca0\uc2b5\ub2c8\ub2e4!\r\n\uadf8\ub9ac\uace0, IntelliJ IDEA \ubc0f Android Studio \uc548\uc758 Kotlin \ud50c\ub7ec\uadf8\uc778\uc740 \uc0ac\uc6a9\uc790\uc758 \uae30\ub2a5 \uc0ac\uc6a9\uc5d0 \ub300\ud558\uc5ec \uc775\uba85\ud654\ub41c \ud1b5\uacc4 \uc815\ubcf4\ub97c \uc218\uc9d1\ud569\ub2c8\ub2e4. \uc774 \ud1b5\uacc4 \uc815\ubcf4\ub294 \ubb34\uc5c7\uc774 \uc791\ub3d9\ud558\uac70\ub098, \ubb38\uc81c\ub97c \uc77c\uc73c\ud0a4\uace0 \uc788\ub294\uc9c0 \uadf8\ub9ac\uace0 \uc5b4\ub5a4 \uac83\uc744 \uc9d1\uc911\uc801\uc73c\ub85c \uac1c\uc120\ud574\uc57c \ud558\ub294\uc9c0 \uc774\ud574\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub418\ubbc0\ub85c, \uc774 \uc815\ubcf4\uc758 \uc81c\uacf5\uc5d0 \ub3d9\uc758\ud574 \uc8fc\uc2e4 \uac83\uc744 \ubd80\ud0c1\ub4dc\ub9bd\ub2c8\ub2e4.\r\n\r\n\ubcf8\ubb38\uc740 Svetlana Isakova\uc758","protected":false},"excerpt":{"rendered":"KotlinConf\uc758 \uae30\uc870 \uc5f0\uc124\uc5d0\uc11c Andrey\ub294 Kotlin \ubc1c\uc804\uc744 \uc704\ud574 \ud604\uc7ac \uc9d1\uc911\ud558\uace0 \uc788\ub294 \ubd84\uc57c\uc5d0 \ub300\ud55c \uc804\ub7b5\uc801\uc778 \uacac\ud574\uc640 \ub0b4\ub144 \uc911 \ucd9c\uc2dc\ub420 Kotlin 1.4\uc5d0 \ub300\ud55c \uacc4\ud68d\uc744 \ubc1d\ud614\uc2b5\ub2c8\ub2e4.\uc544\ub798\uc5d0\uc11c \uae30\uc870 \uc5f0\uc124\uc744 \ubcf4\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc6b0\ub9ac\uc758 \ube44\uc804\uc740 \uc5ec\ub7ec\ubd84\uc5d0\uac8c Kotlin\uc774 \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uc791\uc5c5 \ud30c\ud2b8\ub108\uac00 \ub418\uace0, \uc791\uc5c5 \uc2dc \uae30\ubcf8\uc801\uc73c\ub85c \uc120\ud0dd\ud558\ub294 \uc5b8\uc5b4\uac00 \ub418\uac8c \ud558\ub294","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,5506],"cross-post-tag":[],"acf":[],"featured_image":null,"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/posts\/33981"}],"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=33981"}],"version-history":[{"count":0,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/posts\/33981\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=33981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=33981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=33981"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=33981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}