{"id":1640,"date":"2026-03-06T10:16:10","date_gmt":"2026-03-06T10:16:10","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=1640"},"modified":"2026-08-31T07:32:33","modified_gmt":"2026-08-31T07:32:33","slug":"android-%ea%b0%9c%eb%b0%9c-%ed%95%b5%ec%8b%ac-%ec%a0%95%eb%a6%ac","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=1640","title":{"rendered":"Android \uac1c\ubc1c \ud575\uc2ec \uc815\ub9ac"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Android \uac1c\ubc1c\uc740  <strong>Android \ud50c\ub7ab\ud3fc \uc790\uccb4\uc758 \uad6c\uc870\ub97c \uc774\ud574\ud558\ub294 \uac83<\/strong>\uc774 \uc911\uc694\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud575\uc2ec \uac1c\ub150\ub9cc \uc5f0\uacb0\ud574\ubcf4\uba74 <code>Activity<\/code>, <code>Lifecycle<\/code>, <code>View<\/code>, <code>Compose<\/code>, <code>Intent<\/code>, <code>Service<\/code>, <code>ViewModel<\/code>, <code>Coroutine<\/code>, <code>Repository<\/code>, <code>Room<\/code>, <code>Gradle<\/code> \ub4f1\uc774 \ud558\ub098\uc758 \uad6c\uc870 \uc548\uc5d0\uc11c \uc774\uc5b4\uc9c4\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Android \uc571\uc740 \ub2e8\uc21c\ud788 \ud654\uba74\uc744 \ub9cc\ub4dc\ub294 \ud504\ub85c\uadf8\ub7a8\uc774 \uc544\ub2c8\ub2e4. Android OS\uac00 \uc571\uc758 \uc0dd\uba85\uc8fc\uae30\uc640 \ud504\ub85c\uc138\uc2a4\ub97c \uad00\ub9ac\ud558\uace0, \uc571\uc740 \uadf8 \uc704\uc5d0\uc11c UI\uc640 \uc0c1\ud0dc, \ub370\uc774\ud130 \ucc98\ub9ac\ub97c \uc218\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Android \uc571\uc758 \uc804\uccb4 \uad6c\uc870<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uac00\uc7a5 \uba3c\uc800 \uc571\uc758 \uc77c\ubc18\uc801\uc778 \ub370\uc774\ud130 \ud750\ub984\uc744 \uc7a1\uc73c\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uc0ac\uc6a9\uc790 \uc785\ub825 -&gt; Activity \/ Compose -&gt; ViewModel -&gt; Repository -&gt; Data Source -&gt; Network \/ Database<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Android \ud50c\ub7ab\ud3fc\uacfc\uc758 \uad00\uacc4\uae4c\uc9c0 \ud655\uc7a5\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Android App -&gt; Android Framework -&gt; Android OS -&gt; Linux Kernel<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Android \uc571\uc740 Android OS \uc704\uc5d0\uc11c \uc2e4\ud589\ub418\uace0, Android Framework\uac00 Activity, Service, Intent, Permission \ub4f1\uc758 \ud50c\ub7ab\ud3fc \uae30\ub2a5\uc744 \uc81c\uacf5\ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Activity<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Activity<\/code>\ub294 Android \uc571\uc758 \ub300\ud45c\uc801\uc778 UI \uc9c4\uc785\uc810\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uacfc\uac70\uc5d0\ub294 <code>Activity \ud558\ub098 = \ud654\uba74 \ud558\ub098<\/code>\ub77c\uace0 \uc124\uba85\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc558\uc9c0\ub9cc, \uc774 \ubc29\uc2dd\uc73c\ub85c \uc774\ud574\ud558\uba74 \ubd80\uc871\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Activity\ub294 <strong>Android \uc2dc\uc2a4\ud15c\uacfc \uc571\uc744 \uc5f0\uacb0\ud558\uba74\uc11c UI\ub97c \ub2f4\ub294 \ucef4\ud3ec\ub10c\ud2b8<\/strong>\uc5d0 \uac00\uae5d\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc778 Lifecycle\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>onCreate() -&gt; onStart() -&gt; onResume() -&gt; &#91;\uc0ac\uc6a9 \uc911] -&gt; onPause() -&gt; onStop() -&gt; onDestroy()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\ub978 \ud654\uba74\uc774\ub098 \uc571\uc774 \uc704\uc5d0 \uc62c\ub77c\uc624\uba74 <code>onPause()<\/code>\uac00 \ud638\ucd9c\ub420 \uc218 \uc788\uace0, \ud654\uba74\uc5d0\uc11c \uc644\uc804\ud788 \ubc97\uc5b4\ub098\uba74 <code>onStop()<\/code>\uae4c\uc9c0 \uc9c4\ud589\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Activity\ub294 \uc2dc\uc2a4\ud15c\uc5d0 \uc758\ud574 \ub2e4\uc2dc \uc0dd\uc131\ub420 \uc218\ub3c4 \uc788\ub2e4. \ud654\uba74 \ud68c\uc804\uc774\ub098 \ud504\ub85c\uc138\uc2a4 \uc7ac\uc0dd\uc131 \ub4f1\uc744 \uace0\ub824\ud574\uc57c \ud558\uae30 \ub54c\ubb38\uc5d0 \uc911\uc694\ud55c \uc0c1\ud0dc\ub97c Activity\uc5d0 \uc804\ubd80 \uc800\uc7a5\ud558\ub294 \ubc29\uc2dd\uc740 \uc801\uc808\ud558\uc9c0 \uc54a\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 <code>ViewModel<\/code>, <code>SavedStateHandle<\/code>, \uc601\uad6c \uc800\uc7a5\uc18c \ub4f1\uc744 \ud568\uaed8 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">View\uc640 Jetpack Compose<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc804\ud1b5\uc801\uc778 Android UI\ub294 <code>View<\/code> \uc2dc\uc2a4\ud15c\uc744 \uae30\ubc18\uc73c\ub85c \ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Activity -&gt; View \/ TextView \/ Button \/ RecyclerView<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">XML\ub85c UI\ub97c \uc120\uc5b8\ud558\uace0 Kotlin \ucf54\ub4dc\uc5d0\uc11c View\ub97c \uc81c\uc5b4\ud558\ub294 \ubc29\uc2dd\uc774 \ub300\ud45c\uc801\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;TextView\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:text=\"Hello\" \/&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucd5c\uadfc Android\uc5d0\uc11c\ub294 Jetpack Compose\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uc774 \uc77c\ubc18\ud654\ub418\uace0 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compose\uc5d0\uc11c\ub294 UI\ub97c Kotlin \ucf54\ub4dc\ub85c \uc120\uc5b8\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Composable\nfun Greeting(name: String) {\n    Text(text = \"Hello $name\")\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc804\ud1b5\uc801\uc778 View \uc2dc\uc2a4\ud15c\uc740 UI \uac1d\uccb4\ub97c \uc9c1\uc811 \uc870\uc791\ud558\ub294 \ubc29\uc2dd\uc5d0 \uac00\uae5d\uace0, Compose\ub294 <strong>\uc0c1\ud0dc\uc5d0 \ub530\ub77c UI\ub97c \uc120\uc5b8\ud558\ub294 \ubc29\uc2dd<\/strong>\uc5d0 \uac00\uae5d\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>State -&gt; Composable -&gt; UI<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0c1\ud0dc\uac00 \ubcc0\uacbd\ub418\uba74 \uad00\ub828 Composable\uc774 \ub2e4\uc2dc \uc2e4\ud589\ub418\uace0 UI\uac00 \uac31\uc2e0\ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Flutter\ub97c \uc54c\uace0 \uc788\ub2e4\uba74 Compose\uc758 \uc120\uc5b8\uc801 UI\uc640 \uc0c1\ud0dc \uae30\ubc18 \ub80c\ub354\ub9c1 \ubc29\uc2dd\uc740 \ube44\uad50\uc801 \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Activity Lifecycle<\/h2>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/images.openai.com\/static-rsc-4\/zd6wJ0ks4-zqO8vpSSR_fzUR5d54TjIkrVclaTTP4AlimLyqNmNaNZJHzjBqr9KMgbbkynSAQ21DhLHASbUKkTTt-7XXk68_0vFp661Rh778YRgNZb8705y7dMmxX57iCZYISb4v_H63F0QK0WKS4ZWoxVg9FrYo9r8omSwsOXqdzMQ--nnbVAowGvtnfTyS?purpose=fullsize\" alt=\"Image\" style=\"aspect-ratio:0.70693123989112;width:327px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Lifecycle\uc740 \ub2e8\uc21c\ud788 \uba54\uc11c\ub4dc \uc774\ub984\uc744 \uc554\uae30\ud558\ub294 \uac1c\ub150\uc774 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Android \uc2dc\uc2a4\ud15c\uc774 Activity\ub97c <strong>\uc0dd\uc131\ud558\uace0, \ud654\uba74\uc5d0 \ud45c\uc2dc\ud558\uace0, \ubc31\uadf8\ub77c\uc6b4\ub4dc\ub85c \ubcf4\ub0b4\uace0, \uc81c\uac70\ud558\ub294 \uacfc\uc815<\/strong>\uc744 \uc774\ud574\ud558\uae30 \uc704\ud55c \uad6c\uc870\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Activity\uac00 \uc2e4\ud589\ub418\uba74 \uc77c\ubc18\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc774 \uc9c4\ud589\ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Activity \uc2e4\ud589 -&gt; onCreate() -&gt; onStart() -&gt; onResume()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub978 \uc571\uc73c\ub85c \uc774\ub3d9\ud558\uba74 \uc0c1\ud669\uc5d0 \ub530\ub77c \ub2e4\uc74c\uacfc \uac19\uc774 \uc9c4\ud589\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>onResume() -&gt; onPause() -&gt; onStop()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc2dc \ub3cc\uc544\uc624\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc9c4\ud589\ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>onStop() -&gt; onStart() -&gt; onResume()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c UI \ub9ac\uc18c\uc2a4, \uc774\ubca4\ud2b8 \uc218\uc9d1, \ube44\ub3d9\uae30 \uc791\uc5c5 \ub4f1\uc758 \uc0dd\uba85\uc8fc\uae30\ub97c \uc801\uc808\ud558\uac8c \uad00\ub9ac\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud604\ub300 Android\uc5d0\uc11c\ub294 Activity\uc5d0 \ubaa8\ub4e0 \ub85c\uc9c1\uc744 \ub123\uae30\ubcf4\ub2e4\ub294 <code>ViewModel<\/code>, <code>Lifecycle<\/code>, <code>Coroutine<\/code> \ub4f1\uc744 \uc774\uc6a9\ud574 \ucc45\uc784\uc744 \ubd84\ub9ac\ud558\ub294 \uac83\uc774 \uc77c\ubc18\uc801\uc774\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Intent<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Android \ucef4\ud3ec\ub10c\ud2b8 \uac04 \ud1b5\uc2e0\uc5d0\uc11c \uc911\uc694\ud55c \uac1c\ub150\uc774 <code>Intent<\/code>\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub978 Activity\ub97c \uc2e4\ud589\ud560 \ub54c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val intent = Intent(this, DetailActivity::class.java)\nstartActivity(intent)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub370\uc774\ud130\ub97c \uc804\ub2ec\ud558\ub294 \uac83\ub3c4 \uac00\ub2a5\ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>intent.putExtra(\"userId\", userId)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Intent\ub294 \uc571 \ub0b4\ubd80 \ucef4\ud3ec\ub10c\ud2b8 \uc774\ub3d9\ubfd0\ub9cc \uc544\ub2c8\ub77c Android \uc2dc\uc2a4\ud15c\uc744 \ud1b5\ud574 \ub2e4\ub978 \uc571\uc758 \uae30\ub2a5\uc744 \uc694\uccad\ud558\ub294 \ub370\uc5d0\ub3c4 \uc0ac\uc6a9\ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>App -&gt; Intent -&gt; Android System -&gt; \ub2e4\ub978 Activity \/ \uc571<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ube0c\ub77c\uc6b0\uc800 \uc2e4\ud589, \uacf5\uc720 \uae30\ub2a5 \ud638\ucd9c \ub4f1\uc758 \uc791\uc5c5\ub3c4 Intent\ub97c \ud1b5\ud574 \ucc98\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ub54c\ubb38\uc5d0 Intent\ub294 Android\uac00 \ub2e8\uc21c\ud55c UI \ud504\ub808\uc784\uc6cc\ud06c\uac00 \uc544\ub2c8\ub77c <strong>OS\uc640 \uac15\ud558\uac8c \uc5f0\uacb0\ub41c \ud50c\ub7ab\ud3fc<\/strong>\uc774\ub77c\ub294 \uac83\uc744 \ubcf4\uc5ec\uc8fc\ub294 \ub300\ud45c\uc801\uc778 \uac1c\ub150\uc774\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Android \uc8fc\uc694 \ucef4\ud3ec\ub10c\ud2b8<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Android\uc5d0\ub294 \ub300\ud45c\uc801\uc73c\ub85c \ub124 \uac00\uc9c0 \uc571 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Activity \/ Service \/ BroadcastReceiver \/ ContentProvider<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Activity<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0ac\uc6a9\uc790\uc640 \uc0c1\ud638\uc791\uc6a9\ud558\ub294 UI \uc9c4\uc785\uc810\uc774\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Service<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">UI\uac00 \uc5c6\ub294 \uc0c1\ud0dc\uc5d0\uc11c\ub3c4 \ud2b9\uc815 \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc \ud604\ub300 Android\ub294 \ubc31\uadf8\ub77c\uc6b4\ub4dc \uc2e4\ud589\uc5d0 \uc5ec\ub7ec \uc81c\ud55c\uc744 \ub450\uace0 \uc788\ub2e4. \uc7a5\uc2dc\uac04 \uc0ac\uc6a9\uc790\uc5d0\uac8c \ud45c\uc2dc\ub418\ub294 \uc791\uc5c5\uc740 <code>Foreground Service<\/code>\uac00 \ud544\uc694\ud560 \uc218 \uc788\uace0, \uc608\uc57d\ub41c \ubc31\uadf8\ub77c\uc6b4\ub4dc \uc791\uc5c5\uc740 <code>WorkManager<\/code>\uac00 \uc801\ud569\ud55c \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">BroadcastReceiver<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Android \uc2dc\uc2a4\ud15c\uc774\ub098 \ub2e4\ub978 \uc571\uc5d0\uc11c \ubc1c\uc0dd\ud558\ub294 Broadcast\ub97c \uc218\uc2e0\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\uc815 \uc2dc\uc2a4\ud15c \uc774\ubca4\ud2b8\uc5d0 \ubc18\uc751\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">ContentProvider<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc571 \uac04 \ub370\uc774\ud130 \uacf5\uc720\ub97c \uc704\ud55c \ud45c\uc900 \uc778\ud130\ud398\uc774\uc2a4\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 \uc571\uc5d0\uc11c \uc9c1\uc811 \uad6c\ud604\ud560 \uc77c\uc740 \ub9ce\uc9c0 \uc54a\uc9c0\ub9cc Android \ud50c\ub7ab\ud3fc \uad6c\uc870\ub97c \uc774\ud574\ud558\uae30 \uc704\ud574 \uc54c\uc544\ub458 \ud544\uc694\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">ViewModel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Activity\ub098 Fragment\uc5d0 \ud654\uba74 \uc0c1\ud0dc\ub97c \uc9c1\uc811 \uc800\uc7a5\ud558\uba74 Lifecycle \ubb38\uc81c\ub97c \ucc98\ub9ac\ud558\uae30 \uc5b4\ub824\uc6cc\uc9c4\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c <code>ViewModel<\/code>\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Activity \/ Compose -&gt; ViewModel -&gt; Repository -&gt; API \/ Database<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel\uc740 <strong>UI\uc5d0 \ud544\uc694\ud55c \uc0c1\ud0dc\uc640 UI \ub85c\uc9c1\uc744 \uad00\ub9ac\ud558\ub294 \uacc4\uce35<\/strong>\uc774\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/images.openai.com\/static-rsc-4\/A1ab2Ruc4m0C3D8DDiMVk66Cv1n93x5V-YBp65IiptcSB4rR0ikSVooeWDckp4i5S7PQaIw9Sl1QNnW9H9I43lIj1lesUmV5VEK9IQ6Shcl0fholNvXdscbsl6t7Qp7SVWRo_l817cc0pi__Q48kryEExFWQRK-dAXQUkHQ3QTwJvBeW8JsVdmIVexZQjDmK?purpose=fullsize\" alt=\"Image\" style=\"aspect-ratio:1.310867815951818;width:295px;height:auto\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>class UserViewModel(\n    private val repository: UserRepository\n) : ViewModel() {\n\n    fun loadUser() {\n        viewModelScope.launch {\n            val user = repository.getUser()\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Configuration Change\ub85c Activity\uac00 \ub2e4\uc2dc \uc0dd\uc131\ub418\ub294 \uacbd\uc6b0\uc5d0\ub3c4 ViewModel\uc740 \uc77c\ubc18\uc801\uc73c\ub85c \uc720\uc9c0\ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc ViewModel\uc774 \uc601\uad6c \uc800\uc7a5\uc18c\ub294 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud504\ub85c\uc138\uc2a4\uac00 \uc644\uc804\ud788 \uc885\ub8cc\ub418\uc5c8\ub2e4\uac00 \ub2e4\uc2dc \uc0dd\uc131\ub418\ub294 \uc0c1\ud669\uae4c\uc9c0 \uace0\ub824\ud55c\ub2e4\uba74 <code>SavedStateHandle<\/code>, Room, DataStore \ub4f1\uc758 \ubcc4\ub3c4 \uc800\uc7a5 \uc218\ub2e8\uc774 \ud544\uc694\ud558\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Coroutine<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kotlin \uae30\ubc18 Android \uac1c\ubc1c\uc5d0\uc11c \ube44\ub3d9\uae30 \ucc98\ub9ac\ub294 <code>Coroutine<\/code>\uc744 \ub9ce\uc774 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>viewModelScope.launch {\n    val user = repository.getUser()\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Coroutine\uc744 \uc0ac\uc6a9\ud558\uba74 \ube44\ub3d9\uae30 \uc791\uc5c5\uc744 \uc21c\ucc28\uc801\uc778 \ucf54\ub4dc\uc5d0 \uac00\uae4c\uc6b4 \ud615\ud0dc\ub85c \uc791\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Android\uc5d0\uc11c\ub294 \ud2b9\ud788 Lifecycle\uacfc \uc5f0\uacb0\ub41c Coroutine Scope\uac00 \uc911\uc694\ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ViewModel -&gt; viewModelScope -&gt; Coroutine -&gt; Network \/ Database<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel\uc774 \uc81c\uac70\ub418\uba74 \ud574\ub2f9 <code>viewModelScope<\/code>\uc5d0\uc11c \uc2e4\ud589 \uc911\uc778 Coroutine\ub3c4 \ud568\uaed8 \ucde8\uc18c\ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \ud654\uba74\uc758 \uc0dd\uba85\uc8fc\uae30\uc640 \ube44\ub3d9\uae30 \uc791\uc5c5\uc758 \uc0dd\uba85\uc8fc\uae30\ub97c \uc790\uc5f0\uc2a4\ub7fd\uac8c \uc5f0\uacb0\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Repository<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel\uc5d0\uc11c API\ub098 Database\ub97c \uc9c1\uc811 \ub2e4\ub8e8\uae30 \uc2dc\uc791\ud558\uba74 UI \uacc4\uce35\uc5d0 \ub370\uc774\ud130 \uc811\uadfc \ub85c\uc9c1\uc774 \uc11e\uc778\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c <code>Repository<\/code>\ub97c \uc911\uac04 \uacc4\uce35\uc73c\ub85c \ub454\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UI -&gt; ViewModel -&gt; Repository -&gt; Network \/ Database<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel\uc740 \ub370\uc774\ud130\uac00 \uc2e4\uc81c\ub85c \uc5b4\ub514\uc5d0\uc11c \uc624\ub294\uc9c0 \uc54c \ud544\uc694\uac00 \uc5c6\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class UserViewModel(\n    private val repository: UserRepository\n) : ViewModel() {\n\n    fun loadUser() {\n        viewModelScope.launch {\n            val user = repository.getUser()\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Repository\uac00 API\uc640 \ub85c\uceec Database\ub97c \uc870\ud569\ud558\uac70\ub098 \uc801\uc808\ud55c \ub370\uc774\ud130 \uc18c\uc2a4\ub97c \uc120\ud0dd\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ViewModel -&gt; Repository -&gt; API \/ Database<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud558\uba74 UI \uacc4\uce35\uacfc \ub370\uc774\ud130 \uacc4\uce35\uc758 \uacb0\ud569\uc744 \uc904\uc77c \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Room<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Android\uc5d0\uc11c \ub85c\uceec Database\ub97c \uc0ac\uc6a9\ud560 \ub54c \ub300\ud45c\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 <code>Room<\/code>\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Room\uc740 SQLite\ub97c \uc9c1\uc811 \ub2e4\ub8e8\ub294 \ub300\uc2e0 Kotlin \ucf54\ub4dc\uc640 SQL\uc744 \uc5f0\uacb0\ud574\uc8fc\ub294 \ucd94\uc0c1\ud654 \uacc4\uce35\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uae30\ubcf8\uc801\uc778 \uad6c\uc870\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Entity -&gt; DAO -&gt; Room Database -&gt; SQLite<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Entity\ub97c \uc815\uc758\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Entity\ndata class User(\n    @PrimaryKey val id: Int,\n    val name: String\n)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">DAO\uc5d0\uc11c \ub370\uc774\ud130 \uc811\uadfc\uc744 \uc815\uc758\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Dao\ninterface UserDao {\n\n    @Query(\"SELECT * FROM User\")\n    suspend fun getUsers(): List&lt;User&gt;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c\ub294 Repository\uac00 Room\uacfc Network API\ub97c \ud568\uaed8 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ViewModel -&gt; Repository -&gt; API \/ Room<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\uc0c1\ud0dc \uad00\ub9ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Compose\uc5d0\uc11c\ub294 \uc0c1\ud0dc \uad00\ub9ac\uac00 \ud575\uc2ec\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac04\ub2e8\ud55c \ub85c\uceec \uc0c1\ud0dc\ub77c\uba74 Composable \ub0b4\ubd80\uc5d0\uc11c \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var count by remember { mutableStateOf(0) }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc \ud654\uba74\uc744 \ub118\uc5b4 \uad00\ub9ac\ud574\uc57c \ud558\ub294 \uc0c1\ud0dc\ub77c\uba74 ViewModel\ub85c \uc62c\ub9ac\ub294 \uac83\uc774 \uc77c\ubc18\uc801\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Composable -&gt; ViewModel -&gt; UiState<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 UI \uc0c1\ud0dc\ub97c \ud558\ub098\uc758 \uac1d\uccb4\ub85c \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data class UserUiState(\n    val isLoading: Boolean = false,\n    val user: User? = null,\n    val error: String? = null\n)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub7ec\uba74 UI\ub294 <code>UiState<\/code>\ub97c \uae30\ubc18\uc73c\ub85c \ud654\uba74\uc744 \uacb0\uc815\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UiState -&gt; Loading \/ Success \/ Error<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubc29\uc2dd\uc740 UI\uc640 \uc0c1\ud0dc\ub97c \ubd84\ub9ac\ud558\uace0 \ud654\uba74\uc758 \ud604\uc7ac \uc0c1\ud0dc\ub97c \uba85\ud655\ud558\uac8c \ud45c\ud604\ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Navigation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Android\uc5d0\uc11c\ub294 Navigation \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc774\uc6a9\ud574 \ud654\uba74 \uc774\ub3d9\uc744 \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compose\uc5d0\uc11c\ub294 <code>Navigation Compose<\/code>\ub97c \uc0ac\uc6a9\ud574 route\ub97c \uc815\uc758\ud558\ub294 \ubc29\uc2dd\uc774 \uc77c\ubc18\uc801\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Navigation -&gt; Home \/ Profile \/ Settings \/ Detail<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01 Composable\uc5d0\uc11c \ud654\uba74 \uc774\ub3d9\uc744 \ubb34\uc791\uc815 \ucc98\ub9ac\ud558\uae30\ubcf4\ub2e4\ub294 Navigation \uacc4\uce35\uc5d0\uc11c \uacbd\ub85c\uc640 \uc774\ub3d9 \uad6c\uc870\ub97c \uad00\ub9ac\ud558\uba74 \ud654\uba74 \uad6c\uc870\ub97c \ud30c\uc545\ud558\uae30 \uc27d\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Android Manifest<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>AndroidManifest.xml<\/code>\uc740 Android \uc571\uc758 \uad6c\uc131 \uc815\ubcf4\ub97c \uc120\uc5b8\ud558\ub294 \ud30c\uc77c\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc571\uc758 \ucef4\ud3ec\ub10c\ud2b8, \uad8c\ud55c, \uc571 \uc124\uc815 \ub4f1\uc744 Android OS\uc5d0 \uc54c\ub824\uc900\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc778\ud130\ub137 \uad8c\ud55c\uc744 \uc120\uc5b8\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;uses-permission\n    android:name=\"android.permission.INTERNET\" \/&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Activity\ub3c4 \uc120\uc5b8\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;activity\n    android:name=\".MainActivity\" \/&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uad6c\uc870\uc801\uc73c\ub85c \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Android App -&gt; AndroidManifest.xml -&gt; Android OS<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Manifest\ub294 Android \uc2dc\uc2a4\ud15c\uc774 \uc571\uc744 \uc5b4\ub5bb\uac8c \uc778\uc2dd\ud558\uace0 \uc2e4\ud589\ud560\uc9c0 \uacb0\uc815\ud558\ub294 \uc911\uc694\ud55c \uc124\uc815 \ud30c\uc77c\uc774\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Gradle<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Android \uac1c\ubc1c\uc5d0\uc11c <code>Gradle<\/code>\uc740 \ube4c\ub4dc \uc2dc\uc2a4\ud15c\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc18c\uc2a4 \ucf54\ub4dc \ucef4\ud30c\uc77c\ubfd0\ub9cc \uc544\ub2c8\ub77c \uc758\uc874\uc131 \uad00\ub9ac, \ub9ac\uc18c\uc2a4 \ucc98\ub9ac, \ube4c\ub4dc \ubcc0\ud615 \uad00\ub9ac, APK\/AAB \uc0dd\uc131 \ub4f1\uc758 \uc791\uc5c5\uc744 \ub2f4\ub2f9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Source Code -&gt; Compile -&gt; Dependency Resolution -&gt; Resource Processing -&gt; APK \/ AAB<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc758\uc874\uc131\ub3c4 Gradle\uc744 \ud1b5\ud574 \uad00\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dependencies {\n    implementation(\"androidx.room:room-runtime:...\")\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Android\uc5d0\uc11c Gradle \uc124\uc815\uc774 \ubcf5\uc7a1\ud574\uc9c0\ub294 \uc774\uc720\ub3c4 \ub2e8\uc21c \ucef4\ud30c\uc77c\ub9cc \uc218\ud589\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c Android SDK, Plugin, Dependency, Build Variant \ub4f1\uc758 \uc5ec\ub7ec \uc694\uc18c\uac00 \ud568\uaed8 \uc5f0\uacb0\ub418\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">APK\uc640 AAB<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Android \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ubc30\ud3ec \ud615\uc2dd\ub3c4 \uad6c\ubd84\ud560 \ud544\uc694\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>APK<\/code>\ub294 Android \uae30\uae30\uc5d0 \uc124\uce58\ud560 \uc218 \uc788\ub294 \ud328\ud0a4\uc9c0 \ud615\uc2dd\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>AAB(Android App Bundle)<\/code>\ub294 \uc571 \ubc30\ud3ec\ub97c \uc704\ud55c \ubc88\ub4e4 \ud615\uc2dd\uc774\uba70, Google Play\uac00 \uc0ac\uc6a9\uc790 \uae30\uae30 \ud658\uacbd\uc5d0 \ub9de\ub294 APK\ub97c \uc0dd\uc131\ud558\ub294 \ub370 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Android Project -&gt; Gradle Build -&gt; AAB -&gt; Google Play -&gt; Device-specific APK<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1c\ubc1c \uacfc\uc815\uc5d0\uc11c\ub294 APK\ub97c \uc9c1\uc811 \uc124\uce58\ud574 \ud14c\uc2a4\ud2b8\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\uace0, Google Play \ubc30\ud3ec\uc5d0\uc11c\ub294 \uc77c\ubc18\uc801\uc73c\ub85c AAB\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Android \uac1c\ubc1c\uc758 \uc804\uccb4 \uad6c\uc870<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc55e\uc5d0\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc744 \ud558\ub098\ub85c \ud569\uce58\uba74 Android \uc571\uc758 \uad6c\uc870\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcfc \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Android OS -&gt; Activity \/ Lifecycle \/ Intent \/ Permission -&gt; UI -&gt; ViewModel -&gt; Repository -&gt; Network \/ Room<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">UI \uacc4\uce35\uc5d0\uc11c\ub294 \uc804\ud1b5\uc801\uc778 View \uc2dc\uc2a4\ud15c\uc774\ub098 Compose\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UI -&gt; View \/ Compose<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ube44\ub3d9\uae30 \uc791\uc5c5\uc740 Coroutine\uc774 \uc5f0\uacb0\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ViewModel -&gt; Coroutine -&gt; Repository -&gt; Network \/ Database<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub85c\uceec \ub370\uc774\ud130\ub294 Room\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Repository -&gt; Room -&gt; SQLite<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud504\ub85c\uc81d\ud2b8 \uc790\uccb4\ub294 Gradle\uc774 \ube4c\ub4dc\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Source Code -&gt; Gradle -&gt; APK \/ AAB<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\uad6d Android\ub97c \uacf5\ubd80\ud560 \ub54c \ud575\uc2ec\uc740 API\ub97c \ud558\ub098\uc529 \uc678\uc6b0\ub294 \uac83\uc774 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uba3c\uc800 <strong>Android OS\uac00 \uc571\uc744 \uc5b4\ub5bb\uac8c \uc2e4\ud589\ud558\uace0 \uad00\ub9ac\ud558\ub294\uc9c0<\/strong> \uc774\ud574\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8 \uc704\uc5d0\uc11c <strong>Activity\uc640 Lifecycle\uc774 \uc5b4\ub5bb\uac8c UI\uc758 \uc0dd\uba85\uc8fc\uae30\ub97c \uad00\ub9ac\ud558\ub294\uc9c0<\/strong>, <strong>ViewModel\uc774 \uc0c1\ud0dc\ub97c \uc5b4\ub5bb\uac8c \ubd84\ub9ac\ud558\ub294\uc9c0<\/strong>, <strong>Repository\uac00 \ub370\uc774\ud130 \uc811\uadfc\uc744 \uc5b4\ub5bb\uac8c \ucd94\uc0c1\ud654\ud558\ub294\uc9c0<\/strong>\ub97c \uc7a1\uc73c\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc804\uccb4 \uad6c\uc870\ub97c \uc555\ucd95\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Android OS -&gt; Activity \/ Lifecycle -&gt; UI -&gt; ViewModel -&gt; Repository -&gt; Network \/ Database<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \uac01 \uacc4\uce35\uc758 \uc5ed\ud560\uc744 \ud655\uc7a5\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Android OS -&gt; Activity \/ Compose -&gt; ViewModel -&gt; Repository -&gt; API \/ Room<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uad6c\uc870\uac00 \uba38\ub9bf\uc18d\uc5d0 \uc788\uc73c\uba74 \uc0c8\ub85c\uc6b4 Android API\ub97c \ub9cc\ub0ac\uc744 \ub54c\ub3c4 <strong>\uc774\uac83\uc774 UI\uc5d0 \uc18d\ud558\ub294\uc9c0, \uc0c1\ud0dc \uad00\ub9ac\uc5d0 \uc18d\ud558\ub294\uc9c0, \ub370\uc774\ud130 \uacc4\uce35\uc5d0 \uc18d\ud558\ub294\uc9c0, OS\uc640 \ud1b5\uc2e0\ud558\ub294 \uae30\ub2a5\uc778\uc9c0<\/strong> \ud310\ub2e8\ud560 \uc218 \uc788\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Android \uac1c\ubc1c\uc740 Android \ud50c\ub7ab\ud3fc \uc790\uccb4\uc758 \uad6c\uc870\ub97c \uc774\ud574\ud558\ub294 \uac83\uc774 \uc911\uc694\ud558\ub2e4. \ud575\uc2ec \uac1c\ub150\ub9cc \uc5f0\uacb0\ud574\ubcf4\uba74 Activity, Lifecycle, View, Compose, Intent, Service, ViewModel, Coroutine, Repository, Room, Gradle \ub4f1\uc774 \ud558\ub098\uc758 \uad6c\uc870 \uc548\uc5d0\uc11c \uc774\uc5b4\uc9c4\ub2e4. Android \uc571\uc740 \ub2e8\uc21c\ud788 \ud654\uba74\uc744 \ub9cc\ub4dc\ub294 \ud504\ub85c\uadf8\ub7a8\uc774 \uc544\ub2c8\ub2e4. Android OS\uac00 \uc571\uc758 \uc0dd\uba85\uc8fc\uae30\uc640 \ud504\ub85c\uc138\uc2a4\ub97c \uad00\ub9ac\ud558\uace0, \uc571\uc740 \uadf8 \uc704\uc5d0\uc11c UI\uc640 \uc0c1\ud0dc, \ub370\uc774\ud130 \ucc98\ub9ac\ub97c \uc218\ud589\ud55c\ub2e4. Android \uc571\uc758 \uc804\uccb4 \uad6c\uc870 \uac00\uc7a5 \uba3c\uc800 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48],"tags":[],"class_list":["post-1640","post","type-post","status-publish","format-standard","hentry","category-client"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1640"}],"version-history":[{"count":4,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1640\/revisions"}],"predecessor-version":[{"id":1930,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1640\/revisions\/1930"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}