{"id":457640,"date":"2024-02-29T18:58:33","date_gmt":"2024-02-29T17:58:33","guid":{"rendered":"https:\/\/blog.jetbrains.com\/kotlin\/2024\/02\/compose-multiplatform-1-6-0-release\/"},"modified":"2024-03-20T04:49:06","modified_gmt":"2024-03-20T03:49:06","slug":"compose-multiplatform-1-6-0-release","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/ko\/kotlin\/2024\/02\/compose-multiplatform-1-6-0-release\/","title":{"rendered":"Compose Multiplatform 1.6.0 \u2013 \ub9ac\uc18c\uc2a4, UI \ud14c\uc2a4\ud2b8, iOS \uc811\uadfc\uc131 \ubc0f Preview \uc5b4\ub178\ud14c\uc774\uc158"},"content":{"rendered":"<p>Compose Multiplatform\uc740 \uac1c\ubc1c\uc790\uac00 \ub2e4\uc591\ud55c \ud50c\ub7ab\ud3fc\uc5d0\uc11c UI \uad6c\ud604\uc744 \uacf5\uc720\ud560 \uc218 \uc788\ub3c4\ub85d JetBrains\uc5d0\uc11c \ube4c\ub4dc\ud55c \uc120\uc5b8\uc801 UI \ud504\ub808\uc784\uc6cc\ud06c\uc785\ub2c8\ub2e4. 1.6.0 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c\ub294 \ucd5c\uc2e0 Kotlin \ubc84\uc804\uacfc\uc758 \ud638\ud658\uc131 \ubc0f Google\uc758 \ucd5c\uc2e0 <a href=\"https:\/\/developer.android.com\/jetpack\/compose\" data-type=\"link\" data-id=\"https:\/\/developer.android.com\/jetpack\/compose\" target=\"_blank\" rel=\"noreferrer noopener\">Jetpack Compose \uc5c5\ub370\uc774\ud2b8<\/a> \ubcc0\uacbd \uc0ac\ud56d\uacfc \ub354\ubd88\uc5b4 \uc5ec\ub7ec \uac00\uc9c0 \uac15\ub825\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p align=\"center\"><a class=\"ek-link jb-download-button\" title=\"Compose Multiplatform \uc2dc\uc791\ud558\uae30\" href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/compose-multiplatform-getting-started.html?utm_source=kotlinblog&#038;utm_medium=cta&#038;utm_campaign=compose-1.6.0\" target=\"_blank\" rel=\"noopener\">Compose Multiplatform \uc2dc\uc791\ud558\uae30<\/a><\/p>\n<p>\uc774\ubc88 Compose Multiplatform \ub9b4\ub9ac\uc2a4\uc758 \ud558\uc774\ub77c\uc774\ud2b8:<\/p>\n<ul>\n<li>\ub9ac\uc18c\uc2a4 \uad00\ub9ac \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uac1c\uc120\ud588\uc2b5\ub2c8\ub2e4.<\/li>\n<li>UI \ud14c\uc2a4\ud2b8 API\ub97c \ub3c4\uc785\ud588\uc2b5\ub2c8\ub2e4.<\/li>\n<li>iOS \uc811\uadfc\uc131 \uc9c0\uc6d0\uc744 \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\ub2e4\uc591\ud55c \uae30\ud0c0 \uae30\ub2a5\uacfc \uac1c\uc120 \uc0ac\ud56d\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>\uc8fc\uc694 \ubcc0\uacbd \uc0ac\ud56d\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc740 <a href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/whats-new-compose-1-6-0.html\" target=\"_blank\" rel=\"noreferrer noopener\">Compose Multiplatform 1.6.0\uc758 \uc0c8\ub85c\uc6b4 \uae30\ub2a5<\/a> \ud398\uc774\uc9c0\ub97c \ucc38\uc870\ud558\uac70\ub098 <a href=\"https:\/\/github.com\/JetBrains\/compose-multiplatform\/releases\/tag\/v1.6.0\" data-type=\"link\" data-id=\"https:\/\/github.com\/JetBrains\/compose-multiplatform\/releases\/tag\/v1.6.0\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub\uc758 \ub9b4\ub9ac\uc2a4 \ub178\ud2b8<\/a>\ub97c \ud655\uc778\ud558\uc138\uc694.<\/p>\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\">\n<h2>\ubaa9\ucc28<\/h2>\n<nav>\n<ul>\n<li class=\"\"><a href=\"#common-resources-api\">\uacf5\ud1b5 \ub9ac\uc18c\uc2a4 API<\/a><\/li>\n<li class=\"\"><a href=\"#common-api-for-ui-testing\">UI \ud14c\uc2a4\ud2b8\ub97c \uc704\ud55c \uacf5\ud1b5 API<\/a><\/li>\n<li class=\"\"><a href=\"#i-os-accessibility-support\">iOS \uc811\uadfc\uc131 \uc9c0\uc6d0<\/a><\/li>\n<li class=\"\"><a href=\"#preview-annotation-for-fleet\">Fleet\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 @Preview \uc5b4\ub178\ud14c\uc774\uc158<\/a><\/li>\n<li class=\"\"><a href=\"#separate-platform-views-for-popups-dialogs-and-dropdown-menus\">\ud31d\uc5c5, \ub300\ud654\uc0c1\uc790 \ubc0f \ub4dc\ub86d\ub2e4\uc6b4 \uba54\ub274\uc5d0 \ub300\ud55c \ubcc4\ub3c4\uc758 \ud50c\ub7ab\ud3fc \ubdf0<\/a><\/li>\n<\/ul>\n<\/nav>\n<\/div>\n<h2 class=\"wp-block-heading\" id=\"common-resources-api\">\uacf5\ud1b5 \ub9ac\uc18c\uc2a4 API<\/h2>\n<p>Compose Multiplatform 1.6.0\uc5d0\uc11c \uac00\uc7a5 \uae30\ub300\ub418\uc5c8\ub358 \uc8fc\ub41c \ubcc0\ud654\ub294 \uacf5\ud1b5 Kotlin \ucf54\ub4dc\uc5d0\uc11c \ub9ac\uc18c\uc2a4\ub97c \uacf5\uc720\ud558\uace0 \uc561\uc138\uc2a4\ud558\uae30 \uc704\ud55c API\uc758 \uac1c\uc120\uc785\ub2c8\ub2e4. \uc774\uc81c \uc774 API\ub97c \uc0ac\uc6a9\ud558\uba74 Compose Multiplatform \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \ub354 \ub9ce\uc740 \uc720\ud615\uc758 \ub9ac\uc18c\uc2a4\ub97c \ud3ec\ud568\ud558\uace0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub7ec\ud55c \ub9ac\uc18c\uc2a4\ub294 <code>commonMain<\/code> \uc18c\uc2a4 \uc9d1\ud569\uc758 \uc77c\ubd80\ub85c \uc5ec\ub7ec \ub514\ub809\ud130\ub9ac\uc5d0 \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li><code>composeResources\/drawable<\/code>\uc5d0\ub294 \uc774\ubbf8\uc9c0\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li><code>composeResources\/font<\/code>\uc5d0\ub294 \uae00\uaf34\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li><code>composeResources\/values<\/code>\uc5d0\ub294 \ubb38\uc790\uc5f4\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4(<code>strings.xml<\/code> \ud615\uc2dd).<\/li>\n<li><code>composeResources\/files<\/code>\uc5d0\ub294 \ub2e4\ub978 \ud30c\uc77c\ub4e4\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>Compose Multiplatform\uc740 \uc774\ub7ec\ud55c \ubaa8\ub4e0 \ub9ac\uc18c\uc2a4 \uc720\ud615(<code>files<\/code> \ub514\ub809\ud130\ub9ac \uc81c\uc678)\uc5d0 \ub300\ud574 \ud0c0\uc785 \uc548\uc804 \uc811\uadfc\uc790\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 <code>composeResources\/drawable<\/code> \ub514\ub809\ud130\ub9ac\uc5d0 \ubca1\ud130 \uc774\ubbf8\uc9c0 <code>compose-multiplatform.xml<\/code>\uc744 \ub193\uc740 \ud6c4, \uc0dd\uc131\ub41c <code>Res<\/code> \uac1d\uccb4\ub97c \uc0ac\uc6a9\ud558\uc5ec Compose Multiplatform \ucf54\ub4dc\uc5d0\uc11c \ud574\ub2f9 \uc774\ubbf8\uc9c0\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nimport androidx.compose.foundation.Image\nimport androidx.compose.runtime.Composable\nimport kotlinproject.composeapp.generated.resources.*\nimport org.jetbrains.compose.resources.ExperimentalResourceApi\nimport org.jetbrains.compose.resources.painterResource\n\n@OptIn(ExperimentalResourceApi::class)\n@Composable\nfun Logo() {\n    Image(\n        painterResource(Res.drawable.compose_multiplatform),\n        contentDescription = &quot;CMP Logo&quot;\n    )\n}\n<\/pre>\n\n\n<p>\ub610\ud55c \uc0c8\ub85c\uc6b4 \ub9ac\uc18c\uc2a4 API\ub97c \uc0ac\uc6a9\ud558\uba74 \ub85c\ucf00\uc77c, \ud654\uba74 \ubc00\ub3c4 \ub610\ub294 \ud14c\ub9c8\ub97c \ube44\ub86f\ud574 \ub2e4\uc591\ud55c \uc0ac\uc6a9 \uc0ac\ub840\uc5d0 \ub3d9\uc77c\ud55c \ub9ac\uc18c\uc2a4\uc758 \ubcc0\ud615 \ud615\ud0dc\ub97c \uc81c\uacf5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud14d\uc2a4\ud2b8\ub97c \ud604\uc9c0\ud654\ud558\uac70\ub098, \ub2e4\ud06c \ubaa8\ub4dc\uc5d0\uc11c \uc544\uc774\ucf58 \uc0c9\uc0c1\uc744 \ubcc0\uacbd\ud558\uac70\ub098, \ud654\uba74 \ud574\uc0c1\ub3c4\uc5d0 \ub530\ub77c \ub300\uccb4 \uc774\ubbf8\uc9c0\ub97c \uc81c\uacf5\ud558\ub294 \ubaa8\ub4e0 \uacbd\uc6b0\uc5d0 \ub514\ub809\ud130\ub9ac \uc774\ub984\uc5d0 \ud55c\uc815\uc790\ub97c \ucd94\uac00\ud558\uc5ec \uc774\ub7ec\ud55c \uc81c\uc57d \uc870\uac74\uc744 \ud45c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub9ac\uc18c\uc2a4 \ud55c\uc815\uc790\ub97c \uc790\uc138\ud788 \uc0b4\ud3b4\ubcf4\uace0 Compose Multiplatform 1.6.0\uc758 \uc0c8\ub85c\uc6b4 \ub9ac\uc18c\uc2a4 API\ub97c \ubcf4\ub2e4 \uc2ec\uce35\uc801\uc73c\ub85c \uac1c\uad04\ud558\ub824\uba74 <a href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/compose-images-resources.html\" target=\"_blank\" rel=\"noreferrer noopener\">\uacf5\uc2dd \ubb38\uc11c<\/a>\ub97c \uc0b4\ud3b4\ubcf4\uc138\uc694.<\/p>\n<h2 class=\"wp-block-heading\" id=\"common-api-for-ui-testing\">UI \ud14c\uc2a4\ud2b8\ub97c \uc704\ud55c \uacf5\ud1b5 API<\/h2>\n<p>UI \ud14c\uc2a4\ud2b8\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc608\uc0c1\ub300\ub85c \uc791\ub3d9\ud558\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ub370 \ub3c4\uc6c0\uc744 \uc90d\ub2c8\ub2e4. Compose Multiplatform 1.6.0\uc5d0\uc11c\ub294 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \ub2e4\uc591\ud55c \ud50c\ub7ab\ud3fc\uc5d0\uc11c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4 \ub3d9\uc791\uc744 \uac80\uc99d\ud558\ub294 Compose Multiplatform\uc6a9 \uacf5\ud1b5 UI \ud14c\uc2a4\ud2b8\ub97c \uc791\uc131\ud560 \uc218 \uc788\ub3c4\ub85d \uc2e4\ud5d8\uc801 API\ub97c \ub3c4\uc785\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc608\ub97c \ub4e4\uc5b4, \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uad6c\uc131 \uc694\uc18c\uac00 \uc801\uc808\ud55c \uc811\ub450\uc0ac\uc640 \ud568\uaed8 \uc815\ubcf4 \ubb38\uc790\uc5f4\uc744 \uc62c\ubc14\ub974\uac8c \ud45c\uc2dc\ud558\ub294\uc9c0 \ud655\uc778\ud574\uc57c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\n@Composable\nfun MyInfoComposable(info: String, modifier: Modifier) {\n    Text(modifier = modifier, text = &quot;[IFNO] $info&quot;)\n}\n<\/pre>\n\n\n<p>\ucd5c\uc2e0 \ubc84\uc804\uc758 Compose Multiplatform\uc5d0\uc11c\ub294 \uc774\uc81c UI \ud14c\uc2a4\ud2b8\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub80c\ub354\ub9c1 \uc2dc \uad6c\uc131 \uc694\uc18c\uac00 \uc2e4\uc81c\ub85c \ud14d\uc2a4\ud2b8 \uc811\ub450\uc0ac\ub97c \uc62c\ubc14\ub974\uac8c \uc9c0\uc815\ud558\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574 <a href=\"https:\/\/developer.android.com\/jetpack\/compose\/testing\" target=\"_blank\" rel=\"noreferrer noopener\">Android\uc758 Jetpack Compose<\/a>\uc5d0\uc11c\uc640 \ub3d9\uc77c\ud558\uac8c \ud30c\uc778\ub354, \uc5b4\uc124\uc158, \uc561\uc158 \ubc0f \ub9e4\ucc98\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/jetbrains.com\/help\/kotlin-multiplatform-dev\/compose-test.html\" target=\"_blank\" rel=\"noreferrer noopener\">\ubb38\uc11c<\/a>\uc758 \uc124\uc815 \uc9c0\uce68\uc744 \ub530\ub978 \ud6c4, \uc811\ub450\uc0ac\uac00 \uc62c\ubc14\ub974\uac8c \ucd94\uac00\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ud14c\uc2a4\ud2b8\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nimport androidx.compose.ui.test.ExperimentalTestApi\nimport androidx.compose.ui.test.runComposeUiTest\n...\n\nclass InformationTest {\n    @OptIn(ExperimentalTestApi::class)\n    @Test\n    fun shouldPrefixWithInfoTag() = runComposeUiTest {\n        setContent {\n            MyInfoComposable(&quot;Important things!&quot;, modifier = Modifier.testTag(&quot;info&quot;))\n        }\n        onNodeWithTag(&quot;info&quot;).assertTextContains(&quot;[INFO]&quot;, substring = true)\n    }\n}\n<\/pre>\n\n\n<p>\ud0c0\uae43 \ud50c\ub7ab\ud3fc\uc5d0\uc11c \uc774 \ud14c\uc2a4\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \ud14c\uc2a4\ud2b8 \uacb0\uacfc\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4(\uadf8\ub9ac\uace0 \uc774 \uacbd\uc6b0, \uc624\ud0c0\ub97c \ucc3e\uc544 \uc218\uc815\ud558\ub294 \ub370 \ub3c4\uc6c0\uc744 \uc90d\ub2c8\ub2e4!).<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"2586\" height=\"620\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/02\/compose-test-result.png\" alt=\"\" class=\"wp-image-445971\" style=\"aspect-ratio:4.170967741935484;width:840px;height:auto\"\/><\/figure>\n<h2 class=\"wp-block-heading\" id=\"i-os-accessibility-support\">iOS \uc811\uadfc\uc131 \uc9c0\uc6d0<\/h2>\n<p>\uc774\uc81c iOS\uc6a9 Compose Multiplatform\uc744 \uc0ac\uc6a9\ud558\uba74 \uc7a5\uc560\uac00 \uc788\ub294 \uc0ac\uc6a9\uc790\ub3c4 \ub124\uc774\ud2f0\ube0c UI\uc5d0\uc11c\uc640 \uac19\uc774 \ud3b8\uc548\ud558\uac8c Compose UI\uc640 \uc0c1\ud638 \uc791\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul id=\"7277ddf8\">\n<li>\uc2a4\ud06c\ub9b0 \ub9ac\ub354\uc640 VoiceOver\uac00 Compose Multiplatform UI\uc758 \ucf58\ud150\uce20\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li>Compose Multiplatform UI\ub294 \ud0d0\uc0c9 \ubc0f \uc0c1\ud638 \uc791\uc6a9\uc744 \uc704\ud574 \ub124\uc774\ud2f0\ube0c UI\uc640 \ub3d9\uc77c\ud55c \ub3d9\uc791\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>Compose Multiplatform \uc2dc\ub9e8\ud2f1 \ub370\uc774\ud130\uac00 \uc811\uadfc\uc131 \ud2b8\ub9ac\uc5d0 \uc790\ub3d9\uc73c\ub85c \ub9e4\ud551\ub418\uae30 \ub54c\ubb38\uc5d0 \uac00\ub2a5\ud55c \uc77c\uc785\ub2c8\ub2e4. \ub610\ud55c \uc774 \ub370\uc774\ud130\ub97c \uc811\uadfc\uc131 \uc11c\ube44\uc2a4\uc5d0 \uc81c\uacf5\ud558\uace0 XCTest \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ud1b5\ud55c \ud14c\uc2a4\ud2b8\uc5d0 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ud604\uc7ac \uc811\uadfc\uc131 \uc9c0\uc6d0\uc758 \uad6c\ud604\uacfc \uc81c\ud55c \uc0ac\ud56d\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/compose-ios-accessibility.html\" target=\"_blank\" rel=\"noreferrer noopener\">\ubb38\uc11c \ud398\uc774\uc9c0<\/a>\ub97c \ucc38\uc870\ud558\uc138\uc694.<\/p>\n<h2 class=\"wp-block-heading\" id=\"preview-annotation-for-fleet\">Fleet\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 @Preview \uc5b4\ub178\ud14c\uc774\uc158<\/h2>\n<p>1.6.0 \ubc84\uc804\uc5d0\uc11c\ub294 Compose Multiplatform\uc5d0 \uacf5\ud1b5 <code>@Preview<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc774 \ub3c4\uc785\ub418\uc5c8\uc2b5\ub2c8\ub2e4(\uc774\uc804\uc5d0\ub294 Android \ubc0f \ub370\uc2a4\ud06c\ud1b1\uc5d0\uc11c\ub9cc \uc0ac\uc6a9 \uac00\ub2a5). \uc774 \uc5b4\ub178\ud14c\uc774\uc158\uc740 <a href=\"https:\/\/www.jetbrains.com\/fleet\/\" target=\"_blank\" rel=\"noopener\">JetBrains Fleet<\/a>(<a href=\"https:\/\/blog.jetbrains.com\/fleet\/2024\/02\/fleet-1-31-improved-markdown-experience-additional-run-configuration-macros-support-for-vitest-and-more\/\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/fleet\/2024\/02\/fleet-1-31-improved-markdown-experience-additional-run-configuration-macros-support-for-vitest-and-more\/\" target=\"_blank\" rel=\"noreferrer noopener\">Fleet 1.31<\/a>\ubd80\ud130)\uc5d0\uc11c \uc9c0\uc6d0\ub429\ub2c8\ub2e4. <code>@Composable<\/code> \ud568\uc218\uc5d0 <code>@Preview<\/code>\ub97c \ucd94\uac00\ud558\uba74 \uc5ec\ubc31 \uc544\uc774\ucf58\uc744 \ud1b5\ud574 \ubbf8\ub9ac\ubcf4\uae30\ub97c \uc5f4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1662\" height=\"1194\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/02\/fleet-compose-preview-2.png\" alt=\"\" class=\"wp-image-450517\"\/><\/figure>\n<p><a href=\"https:\/\/kmp.jetbrains.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kotlin Multiplatform \ub9c8\ubc95\uc0ac<\/a>\ub85c \uc0dd\uc131\ub41c \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc0ac\uc6a9\ud574 \ubcf4\uc138\uc694!<\/p>\n<p>\ud604\uc7ac, Fleet\uc740 \ub9e4\uac1c\ubcc0\uc218 \uc5c6\uc774 <code>@Composable<\/code> \ud568\uc218\uc5d0 \ub300\ud55c <code>@Preview<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc774 \uacf5\ud1b5 \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 \uc2e4\ud5d8\uc801 <code>compose.components.uiToolingPreview<\/code> \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc885\uc18d\uc131\uc5d0 \ucd94\uac00\ud558\uc138\uc694(\ub370\uc2a4\ud06c\ud1b1 \ubc0f Android\uc5d0 \uc0ac\uc6a9\ub418\ub294 <code>compose.uiTooling<\/code>\uacfc \ub2ec\ub9ac).<\/p>\n<h2 class=\"wp-block-heading\" id=\"separate-platform-views-for-popups-dialogs-and-dropdown-menus\">\ud31d\uc5c5, \ub300\ud654\uc0c1\uc790 \ubc0f \ub4dc\ub86d\ub2e4\uc6b4 \uba54\ub274\uc5d0 \ub300\ud55c \ubcc4\ub3c4\uc758 \ud50c\ub7ab\ud3fc \ubdf0<\/h2>\n<p>Compose Multiplatform\uc744 SwiftUI\uc640 \ud568\uaed8 \uc0ac\uc6a9\ud560 \ub54c Compose\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud2b9\uc815 \ud654\uba74\uc758 \uc77c\ubd80 \uc704\uc82f\ub9cc \ub80c\ub354\ub9c1\ud574\uc57c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubc84\uc804 1.6\ubd80\ud130 \uc774\ub7ec\ud55c \uc2dc\ub098\ub9ac\uc624\uc5d0\uc11c <code>Dialog<\/code>, <code>Popup<\/code> \ub610\ub294 <code>Dropdown<\/code> \ucef4\ud3ec\uc800\ube14\uc744 \ub9cc\ub4e4\uba74 \uac1c\ubcc4 \uc704\uc82f\uc758 \uacbd\uacc4\ub97c \ub118\uc5b4 \ud655\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc2ec\uc9c0\uc5b4, \uc804\uccb4 \ud654\uba74\uc73c\ub85c\uae4c\uc9c0 \ud655\uc7a5\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4!<\/p>\n<p>\ud604\uc7ac <a href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/whats-new-compose-1-6-0.html#separate-platform-views-for-popups-dialogs-and-dropdowns-ios-desktop\" target=\"_blank\" rel=\"noreferrer noopener\">\uc2e4\ud5d8\uc801 \uae30\ub2a5<\/a>\uc774\uae30\ub294 \ud558\uc9c0\ub9cc \ub370\uc2a4\ud06c\ud1b1 \ud0c0\uae43\uc5d0\ub3c4 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/02\/Compose-Multiplatform-Demo.png\" alt=\"Compose Multiplatform\uc758 \ub300\ud654\uc0c1\uc790, \ud31d\uc5c5 \ub610\ub294 \ub4dc\ub86d\ub2e4\uc6b4\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/02\/Compose-Multiplatform-Demo.gif\"><\/p>\n<h2 class=\"wp-block-heading\" id=\"other-notable-changes\">\uae30\ud0c0 \uc8fc\ubaa9\ud560 \ub9cc\ud55c \ubcc0\uacbd \uc0ac\ud56d<\/h2>\n<p>\uc774\ubc88 \ub9b4\ub9ac\uc2a4\uc5d0 \ud3ec\ud568\ub41c \ub098\uba38\uc9c0 \ubcc0\uacbd \uc0ac\ud56d\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\ub824\uba74:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/compose-multiplatform-getting-started.html\" data-type=\"link\" data-id=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/compose-multiplatform-getting-started.html\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>1.6.0\uc5d0 \ub3c4\uc785\ub41c \uac1c\uc120 \uc0ac\ud56d\uacfc \uae30\ub2a5\uc774 \uc790\uc138\ud788 \uc124\uba85\ub41c <a href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/whats-new-compose-1-6-0.html\" target=\"_blank\" rel=\"noreferrer noopener\">Compose Multiplatform 1.6.0\uc758 \uc0c8\ub85c\uc6b4 \uae30\ub2a5<\/a> \ud398\uc774\uc9c0\ub97c \ucc38\uc870\ud558\uc138\uc694.<\/li>\n<li><a href=\"https:\/\/github.com\/JetBrains\/compose-multiplatform\/releases\/tag\/v1.5.10?utm_source=kotlinblog&#038;utm_medium=blogpost&#038;utm_campaign=compose-1-5-10\" data-type=\"link\" data-id=\"https:\/\/github.com\/JetBrains\/compose-multiplatform\/releases\/tag\/v1.5.10?utm_source=kotlinblog&#038;utm_medium=blogpost&#038;utm_campaign=compose-1-5-10\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/github.com\/JetBrains\/compose-multiplatform\/releases\/tag\/v1.6.0\" data-type=\"link\" data-id=\"https:\/\/github.com\/JetBrains\/compose-multiplatform\/releases\/tag\/v1.6.0\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub\uc758 Compose Multiplatform \ub9b4\ub9ac\uc2a4 \ub178\ud2b8<\/a>\uc5d0\ub294 1.6.0\uc5d0 \ub300\ud55c \ubcd1\ud569\ub41c \ud480 \ub9ac\ud018\uc2a4\ud2b8\uc758 \uc804\uccb4 \ubaa9\ub85d\uc774 \uc218\ub85d\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\" id=\"what-else-to-read-and-watch\">\uae30\ud0c0 \uc720\uc6a9\ud55c \uae00\uacfc \uc601\uc0c1<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/kotlin-multiplatform-dev\/compose-multiplatform-getting-started.html\" target=\"_blank\" rel=\"noreferrer noopener\">Compose Multiplatform \uc2dc\uc791\ud558\uae30 \u2014 \ud29c\ud1a0\ub9ac\uc5bc<\/a><\/li>\n<\/ul>\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/live\/IGuVIRZzVTk?si=x5EH-ztI6gT2JM4c\" target=\"_blank\" rel=\"noreferrer noopener\">Compose Multiplatform\uc744 \uc0ac\uc6a9\ud558\uc5ec iOS, Android \ubc0f \ub370\uc2a4\ud06c\ud1b1\uc6a9 \uc571 \ube4c\ub4dc \u2014 \ub3d9\uc601\uc0c1<\/a><\/li>\n<\/ul>\n<p><em>\uac8c\uc2dc\ubb3c \uc6d0\ubb38 \uc791\uc131\uc790<\/em><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":964,"featured_media":448131,"comment_status":"closed","ping_status":"closed","template":"","categories":[956],"tags":[6706,477],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/kotlin\/457640"}],"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=457640"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/kotlin\/457640\/revisions"}],"predecessor-version":[{"id":458562,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/kotlin\/457640\/revisions\/458562"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/448131"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=457640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=457640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=457640"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=457640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}