{"id":118499,"date":"2021-02-23T03:36:23","date_gmt":"2021-02-23T02:36:23","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=kotlin&#038;p=118499"},"modified":"2021-02-25T07:50:19","modified_gmt":"2021-02-25T06:50:19","slug":"new-language-features-preview-in-kotlin-1-4-30","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/ko\/kotlin\/2021\/02\/new-language-features-preview-in-kotlin-1-4-30\/","title":{"rendered":"Kotlin 1.4.30\uc758 \uc0c8\ub85c\uc6b4 \uc5b8\uc5b4 \uae30\ub2a5 \ud14c\uc2a4\ud2b8 \ubc84\uc804"},"content":{"rendered":"<p>Kotlin 1.5\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \uc5b8\uc5b4 \uae30\ub2a5\uc744 \uc0c8\ub85c \ucd94\uac00\ud560 \uacc4\ud68d\uc774\uba70, \uc774 \uae30\ub2a5\uc740 Kotlin 1.4.30\uc5d0\uc11c \uc0ac\uc6a9\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/new-language-features-preview-in-kotlin-1-4-30\/#inline-value-classes-stabilization\">inline value \ud074\ub798\uc2a4 \uc548\uc815\ud654<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/new-language-features-preview-in-kotlin-1-4-30\/#jvm-records\">JVM \ub808\ucf54\ub4dc\uc5d0 \ub300\ud55c \uc2e4\ud5d8\uc801 \uc9c0\uc6d0<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/new-language-features-preview-in-kotlin-1-4-30\/#sealed-interfaces\">sealed \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \ub300\ud55c \uc2e4\ud5d8\uc801 \uc9c0\uc6d0 \ubc0f sealed \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c \uae30\ud0c0 \uac1c\uc120 \uc0ac\ud56d<\/a><\/li>\n<\/ul>\n<p>\uc0c8 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/new-language-features-preview-in-kotlin-1-4-30\/#how-to-try\">1.5 \uc5b8\uc5b4 \ubc84\uc804\uc744 \uc9c0\uc815<\/a>\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc0c8\ub85c\uc6b4 <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2020\/10\/new-release-cadence-for-kotlin-and-the-intellij-kotlin-plugin\/\">\ub9b4\ub9ac\uc2a4 \uc8fc\uae30<\/a>\uc5d0 \ub530\ub77c Kotlin 1.5\ub294 \uba87\ub2ec \ud6c4\uc5d0 \ucd9c\uc2dc\ub420 \uc608\uc815\uc774\uc9c0\ub9cc \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc740 1.4.30\uc5d0\uc11c \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc73c\ub85c \uc81c\uacf5\ub429\ub2c8\ub2e4. \uc870\uae30\uc5d0 \ubc1b\ub294 \uc5ec\ub7ec\ubd84\uc758 \uc758\uacac\uc740 \uc800\ud76c\uc5d0\uac8c \ub9e4\uc6b0 \uc18c\uc911\ud558\ubbc0\ub85c \uc9c0\uae08 \uc0c8 \uae30\ub2a5\uc744 \ud3c9\uac00\ud574\uc8fc\uc2dc\uba74 \uac10\uc0ac\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/youtrack.jetbrains.com\/issues?q=tag:%20Language\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/Kotlin-1.4.30-new-lang-features-banner_2-02.png\" alt=\"\" \/><\/a><\/p>\n<h2>inline value \ud074\ub798\uc2a4 \uc548\uc815\ud654<\/h2>\n<p><a name = \"inline-value-classes-stabilization\"><\/a><\/p>\n<p><a href=\"https:\/\/kotlinlang.org\/docs\/reference\/inline-classes.html\" target=\"_blank\" rel=\"noopener\">inline \ud074\ub798\uc2a4<\/a>\ub294 Kotlin 1.3\ubd80\ud130 <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/evolution\/components-stability.html#stability-levels-explained\" target=\"_blank\" rel=\"noopener\">\uc54c\ud30c<\/a> \ubc84\uc804\uc73c\ub85c \uc81c\uacf5\ub418\uc5c8\uc73c\uba70 1.4.30\uc5d0\uc11c\ub294 <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/evolution\/components-stability.html#stability-levels-explained\" target=\"_blank\" rel=\"noopener\">\ubca0\ud0c0<\/a> \ubc84\uc804\uc73c\ub85c \uc2b9\uaca9\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Kotlin 1.5\uc5d0\uc11c\ub294 inline \ud074\ub798\uc2a4\uc758 \uac1c\ub150\uc744 \uc548\uc815\ud654\ud558\ub294 \ub3d9\uc2dc\uc5d0 \ub354 \uc77c\ubc18\uc801\uc778 \uae30\ub2a5\uc778 <em>value \ud074\ub798\uc2a4<\/em>\uc758 \uc77c\ubd80\ub85c \ub9cc\ub4ed\ub2c8\ub2e4. \uc774\uc5d0 \uad00\ud574\uc11c\ub294 \uc774 \uae00\uc758 \ud6c4\ubc18\ubd80\uc5d0\uc11c \uc124\uba85\ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800 inline \ud074\ub798\uc2a4\uc758 \uc791\ub3d9 \uc6d0\ub9ac\ub97c \uc0c1\uae30\ud574\ubcf4\uc8e0. inline \ud074\ub798\uc2a4\uc5d0 \uc775\uc219\ud558\uc2dc\ub2e4\uba74 \uc774 \uc139\uc158\uc744 \uac74\ub108\ub6f0\uace0 <a href=\"#jvm-name-support\">\uc0c8\ub85c\uc6b4 \ubcc0\uacbd \ub0b4\uc6a9<\/a>\uc744 \ubc14\ub85c \ubcf4\uc2dc\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<p>\uac04\ub2e8\ud788 \ud658\uae30\ud574 \ub4dc\ub9ac\uba74, inline \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uac12\uc744 \uac10\uc2fc \ub798\ud37c\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\ninline class Color(val rgb: Int)\n<\/pre>\n<p>inline \ud074\ub798\uc2a4\ub294 \uae30\ubcf8 \uc720\ud615(primitive type)\uc774\ub098 \ucc38\uc870 \uc720\ud615(\uc608: <code>String<\/code>)\uc758 \ub798\ud37c\uac00 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ucef4\ud30c\uc77c\ub7ec\ub294 \uac00\ub2a5\ud55c \uacbd\uc6b0 inline \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4(\uc774 \uc608\uc2dc\uc5d0\uc11c\ub294 <code>Color<\/code> \uc778\uc2a4\ud134\uc2a4)\ub97c \ubc14\uc774\ud2b8\ucf54\ub4dc\uc758 \uae30\ubcf8 \uc720\ud615\uc73c\ub85c \ubc14\uafc9\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nfun changeBackground(color: Color) \nval blue = Color(255)\nchangeBackground(blue)\n<\/pre>\n<p>\ub0b4\ubd80\uc801\uc73c\ub85c \ucef4\ud30c\uc77c\ub7ec\ub294 <code>Int<\/code>\ub97c \ub9e4\uac1c\ubcc0\uc218\ub85c \uc0ac\uc6a9\ud558\uc5ec \ub9f9\uae00\ub9c1\ub41c \uc774\ub984\uc744 \uac00\uc9c4 <code>changeBackground<\/code> \ud568\uc218\ub97c \uc0dd\uc131\ud558\uace0, \ud638\ucd9c \uc0ac\uc774\ud2b8\uc5d0\uc11c \ub798\ud37c\ub97c \ub9cc\ub4e4\uc9c0 \uc54a\uace0 <code>255<\/code> \uc0c1\uc218\ub97c \uc9c1\uc811 \uc804\ub2ec\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nfun changeBackground-euwHqFQ(color: Int) \nchangeBackground-euwHqFQ(255) \/\/ no extra object is allocated! \n<\/pre>\n<p>\uc774\ub984\uc744 \ub9f9\uae00\ub9c1\ud558\uba74 \ub2e4\ub978 inline \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \ud568\uc218\ub97c \uc6d0\ud65c\ud558\uac8c \uc624\ubc84\ub85c\ub4dc\ud558\uace0, inline \ud074\ub798\uc2a4\uc758 \ub0b4\ubd80 \uc81c\uc57d \uc870\uac74\uc5d0 \uc704\ubc18\ub418\ub294 Java \ucf54\ub4dc\uc758 \uc6b0\ubc1c\uc801 \ud638\ucd9c\uc744 \ubc29\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub9f9\uae00\ub9c1\ub41c \uc774\ub984\uc758 \ud568\uc218\ub97c Java\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud558\ub294 \ubc29\ubc95\uc740 <a href=\"#jvm-name-support\">\uc544\ub798<\/a>\ub97c \ucc38\uc870\ud558\uc138\uc694.<\/p>\n<p>\ub798\ud37c\uac00 \ubc14\uc774\ud2b8\ucf54\ub4dc\uc5d0\uc11c \ud56d\uc0c1 \uc81c\uac70\ub418\ub294 \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4. \uac00\ub2a5\ud55c \uacbd\uc6b0\uc5d0\ub9cc \uc81c\uac70\ub418\uba70 \uae30\ubcf8 \uc81c\uacf5\ub418\ub294 \uae30\ubcf8 \uc720\ud615\uacfc \ub9e4\uc6b0 \uc720\uc0ac\ud558\uac8c \uc791\ub3d9\ud569\ub2c8\ub2e4. <code>Color<\/code> \uc720\ud615\uc758 \ubcc0\uc218\ub97c \uc815\uc758\ud558\uac70\ub098 \ud568\uc218\uc5d0 \uc9c1\uc811 \uc804\ub2ec\ud558\uba74 \ud574\ub2f9 \ubcc0\uc218\uac00 \uae30\ubcf8 \uac12\uc73c\ub85c \ub300\uccb4\ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nval color = Color(0)        \/\/ primitive\nchangeBackground(color)     \/\/ primitive\n<\/pre>\n<p>\uc774 \uc608\uc2dc\uc5d0\uc11c <code>color<\/code> \ubcc0\uc218\ub294 \ucef4\ud30c\uc77c \uc911\uc5d0 <code>Color<\/code> \uc720\ud615\uc744 \uac16\uc9c0\ub9cc \ubc14\uc774\ud2b8\ucf54\ub4dc\uc5d0\uc11c <code>Int<\/code>\ub85c \ub300\uccb4\ub429\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub7ec\ub098 \uc774 \ubcc0\uc218\ub97c \uceec\ub809\uc158\uc5d0 \uc800\uc7a5\ud558\uac70\ub098 \uc81c\ub124\ub9ad \ud568\uc218\uc5d0 \uc804\ub2ec\ud558\uba74 <code>Color<\/code> \uc720\ud615\uc758 \uc77c\ubc18 \uac1d\uccb4\uc5d0 \ubc15\uc2f1\ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\ngenericFunc(color)         \/\/ boxed\nval list = listOf(color)   \/\/ boxed\nval first = list.first()   \/\/ unboxed back to primitive\n<\/pre>\n<p>\ubc15\uc2f1 \ubc0f \ubc15\uc2f1 \ud574\uc81c\ub294 \ucef4\ud30c\uc77c\ub7ec\uac00 \uc790\ub3d9\uc73c\ub85c \uc218\ud589\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc0ac\uc6a9\uc790\uac00 \uc2e0\uacbd \uc4f8 \ud544\uc694\ub294 \uc5c6\uc73c\ub098 \ub0b4\ubd80\uc758 \uc791\ub3d9 \uc6d0\ub9ac\ub97c \uc774\ud574\ud558\uba74 \uc720\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<h3>Java \ud638\ucd9c\uc5d0 \ub300\ud55c JVM \uc774\ub984 \ubcc0\uacbd<\/h3>\n<p><a name = \"jvm-name-support\"><\/a><\/p>\n<p>1.4.30\ubd80\ud130 Java\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d inline \ud074\ub798\uc2a4\ub97c \ub9e4\uac1c\ubcc0\uc218\ub85c \uc0bc\ub294 \ud568\uc218\uc758 JVM \uc774\ub984\uc744 \ubcc0\uacbd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c \uc774\ub7ec\ud55c \uc774\ub984\uc740 Java\uc5d0\uc11c \uc6b0\ubc1c\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\uac70\ub098 \uc624\ubc84\ub85c\ub4dc\uac00 \ucda9\ub3cc\ud558\ub294 \uac83\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud574 \ub9f9\uae00\ub9c1\ub429\ub2c8\ub2e4(\uc704 \uc608\uc2dc\uc758 <code>changeBackground-euwHqFQ<\/code> \ucc38\uc870).<\/p>\n<p><code>@JvmName<\/code>\uc73c\ub85c \ud568\uc218\uc5d0 \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ub2ec\uba74 \ubc14\uc774\ud2b8\ucf54\ub4dc\uc5d0\uc11c \uc774 \ud568\uc218\uc758 \uc774\ub984\uc744 \ubcc0\uacbd\ud558\uc5ec Java\uc5d0\uc11c \ud638\ucd9c\ud558\uace0 \uac12\uc744 \uc9c1\uc811 \uc804\ub2ec\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\n\/\/ Kotlin declarations\ninline class Timeout(val millis: Long)\n\nval Int.millis get() = Timeout(this.toLong())\nval Int.seconds get() = Timeout(this * 1000L)\n\n@JvmName(&quot;greetAfterTimeoutMillis&quot;)\nfun greetAfterTimeout(timeout: Timeout)\n\n\/\/ Kotlin usage\ngreetAfterTimeout(2.seconds)\n\n\/\/ Java usage\ngreetAfterTimeoutMillis(2000);\n<\/pre>\n<p><code>@JvmName<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc774 \ub2ec\ub9b0 \ud568\uc218\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c Kotlin\uc5d0\uc11c\ub294 \ud574\ub2f9 \ud568\uc218\ub97c Kotlin \uc774\ub984\uc73c\ub85c \ud638\ucd9c\ud569\ub2c8\ub2e4. <code>Timeout<\/code> \uc720\ud615\uc758 \uac12\ub9cc \uc778\uc218\ub85c \uc804\ub2ec\ud560 \uc218 \uc788\uace0 \ub2e8\uc704\ub97c \uc0ac\uc6a9 \uc704\uce58\uc5d0\uc11c \ubd84\uba85\ud788 \uc54c \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 Kotlin \uc0ac\uc6a9 \uc704\uce58\uc5d0\uc11c\ub294 \uc720\ud615\uc774 \uc548\uc804\ud569\ub2c8\ub2e4.<\/p>\n<p>Java\uc5d0\uc11c <code>long<\/code> \uac12\uc744 \uc9c1\uc811 \uc804\ub2ec\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774\ub807\uac8c \ud558\uba74 \uc720\ud615\uc774 \uc548\uc804\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \uae30\ubcf8\uc801\uc73c\ub85c \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc\uc5d0\uc11c <code>greetAfterTimeout(2)<\/code>\uc744 \ubcf4\uba74 2\ucd08\uc778\uc9c0, 2\ubc00\ub9ac\ucd08\uc778\uc9c0, 2\ub144\uc778\uc9c0 \ubc14\ub85c \uc54c\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc81c\uacf5\ud558\uba74 \uc774 \ud568\uc218\ub97c Java\uc5d0\uc11c \ud638\ucd9c\ud558\ub3c4\ub85d \uc758\ub3c4\ud588\ub2e4\ub294 \uac83\uc744 \uba85\uc2dc\uc801\uc73c\ub85c <em>\uac15\uc870<\/em>\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc124\uba85\uc801\uc778 \uc774\ub984\uc744 \uc0ac\uc6a9\ud558\uba74 \ud63c\ub3d9\uc744 \ud53c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. JVM \uc774\ub984\uc5d0 &#8220;Millis&#8221;\ub77c\ub294 \uc811\ubbf8\uc0ac\ub97c \ucd94\uac00\ud558\uba74 Java \uc0ac\uc6a9\uc790\uac00 \ub2e8\uc704\ub97c \uba85\ud655\ud558\uac8c \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>Init \ube14\ub85d<\/h3>\n<p><a name = \"init-blocks\"><\/a><\/p>\n<p>1.4.30\uc5d0\uc11c inline \ud074\ub798\uc2a4\uc5d0 \uc801\uc6a9\ud55c \ub610 \ub2e4\ub978 \uac1c\uc120 \uc0ac\ud56d\uc740 <code>init<\/code> \ube14\ub85d\uc5d0\uc11c \ucd08\uae30\ud654 \ub17c\ub9ac\ub97c \uc815\uc758\ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\ninline class Name(val s: String) {\n   init {\n       require(s.isNotEmpty())\n   }\n}\n<\/pre>\n<p>\uc774\uac83\uc740 \uc774\uc804\uc5d0 \uae08\uc9c0\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>inline \ud074\ub798\uc2a4\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uadf8\uc640 \uad00\ub828\ub41c <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/master\/proposals\/inline-classes.md\" target=\"_blank\" rel=\"noopener\">KEEP<\/a>, <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/whatsnew1430.html#improved-inline-classes\" target=\"_blank\" rel=\"noopener\">\ubb38\uc11c<\/a>, <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42434\" target=\"_blank\" rel=\"noopener\">\uc774\uc288<\/a> \ub17c\uc758\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>inline value \ud074\ub798\uc2a4<\/h3>\n<p><a name = \"inline-value-classes\"><\/a><\/p>\n<p>Kotlin 1.5\uc5d0\uc11c\ub294 inline \ud074\ub798\uc2a4\uc758 \uac1c\ub150\uc744 \uc548\uc815\ud654\ud558\ub294 \ub3d9\uc2dc\uc5d0 \ub354 \uc77c\ubc18\uc801\uc778 \uae30\ub2a5\uc778 value \ud074\ub798\uc2a4\uc758 \uc77c\ubd80\ub85c \ub9cc\ub4ed\ub2c8\ub2e4.<\/p>\n<p>\uc9c0\uae08\uae4c\uc9c0 &#8216;inline&#8217; \ud074\ub798\uc2a4\ub294 \ubcc4\ub3c4\uc758 \uc5b8\uc5b4 \uae30\ub2a5\uc774\uc5c8\uc73c\ub098 \uc774\uc81c \ud558\ub098\uc758 \ub9e4\uac1c\ubcc0\uc218\uac00 \uc788\ub294 value \ud074\ub798\uc2a4\uc758 \ud2b9\uc815 JVM \ucd5c\uc801\ud654 \uc694\uc18c\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4. value \ud074\ub798\uc2a4\ub294 \ub354 \uc77c\ubc18\uc801\uc778 \uac1c\ub150\uc744 \ub098\ud0c0\ub0b4\uba70 \ud5a5\ud6c4 \ub2e4\uc591\ud55c \ucd5c\uc801\ud654 \uc694\uc18c\ub97c \uc9c0\uc6d0\ud560 \uac83\uc785\ub2c8\ub2e4. \uc774\ubc88\uc5d0\ub294 inline \ud074\ub798\uc2a4\ub97c, \ub2e4\uc74c\uc5d0 Valhalla \ud504\ub85c\uc81d\ud2b8\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub418\uba74 Valhalla \uae30\ubcf8 \ud074\ub798\uc2a4\ub97c \uc9c0\uc6d0\ud560 \uc608\uc815\uc785\ub2c8\ub2e4(\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/new-language-features-preview-in-kotlin-1-4-30\/#valhalla\">\uc544\ub798<\/a> \ucc38\uc870).<\/p>\n<p>\ud604\uc7ac \uc720\uc77c\ud558\uac8c \ubcc0\uacbd\ub41c \uac83\uc740 \uad6c\ubb38\uc785\ub2c8\ub2e4. inline \ud074\ub798\uc2a4\uac00 \ucd5c\uc801\ud654\ub41c value \ud074\ub798\uc2a4\uc774\uae30 \ub54c\ubb38\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 \uc608\uc804\uacfc\ub294 \ub2e4\ub978 \ubc29\uc2dd\uc73c\ub85c \uc120\uc5b8\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\n@JvmInline\nvalue class Color(val rgb: Int)\n<\/pre>\n<p>\ud558\ub098\uc758 \uc0dd\uc131\uc790 \ub9e4\uac1c\ubcc0\uc218\ub85c value \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0 <code>@JvmInline<\/code>\uc73c\ub85c \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ucd94\uac00\ud558\uc138\uc694. Kotlin 1.5\ubd80\ud130 \uc774 \uc0c8\ub85c\uc6b4 \uad6c\ubb38\uc744 \ubaa8\ub450\uac00 \uc0ac\uc6a9\ud574 \uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4. \uc774\uc804 \uad6c\ubb38\uc778 <code>inline<\/code> \ud074\ub798\uc2a4\ub294 \ud55c\ub3d9\uc548 \uacc4\uc18d \uc791\ub3d9\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098 1.5\uc5d0\uc11c\ub294 \ubaa8\ub4e0 \uc120\uc5b8\uc744 \uc790\ub3d9\uc73c\ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\ub294 \uc635\uc158\uc774 \ud3ec\ud568\ub41c \uacbd\uace0\uac00 \ud45c\uc2dc\ub418\uba74\uc11c \ub354 \uc774\uc0c1 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ucd94\ud6c4\uc5d0\ub294 \uc624\ub958\uac00 \ud45c\uc2dc\ub418\uba70 \uc0ac\uc6a9 \uc911\uc9c0\ub429\ub2c8\ub2e4.<\/p>\n<h2>value \ud074\ub798\uc2a4<\/h2>\n<p><a name = \"value-classes\"><\/a><\/p>\n<p><code>value<\/code> \ud074\ub798\uc2a4\ub294 \ub370\uc774\ud130\uac00 \uc788\ub294 \ubd88\ubcc0 \uc5d4\ud2f0\ud2f0\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4. \ud604\uc7ac <code>value<\/code> \ud074\ub798\uc2a4\ub294 &#8216;\uc608\uc804&#8217; inline \ud074\ub798\uc2a4\uc758 \uc0ac\uc6a9 \uc0ac\ub840\ub97c \uc9c0\uc6d0\ud558\uae30 \uc704\ud574 <em>\ub2e8 \ud558\ub098<\/em>\uc758 \ud504\ub85c\ud37c\ud2f0\ub9cc \ud3ec\ud568\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ud5a5\ud6c4 Kotlin \ubc84\uc804\uc5d0\uc11c\ub294 \uc774 \uae30\ub2a5\uc744 \uc644\ubcbd\ud558\uac8c \uc9c0\uc6d0\ud558\uc5ec \uc5ec\ub7ec \ud504\ub85c\ud37c\ud2f0\ub97c \uac00\uc9c4 value \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubaa8\ub4e0 \uac12\uc740 \uc77d\uae30 \uc804\uc6a9 <code>val<\/code>\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nvalue class Point(val x: Int, val y: Int)\n<\/pre>\n<p>value \ud074\ub798\uc2a4\uc5d0\ub294 \ub3d9\uc77c\uc131(identity)\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. \uc800\uc7a5\ub41c \ub370\uc774\ud130\ub85c \uc644\uc804\ud788 \uc815\uc758\ub418\uba70 === \ub3d9\uc77c\uc131 \ud655\uc778\uc774 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. == \uc0c1\ub4f1 \uac80\uc0ac\ub294 \uae30\ubcf8 \ub370\uc774\ud130\ub97c \uc790\ub3d9\uc73c\ub85c \ube44\uad50\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub7ec\ud55c &#8216;\ub3d9\uc77c\uc131 \uc5c6\ub294&#8217; value \ud074\ub798\uc2a4\uc758 \ud2b9\uc131\uc740 \ud5a5\ud6c4 \uc911\uc694\ud55c \ucd5c\uc801\ud654\uc758 \uae30\ubc18\uc785\ub2c8\ub2e4. \ud504\ub85c\uc81d\ud2b8 Valhalla \uae30\ub2a5\uc744 JVM\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub418\uba74 \ub0b4\ubd80\uc5d0\uc11c value \ud074\ub798\uc2a4\ub97c JVM \uae30\ubcf8 \ud074\ub798\uc2a4\ub85c \uad6c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ubd88\ubcc0\uc131 \uc81c\uc57d, \uadf8\ub9ac\uace0 \uc774\uc5d0 \ub530\ub978 Valhalla \ucd5c\uc801\ud654\uc758 \uac00\ub2a5\uc131\uc73c\ub85c <code>value<\/code> \ud074\ub798\uc2a4\ub294 <code>data<\/code> \ud074\ub798\uc2a4\uc640 \ucc28\ubcc4\ud654\ub429\ub2c8\ub2e4.<\/p>\n<h3>\ud5a5\ud6c4 Valhalla \ucd5c\uc801\ud654<\/h3>\n<p><a name = \"valhalla\"><\/a><\/p>\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/8251554\" target=\"_blank\" rel=\"noopener\">\ud504\ub85c\uc81d\ud2b8 Valhalla<\/a>\ub294 Java \ubc0f JVM\uc5d0 \uc0c8\ub85c\uc6b4 \uac1c\ub150\uc778 \uae30\ubcf8 \ud074\ub798\uc2a4\ub97c \ub3c4\uc785\ud569\ub2c8\ub2e4.<\/p>\n<p>\uae30\ubcf8 \ud074\ub798\uc2a4\uc758 \uc8fc\uc694 \ubaa9\ud45c\ub294 \uc131\ub2a5 \uae30\ubcf8 \uc694\uc18c\ub97c \uc77c\ubc18 JVM \ud074\ub798\uc2a4\uc758 \uac1d\uccb4 \uc9c0\ud5a5 \uc774\uc810\uacfc \uacb0\ud569\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uae30\ubcf8 \ud074\ub798\uc2a4\ub294 \uc778\uc2a4\ud134\uc2a4\ub97c \ubcc0\uc218, \uacc4\uc0b0 \uc2a4\ud0dd\uc5d0 \uc800\uc7a5\ud558\uace0 \ud5e4\ub354\uc640 \ud3ec\uc778\ud130 \uc5c6\uc774 \uc9c1\uc811 \uc791\ub3d9\ud560 \uc218 \uc788\ub294 \ub370\uc774\ud130 \ud640\ub354\uc785\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc810\uc5d0\uc11c <code>int<\/code>, <code>long<\/code> \ub4f1\uc758 \uae30\ubcf8 \uac12\uacfc \uc720\uc0ac\ud569\ub2c8\ub2e4(Kotlin\uc5d0\uc11c \uc0ac\uc6a9\uc790\uac00 \uae30\ubcf8 \uc720\ud615\uc73c\ub85c \uc9c1\uc811 \uc791\uc5c5\ud560 \uc77c\uc774 \uc5c6\uc9c0\ub9cc \uc774 \uc720\ud615\uc740 \ucef4\ud30c\uc77c\ub7ec \ub0b4\ubd80\uc5d0\uc11c \uc0dd\uc131\ub429\ub2c8\ub2e4).<\/p>\n<p>\uae30\ubcf8 \ud074\ub798\uc2a4\uc758 \uc8fc\uc694 \uc774\uc810\uc740 \uba54\ubaa8\ub9ac\uc5d0\uc11c \uac1d\uccb4\uc758 \ubc00\ub3c4 \uc788\ub294 \ud50c\ub7ab \ub808\uc774\uc544\uc6c3\uc744 \ud5c8\uc6a9\ud55c\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \ud604\uc7ac <code>Array&lt;Point&gt;<\/code>\ub294 \ucc38\uc870 \ubc30\uc5f4\uc785\ub2c8\ub2e4. Valhalla\uac00 \uc9c0\uc6d0\ub418\uba74 <code>Point<\/code>\ub97c \uae30\ubcf8 \ud074\ub798\uc2a4(Java \uc6a9\uc5b4)\ub85c \ub610\ub294 \uae30\ubcf8 \ucd5c\uc801\ud654 \uae30\ub2a5\uc774 \uc788\ub294 value \ud074\ub798\uc2a4(Kotlin \uc6a9\uc5b4)\ub85c \uc815\uc758\ud560 \ub54c JVM\uc740 \uc774\ub97c \ucd5c\uc801\ud654\ud558\uace0 &#8216;\ud50c\ub7ab&#8217; \ub808\uc774\uc544\uc6c3\uc73c\ub85c <code>Point<\/code> \ubc30\uc5f4\uc744 \uc800\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4(\ucc38\uc870\uc758 \ubc30\uc5f4\uc774 \uc544\ub2c8\ub77c \uc218\ub9ce\uc740 <code>x<\/code> \ubc0f <code>y<\/code>\uc758 \uc9c1\uc811 \ubc30\uc5f4).<\/p>\n<p>\uc800\ud76c\ub294 \uc774\ub7ec\ud55c \uc608\uc815\ub41c JVM \ubcc0\uacbd \ub0b4\uc6a9\uc774 \uad6c\ud604\ub418\uae30\ub97c \uae30\ub300\ud558\uace0 \uc788\uc73c\uba70 Kotlin\uc774 \uadf8 \ud61c\ud0dd\uc744 \ubc1b\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4. \ub3d9\uc2dc\uc5d0 \ucee4\ubba4\ub2c8\ud2f0\uac00 <code>value<\/code> \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \uc0c8 JVM \ubc84\uc804\uc744 \uac15\uc81c\ub85c \uc0ac\uc6a9\ud558\uae30\ub97c \ubc14\ub77c\uc9c0 \uc54a\uc73c\ubbc0\ub85c \uc774\uc804 JVM \ubc84\uc804\uc5d0\uc11c\ub3c4 \uc774\ub97c \uc9c0\uc6d0\ud560 \uac83\uc785\ub2c8\ub2e4. Valhalla\ub97c \uc9c0\uc6d0\ud558\ub294 JVM\uc73c\ub85c \ucf54\ub4dc\ub97c \ucef4\ud30c\uc77c\ud560 \ub54c \ucd5c\uc2e0 JVM \ucd5c\uc801\ud654 \uae30\ub2a5\uc774 value \ud074\ub798\uc2a4\uc5d0 \ub300\ud574 \uc791\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<h3>mutating \uba54\uc11c\ub4dc<\/h3>\n<p><a name = \"mutating-methods\"><\/a><\/p>\n<p>value \ud074\ub798\uc2a4\uc758 \uae30\ub2a5\uacfc \uad00\ub828\ud558\uc5ec \uc598\uae30\ud560 \uac83\uc774 \uc544\uc9c1 \ub9ce\uc774 \ub0a8\uc558\uc2b5\ub2c8\ub2e4. value \ud074\ub798\uc2a4\ub294 &#8216;\ubd88\ubcc0&#8217; \ub370\uc774\ud130\ub97c \ub098\ud0c0\ub0b4\uae30 \ub54c\ubb38\uc5d0 <a href=\"https:\/\/docs.swift.org\/swift-book\/LanguageGuide\/Methods.html\" target=\"_blank\" rel=\"noopener\">Swift<\/a>\uc5d0\uc11c\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c mutating \uba54\uc11c\ub4dc\ub97c \uc801\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. mutating \uba54\uc11c\ub4dc\ub294 \uba64\ubc84 \ud568\uc218\ub098 \ud504\ub85c\ud37c\ud2f0 setter\uac00 \uae30\uc874 \uc778\uc2a4\ud134\uc2a4\ub97c \uc5c5\ub370\uc774\ud2b8\ud558\uc9c0 \uc54a\uace0 \uc0c8 \uc778\uc2a4\ud134\uc2a4\ub97c \ubc18\ud658\ud558\ub294 \uacbd\uc6b0\uc774\uba70, \uc8fc\uc694 \uc774\uc810\uc740 \uc775\uc219\ud55c \uad6c\ubb38\uc73c\ub85c \ub2e4\ub8f0 \uc218 \uc788\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774\ub294 \uc5b8\uc5b4\uc5d0\uc11c \uc5ec\uc804\ud788 \ud504\ub85c\ud1a0\ud0c0\uc774\ud551\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<h3>\uc790\uc138\ud55c \ub0b4\uc6a9<\/h3>\n<p><a name = \"read-more-value-classes\"><\/a><\/p>\n<p><code>@JvmInline<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc740 JVM \uc804\uc6a9\uc785\ub2c8\ub2e4. \ub2e4\ub978 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 value \ud074\ub798\uc2a4\ub97c \ub2e4\ub974\uac8c \uad6c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 Kotlin\/Native\uc5d0\uc11c\ub294 Swift \uad6c\uc870\uccb4\ub85c \uad6c\ud604\ub429\ub2c8\ub2e4.<\/p>\n<p>value \ud074\ub798\uc2a4\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \uc54c\uc544\ubcf4\ub824\uba74 <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/master\/notes\/value-classes.md\" target=\"_blank\" rel=\"noopener\">Kotlin value \ud074\ub798\uc2a4\uc5d0 \uad00\ud55c \uc124\uacc4 \ub178\ud2b8<\/a>\ub97c \ucc38\uc870\ud558\uac70\ub098 Roman Elizarov\uc758 <a href=\"https:\/\/www.youtube.com\/watch?v=0FF19HJDqMo&amp;t=26m32s\" target=\"_blank\" rel=\"noopener\">&#8220;A look in the future&#8221; \uac15\uc5f0<\/a>\uc758 \ubc1c\ucdcc \ub0b4\uc6a9\uc744 \uc2dc\uccad\ud558\uc138\uc694.<\/p>\n<h2>JVM \ub808\ucf54\ub4dc \uc9c0\uc6d0<\/h2>\n<p><a name = \"jvm-records\"><\/a><\/p>\n<p>JVM \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uc744 \uc704\ud574 \ub9c8\ub828\ub41c \ub610 \ub2e4\ub978 \uac1c\uc120 \uc0ac\ud56d\uc740 <a href=\"https:\/\/openjdk.java.net\/jeps\/395\" target=\"_blank\" rel=\"noopener\">Java \ub808\ucf54\ub4dc<\/a>\uc785\ub2c8\ub2e4. Java \ub808\ucf54\ub4dc\ub294 Kotlin <code>data<\/code> \ud074\ub798\uc2a4\uc640 \uc720\uc0ac\ud558\uba70 \uc8fc\ub85c \ub2e8\uc21c\ud55c \ub370\uc774\ud130 \ud640\ub354\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<p>Java \ub808\ucf54\ub4dc\ub294 JavaBeans \uaddc\uce59\uc744 \ub530\ub974\uc9c0 \uc54a\uc73c\uba70 \uc775\uc219\ud55c &#8216;getX()&#8217; \ubc0f &#8216;getY()&#8217; \ub300\uc2e0 &#8216;x()&#8217; \ubc0f &#8216;y()&#8217; \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>Java\uc640\uc758 \uc0c1\ud638\uc6b4\uc6a9\uc131\uc740 \ud56d\uc0c1 Kotlin\uc758 \uc6b0\uc120\uc21c\uc704\uc600\uc73c\uba70 \uc55e\uc73c\ub85c\ub3c4 \uadf8\ub7f4 \uac83\uc785\ub2c8\ub2e4. Kotlin \ucf54\ub4dc\ub294 \uc0c8 Java \ub808\ucf54\ub4dc\ub97c &#8216;\uc774\ud574&#8217;\ud558\uace0 Kotlin \ud504\ub85c\ud37c\ud2f0\uac00 \uc788\ub294 \ud074\ub798\uc2a4\ub85c \uac04\uc8fc\ud558\uba70, JavaBeans \uaddc\uce59\uc744 \ub530\ub974\ub294 \uc77c\ubc18 Java \ud074\ub798\uc2a4\uc5d0\uc11c\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c \uc791\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\n\/\/ Java\nrecord Point(int x, int y) { }\n\/\/ Kotlin\nfun foo(point: Point) {\n    point.x \/\/ seen as property\n    point.x() \/\/ also works\n}\n<\/pre>\n<p>\uc0c1\ud638\uc6b4\uc6a9\uc131\uc744 \uc8fc\uc694 \ubaa9\uc801\uc73c\ub85c, <code>data<\/code> \ud074\ub798\uc2a4\uc5d0 @JvmRecord<\/code>\ub97c \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \ucd94\uac00\ud558\uc5ec \uc0c8 JVM \ub808\ucf54\ub4dc \uba54\uc11c\ub4dc\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\n@JvmRecord\ndata class Point(val x: Int, val y: Int)\n<\/pre>\n<p><code>@JvmRecord<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc740 \ucef4\ud30c\uc77c\ub7ec\uac00 \ud45c\uc900 <code>getX()<\/code> \ubc0f <code>getY()<\/code> \uba54\uc11c\ub4dc \ub300\uc2e0 <code>x()<\/code> and <code>y()<\/code> \uba54\uc11c\ub4dc\ub97c \uc0dd\uc131\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4. \uc774 \uc5b4\ub178\ud14c\uc774\uc158\uc740 Java\uc5d0\uc11c Kotlin\uc73c\ub85c \ubcc0\ud658\ud560 \ub54c \ud074\ub798\uc2a4\uc758 API\ub97c \ubcf4\uc874\ud558\uae30 \uc704\ud574\uc11c\ub9cc \uc0ac\uc6a9\ud558\uba74 \ub420 \uac83\uc785\ub2c8\ub2e4. \ub2e4\ub978 \ubaa8\ub4e0 \uc0ac\uc6a9 \uc0ac\ub840\uc5d0\uc11c\ub294 Kotlin\uc758 \uc775\uc219\ud55c <code>data<\/code> \ud074\ub798\uc2a4\ub97c \ubb38\uc81c \uc5c6\uc774 \ub300\uc2e0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uc5b4\ub178\ud14c\uc774\uc158\uc740 Kotlin \ucf54\ub4dc\ub97c JVM \ubc84\uc804 15 \uc774\uc0c1\uc73c\ub85c \ucef4\ud30c\uc77c\ud558\ub294 \uacbd\uc6b0\uc5d0\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uadf8\uc640 \uad00\ub828\ub41c <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/master\/proposals\/jvm-records.md\" target=\"_blank\" rel=\"noopener\">KEEP<\/a>, <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/whatsnew1430.html#jvm-records-support\" target=\"_blank\" rel=\"noopener\">\ubb38\uc11c<\/a>, <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42430\" target=\"_blank\" rel=\"noopener\">\uc774\uc288<\/a> \ub17c\uc758\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>sealed \uc778\ud130\ud398\uc774\uc2a4 \ubc0f sealed \ud074\ub798\uc2a4 \uac1c\uc120 \uc0ac\ud56d<\/h2>\n<p><a name = \"sealed-interfaces\"><\/a><\/p>\n<p>\ud074\ub798\uc2a4\ub97c sealed\ub85c \ub9cc\ub4e4\uba74 \uacc4\uce35 \uad6c\uc870\ub97c \uc815\uc758\ub41c \ud558\uc704 \ud074\ub798\uc2a4\ub85c \uc81c\ud55c\ud558\uc5ec <code>when<\/code> \ube0c\ub79c\uce58\uc5d0\uc11c \uc5c4\uaca9\ud558\uac8c \uac80\uc0ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Kotlin 1.4\uc5d0\uc11c sealed \ud074\ub798\uc2a4 \uacc4\uce35 \uad6c\uc870\uc5d0\ub294 \ub450 \uac00\uc9c0 \uc81c\uc57d \uc870\uac74\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uccab\uc9f8, \ucd5c\uc0c1\uc704 \ud074\ub798\uc2a4\ub294 sealed \uc778\ud130\ud398\uc774\uc2a4\uac00 \ub420 \uc218 \uc5c6\uc73c\uba70 \ud074\ub798\uc2a4\uc5ec\uc57c \ud569\ub2c8\ub2e4. \ub458\uc9f8, \ubaa8\ub4e0 \ud558\uc704 \ud074\ub798\uc2a4\ub294 \ub3d9\uc77c\ud55c \ud30c\uc77c\uc5d0 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>Kotlin 1.5\uc5d0\uc11c\ub294 \ub450 \uac00\uc9c0 \uc81c\uc57d \uc870\uac74\uc774 \ubaa8\ub450 \uc81c\uac70\ub418\uc5b4 \uc774\uc81c <em>\uc778\ud130\ud398\uc774\uc2a4<\/em>\ub97c sealed\ub85c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc704 \ud074\ub798\uc2a4(sealed \ud074\ub798\uc2a4 \ubc0f sealed \uc778\ud130\ud398\uc774\uc2a4 \ubaa8\ub450)\ub294 \uc0c1\uc704 \ud074\ub798\uc2a4\uc640 \ub3d9\uc77c\ud55c \ucef4\ud30c\uc77c \uc720\ub2db \ubc0f \ub3d9\uc77c\ud55c \ud328\ud0a4\uc9c0\uc5d0 \uc788\uc5b4\uc57c \ud558\uc9c0\ub9cc \uc774\uc81c <em>\ub2e4\ub978<\/em> \ud30c\uc77c\uc5d0 \uc788\uc5b4\ub3c4 \ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nsealed interface Expr\ndata class Const(val number: Double) : Expr\ndata class Sum(val e1: Expr, val e2: Expr) : Expr\nobject NotANumber : Expr\n\nfun eval(expr: Expr): Double = when(expr) {\n    is Const -&gt; expr.number\n    is Sum -&gt; eval(expr.e1) + eval(expr.e2)\n    NotANumber -&gt; Double.NaN\n}\n<\/pre>\n<p>sealed \ud074\ub798\uc2a4 \ubc0f \uc778\ud130\ud398\uc774\uc2a4\ub294 \ucd94\uc0c1 \ub370\uc774\ud130 \ud615\uc2dd(ADT) \uacc4\uce35 \uad6c\uc870\ub97c \uc815\uc758\ud558\ub294 \ub370 \uc720\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>sealed \uc778\ud130\ud398\uc774\uc2a4\ub85c \uc6d0\ud65c\ud558\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\ub294 \ub610 \ub2e4\ub978 \uc8fc\uc694 \uc0ac\uc6a9 \uc0ac\ub840\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc678\ubd80\uc5d0\uc11c \uc0c1\uc18d\uacfc \uad6c\ud604\uc744 \uc704\ud574 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ub2eb\uc744 \ub54c\uc785\ub2c8\ub2e4. \uc778\ud130\ud398\uc774\uc2a4\ub97c sealed\ub85c \uc815\uc758\ud558\uba74 \ud574\ub2f9 \uad6c\ud604\uc774 \ub3d9\uc77c\ud55c \ucef4\ud30c\uc77c \uc720\ub2db \ubc0f \ud328\ud0a4\uc9c0\ub85c \uc81c\ud55c\ub418\ubbc0\ub85c \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uacbd\uc6b0 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc678\ubd80\uc5d0\uc11c \uad6c\ud604\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc608\ub97c \ub4e4\uc5b4, <code>kotlinx.coroutines<\/code> \ud328\ud0a4\uc9c0\uc758 <code>Job<\/code> \uc778\ud130\ud398\uc774\uc2a4\ub294 <code>kotlinx.coroutines<\/code> \ub77c\uc774\ube0c\ub7ec\ub9ac \ub0b4\uc5d0\uc11c\ub9cc \uad6c\ud604\ud558\ub3c4\ub85d \uc758\ub3c4\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc758\ub3c4\ub294 \ud574\ub2f9 \uc778\ud130\ud398\uc774\uc2a4\ub97c <code>sealed<\/code>\ub85c \ub9cc\ub4e4\uba74 \uba85\ud655\ud574\uc9d1\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\npackage kotlinx.coroutines\nsealed interface Job { ... }\n<\/pre>\n<p>\ub77c\uc774\ube0c\ub7ec\ub9ac \uc0ac\uc6a9\uc790\ub294 \ub354 \uc774\uc0c1 \uc790\uc2e0\uc758 \uace0\uc720\ud55c <code>Job<\/code> \ud558\uc704 \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ud56d\uc0c1 &#8216;\ubb35\uc2dc\uc801&#8217;\uc73c\ub85c \uc81c\ud55c\ub418\uc5b4 \uc788\uc5c8\uc9c0\ub9cc sealed \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\uba74 \ucef4\ud30c\uc77c\ub7ec\uac00 \uc774\ub97c \uacf5\uc2dd\uc801\uc73c\ub85c \uae08\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\ud5a5\ud6c4 JVM \uc9c0\uc6d0 \uc0ac\uc6a9<\/h3>\n<p><a name = \"new-sealed-jvm-support\"><\/a><\/p>\n<p>sealed \ud074\ub798\uc2a4\uc758 \ud14c\uc2a4\ud2b8 \ubc84\uc804 \uc9c0\uc6d0\uc740 Java 15 \ubc0f JVM\uc5d0 \ub3c4\uc785\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc55e\uc73c\ub85c \uc0ac\uc6a9\uc790\uac00 Kotlin \ucf54\ub4dc\ub97c \ucd5c\uc2e0 JVM\uc73c\ub85c \ucef4\ud30c\uc77c\ud558\ub294 \uacbd\uc6b0(\uc774 \uae30\ub2a5\uc774 \uc548\uc815\ud654\ub418\uba74 JVM 17 \uc774\uc0c1\uc77c \uac00\ub2a5\uc131\uc774 \ub192\uc74c) sealed \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c \uc548\uc815\ub41c JVM \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud560 \uacc4\ud68d\uc785\ub2c8\ub2e4.<\/p>\n<p>Java\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc9c0\uc815\ub41c sealed \ud074\ub798\uc2a4 \ub610\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc758 \ubaa8\ub4e0 \ud558\uc704 \ud074\ub798\uc2a4\ub97c \uba85\uc2dc\uc801\uc73c\ub85c \ub098\uc5f4\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\n\/\/ Java\npublic sealed interface Expression\n    permits Const, Sum, NotANumber { ... }\n<\/pre>\n<p>\uc774 \uc815\ubcf4\ub294 \uc0c8\ub85c\uc6b4 <code>PermittedSubclasses<\/code> \uc18d\uc131\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud074\ub798\uc2a4 \ud30c\uc77c\uc5d0 \uc800\uc7a5\ub429\ub2c8\ub2e4. JVM\uc740 \ub7f0\ud0c0\uc784 \uc2dc sealed \ud074\ub798\uc2a4\ub97c \uc778\uc2dd\ud558\uace0 \uc774 \ud074\ub798\uc2a4\uac00 \uc2b9\uc778\ub418\uc9c0 \uc54a\uc740 \ud558\uc704 \ud074\ub798\uc2a4\uc5d0 \uc758\ud574 \ud655\uc7a5\ub418\uc9c0 \uc54a\ub3c4\ub85d \ud569\ub2c8\ub2e4.<\/p>\n<p>\ud5a5\ud6c4 Kotlin\uc744 \ucd5c\uc2e0 JVM\uc73c\ub85c \ucef4\ud30c\uc77c\ud560 \ub54c sealed \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c \uc774 \uc0c8\ub85c\uc6b4 JVM \uc9c0\uc6d0\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub0b4\ubd80\uc801\uc73c\ub85c \ucef4\ud30c\uc77c\ub7ec\ub294 JVM \uc9c0\uc6d0 \ubc0f \ucd94\uac00 \ub7f0\ud0c0\uc784 \uac80\uc0ac\uac00 \uc788\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 \ubc14\uc774\ud2b8\ucf54\ub4dc\uc5d0\uc11c \ud5c8\uc6a9\ub41c \ud558\uc704 \ud074\ub798\uc2a4 \ubaa9\ub85d\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\n\/\/ for JVM 17 or later\nExpr::class.java.permittedSubclasses \/\/ [Const, Sum, NotANumber]\n<\/pre>\n<p>Kotlin\uc5d0\uc11c\ub294 \ud558\uc704 \ud074\ub798\uc2a4 \ubaa9\ub85d\uc744 \uc9c0\uc815\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ucef4\ud30c\uc77c\ub7ec\uac00 \ub3d9\uc77c\ud55c \ud328\ud0a4\uc9c0\uc5d0 \uc120\uc5b8\ub41c \ud558\uc704 \ud074\ub798\uc2a4\ub97c \uae30\ubc18\uc73c\ub85c \ubaa9\ub85d\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc0c1\uc704 \ud074\ub798\uc2a4 \ub610\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc758 \ud558\uc704 \ud074\ub798\uc2a4\ub97c \uba85\uc2dc\uc801\uc73c\ub85c \uc9c0\uc815\ud558\ub294 \uae30\ub2a5\uc740 \ub098\uc911\uc5d0 \uc120\ud0dd\uc801 \uc0ac\uc591\uc73c\ub85c \ucd94\uac00\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc9c0\uae08\uc740 \ud544\uc694\ud558\uc9c0 \uc54a\ub2e4\ub294 \ud310\ub2e8\uc774\uc9c0\ub9cc \uc5ec\ub7ec\ubd84\uc758 \uc0ac\uc6a9 \uc0ac\ub840\uc640 \uc774 \uae30\ub2a5\uc758 \ud544\uc694\uc131\uc5d0 \ub300\ud574 \uc758\uacac\uc744 \uc8fc\uc2dc\uba74 \uae30\uaebc\uc774 \uacbd\uccad\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc804 JVM \ubc84\uc804\uc758 \uacbd\uc6b0 \uc774\ub860\uc801\uc73c\ub85c\ub294 Java \ud558\uc704 \ud074\ub798\uc2a4\ub97c Kotlin sealed \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \uc815\uc758\ud560 \uc218 \uc788\uc9c0\ub9cc \uadf8\ub807\uac8c \ud558\uc9c0 \uc54a\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. \ud5c8\uc6a9\ub41c \ud558\uc704 \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c JVM \uc9c0\uc6d0\uc740 \uc544\uc9c1 \uc81c\uacf5\ub418\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uc774 \uc81c\uc57d \uc870\uac74\uc740 Kotlin \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c\ub9cc \uc801\uc6a9\ub429\ub2c8\ub2e4. \uc2e4\uc218\ub85c \uc774 \uc791\uc5c5\uc774 \uc218\ud589\ub418\ub294 \uc77c\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud574 IDE\uc5d0 \uacbd\uace0\ub3c4 \ucd94\uac00\ud560 \uc608\uc815\uc785\ub2c8\ub2e4. \ud5a5\ud6c4 Java\uc5d0\uc11c &#8216;\uc2b9\uc778\ub418\uc9c0 \uc54a\uc740&#8217; \ud558\uc704 \ud074\ub798\uc2a4\uac00 \uc5c6\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 \ucd5c\uc2e0 JVM \ubc84\uc804\uc5d0 \uc0c8 \uba54\ucee4\ub2c8\uc998\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<p>sealed \uc778\ud130\ud398\uc774\uc2a4 \ubc0f \uc644\ud654\ub41c sealed \ud074\ub798\uc2a4 \uc81c\ud55c\uc5d0 \uad00\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uadf8\uc640 \uad00\ub828\ub41c <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/master\/proposals\/sealed-interface-freedom.md\" target=\"_blank\" rel=\"noopener\">KEEP<\/a>, <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/whatsnew1430.html#sealed-interfaces\" target=\"_blank\" rel=\"noopener\">\ubb38\uc11c<\/a>, <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42433\" target=\"_blank\" rel=\"noopener\">\uc774\uc288<\/a> \ub17c\uc758\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\uc0c8 \uae30\ub2a5 \uc0ac\uc6a9 \ubc29\ubc95<\/h2>\n<p><a name = \"how-to-try\"><\/a><\/p>\n<p>\uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 Kotlin 1.4.30\uc744 \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4. \uc0c8 \uae30\ub2a5\uc744 \ud65c\uc131\ud654\ud558\ub824\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc5b8\uc5b4 <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/compiler-reference.html#-language-version-version\" target=\"_blank\" rel=\"noopener\">\ubc84\uc804<\/a>\uc744 1.5\ub85c \uc9c0\uc815\ud558\uc138\uc694.<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\ncompileKotlin {\n    kotlinOptions {\n        languageVersion = &quot;1.5&quot;\n        apiVersion = &quot;1.5&quot;\n    }\n}\n<\/pre>\n<p>JVM \ub808\ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud558\ub824\uba74 \ucd94\uac00\ub85c jvmTarget 15\ub97c \uc0ac\uc6a9\ud558\uace0 JVM \ud14c\uc2a4\ud2b8 \ubc84\uc804 \uae30\ub2a5\uc744 \ud65c\uc131\ud654\ud574\uc57c \ud569\ub2c8\ub2e4. <code>-language-version 1.5<\/code>\uc640 <code>-Xjvm-enable-preview<\/code> \ucef4\ud30c\uc77c\ub7ec \uc635\uc158\uc744 \ucd94\uac00\ud558\uc138\uc694.<\/p>\n<h3>\uc0ac\uc804 \ub9b4\ub9ac\uc2a4 \ub178\ud2b8<\/h3>\n<p>\uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc740 \uc2e4\ud5d8\uc801\uc774\uba70 1.5 \uc5b8\uc5b4 \ubc84\uc804 \uc9c0\uc6d0\uc740 \uc0ac\uc804 \ub9b4\ub9ac\uc2a4 \uc0c1\ud0dc\uc785\ub2c8\ub2e4. Kotlin 1.4.30 \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c \uc5b8\uc5b4 \ubc84\uc804\uc744 1.5\ub85c \uc124\uc815\ud558\uba74 1.5-M0 \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc744 \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4. \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 \ud6c4\uc18d \ub9b4\ub9ac\uc2a4\uc5d0\uc11c \ubcc0\uacbd\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucd5c\uc885 Kotlin 1.5-RC\uc5d0 \ub3c4\ub2ec\ud558\uba74 \uc0ac\uc804 \ub9b4\ub9ac\uc2a4 \ubc84\uc804\uc5d0\uc11c \uc0dd\uc131\ub41c \ubaa8\ub4e0 \ubc14\uc774\ub108\ub9ac\uac00 \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c \uc0ac\uc6a9 \uae08\uc9c0\ub418\uba70 1.5-Mx\ub85c \ucef4\ud30c\uc77c\ub41c \ubaa8\ub4e0 \ud56d\ubaa9\uc744 \ub2e4\uc2dc \ucef4\ud30c\uc77c\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<h3>\uc758\uacac\uc744 \uacf5\uc720\ud574 \uc8fc\uc138\uc694<\/h3>\n<p>\uc774 \uae00\uc5d0\uc11c \uc124\uba85\ud55c \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud574\ubcf4\uace0 \uc758\uacac\uc744 \uacf5\uc720\ud574\uc8fc\uc138\uc694. KEEP\uc5d0\uc11c \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uace0 YouTrack\uc5d0\uc11c \ub17c\uc758\uc5d0 \ucc38\uc5ec\ud560 \uc218 \uc788\uc73c\uba70 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud558\uba74 \uc0c8\ub85c \ubcf4\uace0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc774 \ud504\ub85c\uc81d\ud2b8\uc758 \uc0ac\uc6a9 \uc0ac\ub840\ub97c \uc5bc\ub9c8\ub098 \uc798 \ucc98\ub9ac\ud558\ub294\uc9c0 \uc5ec\ub7ec\ubd84\uc758 \uacb0\uacfc\ub97c \uacf5\uc720\ud574 \uc8fc\uc138\uc694.<\/p>\n<p>\ucd94\uac00 \uc77d\uc744\uac70\ub9ac \ubc0f \ub17c\uc758:<\/p>\n<ul>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/reference\/whatsnew1430.html\" target=\"_blank\" rel=\"noopener\">&#8220;\uc0c8\ub85c\uc6b4 \uae30\ub2a5&#8221; \ubb38\uc11c \ud398\uc774\uc9c0<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/master\/proposals\/inline-classes.md\" target=\"_blank\" rel=\"noopener\">inline \ud074\ub798\uc2a4 KEEP<\/a>, \ub17c\uc758: <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42434\" target=\"_blank\" rel=\"noopener\">KT-42434<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/master\/notes\/value-classes.md\" target=\"_blank\" rel=\"noopener\">value \ud074\ub798\uc2a4 \uc124\uacc4 \ubb38\uc11c<\/a>, <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/issues\/237\" target=\"_blank\" rel=\"noopener\">KEEP<\/a>\uc5d0\uc11c\uc758 \ub17c\uc758<\/li>\n<li><a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/master\/proposals\/jvm-records.md\" target=\"_blank\" rel=\"noopener\">JVM \ub808\ucf54\ub4dc KEEP<\/a>, \ub17c\uc758: <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42430\" target=\"_blank\" rel=\"noopener\">KT-42430<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/master\/proposals\/sealed-interface-freedom.md\" target=\"_blank\" rel=\"noopener\">sealed \uc778\ud130\ud398\uc774\uc2a4 \ubc0f sealed \ud074\ub798\uc2a4 KEEP<\/a>, \ub17c\uc758: <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42433\" target=\"_blank\" rel=\"noopener\">KT-42433<\/a><\/li>\n<\/ul>\n<p><em>\uc774 \uac8c\uc2dc\ubb3c\uc740 <a href=\"https:\/\/blog.jetbrains.com\/author\/svetlana-isakova\/\">Svetlana Isakova<\/a>\uac00 \uc791\uc131\ud55c <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/new-language-features-preview-in-kotlin-1-4-30\/\">New Language Features Preview in Kotlin 1.4.30<\/a>\ub97c \ubc88\uc5ed\ud55c \uae00\uc785\ub2c8\ub2e4.<\/em><\/p>\n","protected":false},"author":964,"featured_media":113699,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/kotlin\/118499"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/users\/964"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/comments?post=118499"}],"version-history":[{"count":2,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/kotlin\/118499\/revisions"}],"predecessor-version":[{"id":118810,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/kotlin\/118499\/revisions\/118810"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/113699"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=118499"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=118499"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=118499"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=118499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}