{"id":45459,"date":"2021-11-07T11:31:40","date_gmt":"2021-11-07T02:31:40","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=45459"},"modified":"2021-11-12T16:30:59","modified_gmt":"2021-11-12T07:30:59","slug":"compose-jetpack-compose-basics-%ed%96%89%ea%b3%bc-%ec%97%b4%eb%a1%9c-%ec%95%84%ec%9d%b4%ed%85%9c-%ea%b5%ac%ec%84%b1","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=45459","title":{"rendered":"Jetpack Compose basics &#8211; \ud589\uacfc \uc5f4\ub85c \uc544\uc774\ud15c \uad6c\uc131"},"content":{"rendered":"<h1>\ud589\uacfc \uc5f4\ub85c \uc544\uc774\ud15c \uad6c\uc131\ud558\uae30<\/h1>\n<p>Compose\uc5d0 \ud3ec\ud568\ub41c Column, Row, Box\uc640 \uac19\uc740 \ud45c\uc900 \ub808\uc774\uc544\uc6c3 3\uc694\uc18c\uac00 \uc788\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/11\/www.charlezz.com-compose-jetpack-compose-basics-3-fbd450e8eab10338.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/11\/www.charlezz.com-compose-jetpack-compose-basics-3-fbd450e8eab10338.png\" alt=\"\" width=\"744\" height=\"344\" class=\"alignnone size-full wp-image-45460\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/11\/www.charlezz.com-compose-jetpack-compose-basics-3-fbd450e8eab10338.png 744w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/11\/www.charlezz.com-compose-jetpack-compose-basics-3-fbd450e8eab10338-300x139.png 300w\" sizes=\"(max-width: 744px) 100vw, 744px\" \/><\/a><\/p>\n<p>Column, Row, Box\ub3c4 composable \ud568\uc218\ub2e4. \uc774 \ud568\uc218\ub4e4\uc740 \ub2e4\ub978 composable \uc694\uc18c\ub4e4\uc744 \ub0b4\ubd80\uc5d0\uc11c \uac01\uae30 \ub2e4\ub978 \ud615\ud0dc\ub85c \ubc30\uce58 \ud55c\ub2e4. \uc608\ub97c\ub4e4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub4dc\uac00 \uc788\ub2e4\uace0 \uac00\uc815\ud558\uc790.<\/p>\n<pre class=\"lang:null decode:true lang: \">@Composable\nprivate fun Greeting(name: String) {\n    Surface(color = MaterialTheme.colors.primary) {\n        <strong>Column<\/strong>(modifier = Modifier.padding(24.dp)) {\n            Text(text = \"Hello,\")\n            Text(text = name)\n        }\n    }\n}<\/pre>\n<p>Column\uc740 \uc218\uc9c1\uc73c\ub85c \uac01\uac01\uc758 \ud56d\ubaa9\uc744 \ubc30\uce58\ud558\ubbc0\ub85c, \uadf8 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/11\/www.charlezz.com-compose-jetpack-compose-basics-3-cf26127d32021cd.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/11\/www.charlezz.com-compose-jetpack-compose-basics-3-cf26127d32021cd.png\" alt=\"\" width=\"524\" height=\"348\" class=\"alignnone size-full wp-image-45461\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/11\/www.charlezz.com-compose-jetpack-compose-basics-3-cf26127d32021cd.png 524w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/11\/www.charlezz.com-compose-jetpack-compose-basics-3-cf26127d32021cd-300x199.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/11\/www.charlezz.com-compose-jetpack-compose-basics-3-cf26127d32021cd-360x240.png 360w\" sizes=\"(max-width: 524px) 100vw, 524px\" \/><\/a><\/p>\n<h2>\ucf54\ud2c0\ub9b0 \ubb38\ubc95\uacfc Compose<\/h2>\n<p><span>composable \ud568\uc218\ub294 Kotlin\uc758 \ubb38\ubc95\uc744 \uae30\ubc18\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. \uc774\ub7ec\ud55c \ubd80\ubd84\uc740 UI\uac00 \ud45c\uc2dc\ub418\ub294 \ubc29\uc2dd\uc5d0 \ucf54\ud2c0\ub9b0 \ubb38\ubc95\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c UI \u200b\u200b\uad6c\ucd95\uc774 \uc815\ub9d0 \uac15\ub825\ud574\uc9c4\ub2e4. \uc608\ub97c \ub4e4\uc5b4 for \ub8e8\ud504\ub97c \uc0ac\uc6a9\ud558\uc5ec Column \uc694\uc18c\ub97c \ucd94\uac00\ud560 \uc218 \uc788\ub2e4.<\/span><\/p>\n<pre class=\"lang: decode:true\">@Composable\nfun MyApp(names: List&lt;String&gt; = listOf(\"World\", \"Compose\")) {\n    Column {\n        for (name in names) {\n            Greeting(name = name)\n        }\n    }\n}<\/pre>\n<p><img decoding=\"async\" alt=\"c366a44b3e99157f.png\" src=\"https:\/\/developer.android.com\/codelabs\/jetpack-compose-basics\/img\/c366a44b3e99157f.png\"><\/p>\n<p>composable\ub85c \uc0ac\uc774\uc988 \uc218\uce58\ub97c \uc9c0\uc815\ud558\uc9c0 \uc54a\uc558\uac70\ub098 \uc81c\uc57d\uc870\uac74\uc744 \ucd94\uac00\ud558\uc9c0 \uc54a\uc558\ub2e4\uba74, \uac01 \ud589\uc758 \uc544\uc774\ud15c\uc740 \ucd5c\uc18c\uc758 \uc0ac\uc774\uc988\ub97c \uac00\uc9c0\uace0 preview\uc0c1\uc5d0 \ub098\ud0c0\ub098\uac8c \ub41c\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc774 <strong>widthDp<\/strong> \uc18d\uc131\uc744 \ubcc0\uacbd\ud558\uc5ec \uac00\ub85c \uae38\uc774\ub97c 320dp\ub85c \uc9c0\uc815\ud574\ubcf4\uc790.<\/p>\n<pre class=\"lang: decode:true\">@Preview(showBackground = true, <strong>widthDp<\/strong> = 320)\n@Composable\nfun DefaultPreview() {\n    BasicsCodelabTheme {\n        MyApp()\n    }\n}<\/pre>\n<p><img decoding=\"async\" alt=\"63ac84a794ec7a3d.png\" src=\"https:\/\/developer.android.com\/codelabs\/jetpack-compose-basics\/img\/63ac84a794ec7a3d.png\"><\/p>\n<p>Modifier\ub294 Compose\uc5d0\uc11c \uad11\ubc94\uc704\ud558\uac8c \uc0ac\uc6a9\ub41c\ub2e4. <strong>fillMaxWidth<\/strong> \uc640 <strong>padding<\/strong>\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc544\ub798\uc758 preview\ucc98\ub7fc \ub098\ud0c0\ub0b4\ubcf4\uc790.<\/p>\n<p><img decoding=\"async\" alt=\"ecd3370d03f7130e.png\" src=\"https:\/\/developer.android.com\/codelabs\/jetpack-compose-basics\/img\/ecd3370d03f7130e.png\"><\/p>\n<p>\ucf54\ub4dc\uc758 \ubcc0\uacbd\uc0ac\ud56d\uc744 \ud655\uc778\ud574\ubcf4\uc790<\/p>\n<pre class=\"lang: decode:true\">@Composable\nfun MyApp(names: List&lt;String&gt; = listOf(\"World\", \"Compose\")) {\n    Column(modifier = Modifier.<strong>padding<\/strong>(vertical = 4.dp)) {\n        for (name in names) {\n            Greeting(name = name)\n        }\n    }\n}\n\n@Composable\nprivate fun Greeting(name: String) {\n    Surface(\n        color = MaterialTheme.colors.primary,\n        modifier = Modifier.<strong>padding<\/strong>(vertical = 4.dp, horizontal = 8.dp)\n    ) {\n        Column(modifier = Modifier.<strong>fillMaxWidth<\/strong>().<strong>padding<\/strong>(24.dp)) {\n            Text(text = \"Hello, \")\n            Text(text = name)\n        }\n    }\n}<\/pre>\n<h2>\ubc84\ud2bc \ucd94\uac00 \ud558\uae30<\/h2>\n<p>\ub2e4\uc74c \ub2e8\uacc4\ub85c Greeting\uc744 \ud655\uc7a5\ud558\uc5ec \ud074\ub9ad\ud560 \uc218 \uc788\ub294 \ubc84\ud2bc\uc744 \ucd94\uac00\ud574\ubcf4\uc790. \ubc84\ud2bc\uc744 \ucd94\uac00\ud558\uace0\ub098\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ub808\uc774\uc544\uc6c3\uc73c\ub85c \uad6c\uc131\ub420 \uac83\uc774\ub2e4.<\/p>\n<p><img decoding=\"async\" alt=\"203e0a9946f313cc.png\" src=\"https:\/\/developer.android.com\/codelabs\/jetpack-compose-basics\/img\/203e0a9946f313cc.png\"><\/p>\n<p>Button\uc774\ub77c\ub294 Composable \ud568\uc218\ub3c4 \uba38\ud14c\ub9ac\uc5bc \ud328\ud0a4\uc9c0\ub85c\ubd80\ud130 \uc81c\uacf5\ub41c\ub2e4. Button\uc740 \ub9c8\uc9c0\ub9c9 \ud30c\ub77c\ubbf8\ud130\ub85c composable \ud568\uc218\ub97c \uac16\ub294\ub2e4. \ucf54\ud2c0\ub9b0 \ubb38\ubc95\uc5d0 \ub530\ub974\uba74, \ud568\uc218\uc758 \ub9c8\uc9c0\ub9c9 \ud30c\ub77c\ubbf8\ud130\uac00 \ud568\uc218\uc77c \uacbd\uc6b0 \ud574\ub2f9 \uc778\uc790\ub85c \uc804\ub2ec\ub41c \ub78c\ub2e4 \ud45c\ud604\uc2dd\uc744 \uad04\ud638 \ubc16\uc5d0 \ubc30\uce58 \ud560 \uc218 \uc788\ub2e4. \uc774\ub97c <a href=\"https:\/\/kotlinlang.org\/docs\/lambdas.html#passing-trailing-lambdas\">trailing lambda<\/a>\ub77c\uace0 \ud55c\ub2e4. Button\uc5d0 Text\ub97c \ucd94\uac00\ud558\ub294 \uc608\uc81c\ub97c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n<pre class=\"lang: decode:true \">\/\/ \uc544\uc9c1 \ubcf5\uc0ac \u3134\u3134\nButton(\n    onClick = { } \/\/ \ucf5c\ubc31\uc740 \ub098\uc911\uc5d0~\n) {\n    Text(\"Show less\")\n}<\/pre>\n<p>Compose\ub294 <a href=\"https:\/\/material.io\/components\/buttons\/android#using-buttons\">\uba38\ud14c\ub9ac\uc5bc \ub514\uc790\uc778 \ubc84\ud2bc \uc2a4\ud399<\/a>\uc5d0 \ub530\ub974\uba74 \ub2e4\uc591\ud55c \ubc84\ud2bc \ud0c0\uc785\uc744 \uc81c\uacf5\ud558\uace0 \uc788\ub2e4.<\/p>\n<ul>\n<li>Button<\/li>\n<li>OutlinedButton<\/li>\n<li>TextButton<\/li>\n<\/ul>\n<p>\uc774 \uc911 OutlinedButton\uc744 \uc0ac\uc6a9\ud558\uc5ec&nbsp; Text\ub97c \uac10\uc2f8\ub294 Button\uc744 \ub9cc\ub4e4\uc5b4\ubcf4\uc790.<\/p>\n<p>\uc774\uac83\uc744 \uad6c\ud604\ud558\ub824\uba74 \ud589(Row)\uc758 \ub9c8\uc9c0\ub9c9 \uc544\uc774\ud15c\uc744 \ubc30\uce58\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\uc57c \ud55c\ub2e4. Modifier\uc5d0\ub294 alignEnd \uac19\uc740 \uc18d\uc131\uc740 \uc874\uc7ac \ud558\uc9c0 \uc54a\ub294\ub2e4. \ub300\uc2e0\uc5d0 \uc2dc\uc791\ud558\ub294 composable\uc5d0 weight\ub97c \uc801\uc6a9\ud560 \uc218 \uc788\ub2e4. weight\ub294 composable\uc774 \ubc30\uce58\ub418\ub294 \ub0a8\ub294 \uacf5\uac04\uc744 \uc804\ubd80 \ucc44\uc6b0\uac8c \ud55c\ub2e4. LinearLayout\uc758 weight\uc640 \ube44\uc2b7\ud558\ub2e4\uace0 \ubcf4\uba74 \ub41c\ub2e4. weight\ub97c \uc0ac\uc6a9\ud558\uba74 \uc880\ub354 \uc720\uc5f0\ud558\uace0 \ud6a8\uacfc\uc801\uc73c\ub85c \ub2e4\ub978 weight\uac00 \uc5c6\ub294 composable\ub4e4\uc744 \ubc00\uc5b4\ub0bc \uc218 \uc788\ub2e4. \uadf8\ub85c\uc778\ud574 fillMaxWidth \uc18d\uc131\uc740 \uc5ec\uae30\uc11c \uc4f8\ubaa8 \uc5c6\uc5b4\uc9c0\uac8c \ub418\ubbc0\ub85c \uae30\uc874 \ucf54\ub4dc\uc5d0\uc11c \uc81c\uac70\ud558\uc790.<\/p>\n<pre class=\"lang: decode:true \">@Composable\nprivate fun Greeting(name: String) {\n\n    Surface(\n        color = MaterialTheme.colors.primary,\n        modifier = Modifier.padding(vertical = 4.dp, horizontal = 8.dp)\n    ) {\n        Row(modifier = Modifier.padding(24.dp)) {\n            Column(modifier = Modifier.<strong>weight<\/strong>(1f)) {\n                Text(text = \"Hello, \")\n                Text(text = name)\n            }\n            OutlinedButton(\n                onClick = { \/* TODO *\/ }\n            ) {\n                Text(\"Show more\")\n            }\n        }\n    }\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\ud589\uacfc \uc5f4\ub85c \uc544\uc774\ud15c \uad6c\uc131\ud558\uae30 Compose\uc5d0 \ud3ec\ud568\ub41c Column, Row, Box\uc640 \uac19\uc740 \ud45c\uc900 \ub808\uc774\uc544\uc6c3 3\uc694\uc18c\uac00 \uc788\ub2e4. Column, Row, Box\ub3c4 composable \ud568\uc218\ub2e4. \uc774 \ud568\uc218\ub4e4\uc740 \ub2e4\ub978 composable \uc694\uc18c\ub4e4\uc744 \ub0b4\ubd80\uc5d0\uc11c \uac01\uae30 \ub2e4\ub978 \ud615\ud0dc\ub85c \ubc30\uce58 \ud55c\ub2e4. \uc608\ub97c\ub4e4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub4dc\uac00 \uc788\ub2e4\uace0 \uac00\uc815\ud558\uc790. @Composable private fun Greeting(name: String) { Surface(color = MaterialTheme.colors.primary) { Column(modifier = Modifier.padding(24.dp)) { [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[38],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/45459"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=45459"}],"version-history":[{"count":6,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/45459\/revisions"}],"predecessor-version":[{"id":45481,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/45459\/revisions\/45481"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=45459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=45459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=45459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}