{"id":830,"date":"2021-03-28T01:08:17","date_gmt":"2021-03-27T16:08:17","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=830"},"modified":"2025-09-12T18:21:45","modified_gmt":"2025-09-12T09:21:45","slug":"%ed%85%9c%ed%94%8c%eb%a6%bf%ea%b0%99%ec%9d%80-%ec%b4%88%ea%b8%b0-%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ec%84%a4%ec%a0%95","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2021\/03\/28\/830\/","title":{"rendered":"\ud15c\ud50c\ub9bf\uac19\uc740 \ucd08\uae30 \uc548\ub4dc\ub85c\uc774\ub4dc \ud504\ub85c\uc81d\ud2b8 \uc124\uc815"},"content":{"rendered":"\n<p>\ub85c\uadf8\ub97c \uc704\ud55c Timber\ub098 Architecture component\ub4e4\ucc98\ub7fc \uae30\ubcf8\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\ub4e4\uc774 Android Studio\ub85c \uc0dd\uc131\ud55c \ud504\ub85c\uc81d\ud2b8\uc5d0\ub294 \uc5c6\ub2e4. \ub098\ub9cc\uc758 \ud15c\ud50c\ub9bf\uc744 \ub9cc\ub4e4\uc5b4\ub193\uace0 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc9c0\ub9cc, \ubc29\ubc95\uc740 \ubaa8\ub974\uaca0\uc73c\ub2c8 \uae30\ubcf8\uc801\uc778 \ud504\ub85c\uc81d\ud2b8 \uc14b\ud305\uc744 \ud574\ub193\uace0 \uc774\uac78 \ubcf5\uc0ac\ud574\uc11c \uc0c8 \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc368\uc57c\uaca0\ub2e4\uace0 \uc0dd\uac01\ud588\ub2e4&#8230;\ub9cc, \uc2e4\uc81c\ub85c \ud574\ubcf4\ub2c8 \uc774\uac83\uc5ed\uc2dc \ud504\ub85c\uc81d\ud2b8 \ud30c\uc77c\ub4e4\uc5d0\uc11c \ud504\ub85c\uc81d\ud2b8 \uc774\ub984, \ud328\ud0a4\uc9c0 \uc774\ub984\ub4f1\uc744 \ucc3e\uc544 \ubcc0\uacbd\ud574\uc918\uc57c\ud55c\ub2e4. \uc774 \ubd80\ubd84\uc740 \uc790\ub3d9\ud654 \ud560 \uc218 \uc788\uc9c0 \uc54a\uc744\uae4c \uc0dd\uac01\uc740 \ub4dc\ub294\ub370, \uc544\uc9c1\uae4c\uc9c0\ub294 \ubb50\uac00 \ub354 \uac04\ud3b8\ud560\uc9c0 \ubaa8\ub974\uaca0\ub2e4. \uc5ec\uae30\uc11c\ub294 \ubb58 \ud574\uc57c\ud560\uc9c0, \ub0b4\uc6a9\ub9cc \uc815\ub9ac\ud574 \ubcf4\uaca0\ub2e4.<\/p>\n\n\n\n<p> Android Studio\uc5d0\uc11c \uc0c8 \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud558\uace0 \ucd94\uac00\ud560 \ub77c\uc774\ube0c\ub7ec\ub9ac \ubc0f \ud50c\ub7ec\uadf8\uc778 \uad00\ub828\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Timber log<\/strong><\/li>\n\n\n\n<li><strong>view binding or data binding<\/strong><\/li>\n\n\n\n<li><strong>navigation<\/strong><\/li>\n\n\n\n<li><strong>safe args<\/strong><\/li>\n\n\n\n<li><strong>viewmodel and livedata<\/strong><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">1. Timber log<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/JakeWharton\/timber\">Timber <\/a>(<a href=\"https:\/\/github.com\/JakeWharton\/timber\">https:\/\/github.com\/JakeWharton\/timber<\/a> ) \ub294 \uac1c\uc120\ub41c Android log library\uc774\ub2e4. SDK\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 Log\ubcf4\ub2e4 \uc0ac\uc6a9\uc774 \uc27d\ub2e4. \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc120 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ubaa8\ub4c8\uc758 build.gradle \uc5d0 \ucd94\uac00\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ Timber\nimplementation 'com.jakewharton.timber:timber:4.7.1'<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #768390\">\/\/ Timber<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">implementation <\/span><span style=\"color: #96D0FF\">&#39;com.jakewharton.timber:timber:4.7.1&#39;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Timber\ub294 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \ub531 \ud55c\ubc88 \ucd08\uae30\ud654\uac00 \ud544\uc694\ud558\ub2e4. \uba85\uc2dc\ub418\uc5b4 \uc788\uc9c4 \uc54a\uc9c0\ub9cc, Android\uc5d0\uc11c\ub294 Application \ud074\ub798\uc2a4\uac00 \uae00\ub85c\ubc8c\ub85c \uc0ac\uc6a9\ub41c\ub2e4. Timber\uc758 \ucd08\uae30\ud654\ub294 \uc0ac\uc6a9\uc790 \uc815\uc758 Application \ud074\ub798\uc2a4\uc758 onCreate()\uc5d0\uc11c \ud574\uc8fc\ub294\uac78 \ucd94\ucc9c\ud558\uace0 \uc788\ub2e4. \uac04\ub2e8\ud788 Application \ud074\ub798\uc2a4\ub97c \uc0c1\uc18d\ubc1b\uc544 \ub2e4\uc74c\uacfc \uac19\uc774 override\ud574\uc8fc\uace0 AndroidManifest.xml \uc5d0 \uba85\uc2dc\uc801\uc73c\ub85c \uc774 \ud074\ub798\uc2a4\ub97c \ud45c\uae30\ud574\uc900\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class MyApplication : Application() {\n    override fun onCreate() {\n        super.onCreate()\n\n        \/\/if(BuildConfig.DEBUG){\n        if(ApplicationConstants.TIMBER_DEBUG_LOG){\n            Timber.plant(Timber.DebugTree())\n        }else{\n            Timber.plant(ReleaseTree())\n        }\n    }\n}\n\nclass ReleaseTree : Timber.Tree() {\n\n    override fun log(priority: Int, tag: String?, message: String, throwable: Throwable?) {\n        \/\/ Don't log VERBOSE, DEBUG and INFO\n        if (priority == Log.VERBOSE) {\n            return\n        }\n\n\n        if (priority == Log.ERROR){\n            val t = throwable ?: Exception(message)\n\n            \/\/ Crashlytics\n\/\/            Crashlytics.setInt(CRASHLYTICS_KEY_PRIORITY, priority)\n\/\/            Crashlytics.setString(CRASHLYTICS_KEY_TAG, tag)\n\/\/            Crashlytics.setString(CRASHLYTICS_KEY_MESSAGE, message)\n\/\/            Crashlytics.logException(t)\n        }\n\n    }\n\n    companion object {\n        private val CRASHLYTICS_KEY_PRIORITY = \"Priority\"\n        private val CRASHLYTICS_KEY_TAG = \"Tag\"\n        private val CRASHLYTICS_KEY_MESSAGE = \"Message\"\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">MyApplication<\/span><span style=\"color: #ADBAC7\"> : <\/span><span style=\"color: #F69D50\">Application<\/span><span style=\"color: #ADBAC7\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">override<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">onCreate<\/span><span style=\"color: #ADBAC7\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">.<\/span><span style=\"color: #DCBDFB\">onCreate<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #768390\">\/\/if(BuildConfig.DEBUG){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\">(ApplicationConstants.TIMBER_DEBUG_LOG){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            Timber.<\/span><span style=\"color: #DCBDFB\">plant<\/span><span style=\"color: #ADBAC7\">(Timber.<\/span><span style=\"color: #DCBDFB\">DebugTree<\/span><span style=\"color: #ADBAC7\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        }<\/span><span style=\"color: #F47067\">else<\/span><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            Timber.<\/span><span style=\"color: #DCBDFB\">plant<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #DCBDFB\">ReleaseTree<\/span><span style=\"color: #ADBAC7\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">ReleaseTree<\/span><span style=\"color: #ADBAC7\"> : <\/span><span style=\"color: #F69D50\">Timber<\/span><span style=\"color: #ADBAC7\">.<\/span><span style=\"color: #DCBDFB\">Tree<\/span><span style=\"color: #ADBAC7\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">override<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">log<\/span><span style=\"color: #ADBAC7\">(priority: <\/span><span style=\"color: #F69D50\">Int<\/span><span style=\"color: #ADBAC7\">, tag: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">?, message: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">, throwable: <\/span><span style=\"color: #F69D50\">Throwable<\/span><span style=\"color: #ADBAC7\">?) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #768390\">\/\/ Don&#39;t log VERBOSE, DEBUG and INFO<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> (priority <\/span><span style=\"color: #F47067\">==<\/span><span style=\"color: #ADBAC7\"> Log.VERBOSE) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #F47067\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> (priority <\/span><span style=\"color: #F47067\">==<\/span><span style=\"color: #ADBAC7\"> Log.ERROR){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> t <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> throwable ?: <\/span><span style=\"color: #DCBDFB\">Exception<\/span><span style=\"color: #ADBAC7\">(message)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #768390\">\/\/ Crashlytics<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">\/\/            Crashlytics.setInt(CRASHLYTICS_KEY_PRIORITY, priority)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">\/\/            Crashlytics.setString(CRASHLYTICS_KEY_TAG, tag)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">\/\/            Crashlytics.setString(CRASHLYTICS_KEY_MESSAGE, message)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">\/\/            Crashlytics.logException(t)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">companion<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">object<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">private<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> CRASHLYTICS_KEY_PRIORITY <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;Priority&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">private<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> CRASHLYTICS_KEY_TAG <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;Tag&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">private<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> CRASHLYTICS_KEY_MESSAGE <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;Message&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>object ApplicationConstants {\n    const val TIMBER_DEBUG_LOG = true\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">object<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">ApplicationConstants<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">const<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> TIMBER_DEBUG_LOG <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;application\n    android:name=\"com.example.mynewapplication.MyApplication\"\n    ...\n>\n...\n&lt;\/application>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #8DDB8C\">application<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">android:name<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;com.example.mynewapplication.MyApplication&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">&lt;\/<\/span><span style=\"color: #8DDB8C\">application<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ubcf4\ud1b5\uc740 BuildConfig.DEBUG \ub85c Debug\uc2dc\uc5d0 \ub85c\uadf8\ub97c \ucc0d\uace0 Release\uc2dc\uc5d0\ub294 Error \ub85c\uadf8\ub9cc \ub530\ub85c \ucc98\ub9ac\ud558\ub3c4\ub85d ReleaseTree \ub97c \ub9cc\ub4e4\uc5b4 \uc0ac\uc6a9\ud55c\ub2e4. \ub098\uac19\uc740 \uacbd\uc6b0, \ud56d\uc0c1 debug \ube4c\ub4dc\ub85c \ud14c\uc2a4\ud2b8 \ud558\ub294 \uac83\ub3c4 \uc544\ub2c8\ub77c\uc11c \ubcc4\ub3c4\ub85c \uc0c1\uc218 \ud50c\ub798\uadf8\ub97c \ub9cc\ub4e4\uc5c8\ub2e4. ReleaseTree\ub294 \ub2e4\ub978 \uc0ac\ub78c\uc774 \ub9cc\ub4e0\uac78 \ub530\uc654\ub294\ub370, \uc608\uc678\ucc98\ub9ac \ubd80\ubd84\uc740 \ub2e4 \uc8fc\uc11d\ucc98\ub9ac \ud574\ub1a8\uc73c\ubbc0\ub85c \uc774 \ubd80\ubd84\uc5d0\uc11c \uc801\uc808\ud558\uac8c \uc790\uc2e0\uc758 \uc608\uc678\ucc98\ub9ac \ucf54\ub4dc\ub97c \ucd94\uac00\ud558\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. View Binding and Data Binding<\/h3>\n\n\n\n<p><a href=\"http:\/\/batmask.dothome.co.kr\/index.php\/2020\/10\/21\/608\/\">Data Binding\uc740 \uc774\uc804<\/a>\uc5d0 \ub2e4\ub918\uc73c\ub2c8 \uadf8\uac78 \ucc38\uace0\ud558\uace0, \ub2e8\uc21c\ud788 findViewById()\ub9cc \ud53c\ud558\uace0\uc790 \ud55c\ub2e4\uba74 \uc880 \ub354 \uac04\ub2e8\ud55c View Binding\uc744 \uc0ac\uc6a9\ud558\uba74 \ub41c\ub2e4. \uc774\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc120, build.gradle\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 buildFeatures\ub97c \ucd94\uac00\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>android {\n    ...\n    buildFeatures {\n        viewBinding true\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">android<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">buildFeatures<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        viewBinding <\/span><span style=\"color: #6CB6FF\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>view binding\uc740 \ube4c\ub4dc\uc2dc\uc810\uc5d0 xml\uc5d0 \ud45c\uc2dc\ub41c view layout\uc5d0 \ub300\ud55c \ud074\ub798\uc2a4\ub97c \ubbf8\ub9ac \ub9cc\ub4e4\uc5b4\uc900\ub2e4. Activity\ub098 fragment \uc548\uc5d0\uc11c \uc774 \ud074\ub798\uc2a4\ub4e4\uc744 \ucc38\uc870\ud574 \uc0ac\uc6a9\ud558\uba74 \ub41c\ub2e4. MainActivity \ud074\ub798\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \uc608\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class MainActivity : AppCompatActivity() {\n\n    private lateinit var appBarConfiguration: AppBarConfiguration\n    private lateinit var binding: ActivityMainBinding\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        Timber.d(\"MainActivity) onCreate()\")\n\n        binding = ActivityMainBinding.inflate(layoutInflater)\n        setContentView(binding.root)\n\n        setSupportActionBar(binding.toolbar)\n...<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">MainActivity<\/span><span style=\"color: #ADBAC7\"> : <\/span><span style=\"color: #F69D50\">AppCompatActivity<\/span><span style=\"color: #ADBAC7\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">private<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">lateinit<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">var<\/span><span style=\"color: #ADBAC7\"> appBarConfiguration: <\/span><span style=\"color: #F69D50\">AppBarConfiguration<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">private<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">lateinit<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">var<\/span><span style=\"color: #ADBAC7\"> binding: <\/span><span style=\"color: #F69D50\">ActivityMainBinding<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">override<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">onCreate<\/span><span style=\"color: #ADBAC7\">(savedInstanceState: <\/span><span style=\"color: #F69D50\">Bundle<\/span><span style=\"color: #ADBAC7\">?) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">.<\/span><span style=\"color: #DCBDFB\">onCreate<\/span><span style=\"color: #ADBAC7\">(savedInstanceState)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Timber.<\/span><span style=\"color: #DCBDFB\">d<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;MainActivity) onCreate()&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        binding <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> ActivityMainBinding.<\/span><span style=\"color: #DCBDFB\">inflate<\/span><span style=\"color: #ADBAC7\">(layoutInflater)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">setContentView<\/span><span style=\"color: #ADBAC7\">(binding.root)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">setSupportActionBar<\/span><span style=\"color: #ADBAC7\">(binding.toolbar)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc790\ub3d9 \uc0dd\uc131\ub418\ub294 \ud074\ub798\uc2a4 \uc774\ub984\uc740 xml \ud30c\uc77c\uc758 \uc774\ub984\uc744 \ub530\ub974\uace0 \ub4a4\uc5d0 Binding\uc774 \uc811\ubbf8\uc5b4\ub85c \ubd99\ub294\ub2e4. \uc704\uc758 \uc608\uc5d0\uc120 ActivityMainBinding\uc73c\ub85c \ub418\uc5b4 \uc788\ub294\uac78 \ubcfc \uc218 \uc788\ub2e4. \uae30\uc874\uacfc \ub2e4\ub974\uac8c, setContentView()\uc5d0 xml\uc744 \ub118\uaca8\uc8fc\uc9c0 \uc54a\uace0, \uc0dd\uc131\ud55c binding \uac1d\uccb4\ub97c \ub118\uaca8\uc8fc\uace0 \uc788\ub2e4. \uc774 \ud6c4 view\ub97c \ucc38\uc870\ud560 \ub54c\ub3c4, findViewById()\ub97c \uc548\uc4f0\uace0 binding\uac1d\uccb4\ub97c \uc774\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Navigation<\/h3>\n\n\n\n<p>Android Studio 3.3 \ubd80\ud130 \uc5d0\ub514\ud130\uae4c\uc9c0 \uc9c0\uc6d0\ud558\uae30 \uc2dc\uc791\ud55c \uac83\uc73c\ub85c, IOS \uc758 storyboard\uae30\ub2a5\uc774 \uc774\ubbf8 \uc624\ub798\uc804\uc5d0 \ud574\uc624\ub358 \uac83\uacfc \uc720\uc0ac\ud558\uac8c \uc571 \ud654\uba74\uac04 \uc804\ud658\uc744 \uc27d\uac8c \ud560 \uc218 \uc788\ub3c4\ub85d \uad6c\ud604\ub418\uc5c8\ub2e4. \uc65c \uc9c4\uc791 \uc774\ub807\uac8c \uc548\ud588\uc744\uae4c \uc2f6\uc744 \uc815\ub3c4. navigation \uae30\ub2a5 \uc124\uba85\uc744 \uc704\ud55c\uac8c \uc544\ub2c8\ub2c8\uae4c <a href=\"https:\/\/developer.android.com\/guide\/navigation\">\uc790\uc138\ud55c\uac74 \uacf5\uc2dd \uc0ac\uc774\ud2b8\ub97c \ucc38\uace0\ud558\uace0<\/a> \ubc14\ub85c \ub77c\uc774\ube0c\ub7ec\ub9ac \ucd94\uac00 \ubd80\ubd84\uc744 \uc0b4\ud3b4\ubcf4\uc790. <br><\/p>\n\n\n\n<p>\ucd5c\uc2e0\uc758 Android Studio\ub97c \uc0ac\uc6a9\uc911\uc774\ub77c\uba74, \uc544\ub9c8 \uc790\ub3d9\uc73c\ub85c Navigation \ubd80\ubd84\uc744 \ucd94\uac00\ud574\uc904 \uac83\uc774\ub2e4. \uc218\ub3d9\uc73c\ub85c \ud574\uc8fc\ub294 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\ub2e4. \uc6b0\uc120, build.gradle \ud30c\uc77c\uc5d0 \ub2e4\uc74c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucd94\uac00\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>dependencies {\n\n    ...\n    \/\/ Kotlin navigation\n    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.4'\n    implementation 'androidx.navigation:navigation-ui-ktx:2.3.4'\n\n    \/\/ Feature module support\n    implementation 'androidx.navigation:navigation-dynamic-features-fragment:2.3.4'\n\n    \/\/ Testing Navigation\n    androidTestImplementation 'androidx.navigation:navigation-testing:2.3.4'\n\n    ...<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">dependencies<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #768390\">\/\/ Kotlin navigation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    implementation <\/span><span style=\"color: #96D0FF\">&#39;androidx.navigation:navigation-fragment-ktx:2.3.4&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    implementation <\/span><span style=\"color: #96D0FF\">&#39;androidx.navigation:navigation-ui-ktx:2.3.4&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #768390\">\/\/ Feature module support<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    implementation <\/span><span style=\"color: #96D0FF\">&#39;androidx.navigation:navigation-dynamic-features-fragment:2.3.4&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #768390\">\/\/ Testing Navigation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    androidTestImplementation <\/span><span style=\"color: #96D0FF\">&#39;androidx.navigation:navigation-testing:2.3.4&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 \ucd94\uac00\ub418\uc5c8\uace0, \uc2e4\uc81c\ub85c \uc0ac\uc6a9\ud560 \ud30c\ud2b8\ub97c \ucd94\uac00\ud574\ubcf4\uc790. Navigation\uc5d0\ub294 Navigation Graph, NavHost, NavController\uc758 \uc138\uac00\uc9c0\uac00 \ud544\uc694\ud558\ub2e4. Navigation graph\ub294 xml\ud30c\uc77c\ub85c Android Studio\uc758 \ube44\uc8fc\uc5bc \uc5d0\ub514\ud130\ub85c \ud654\uba74\uac04 \uc774\ub3d9\uc744 \uc5b4\ub5bb\uac8c \ud560\uc9c0 \uc815\uc758\ud558\ub294 \ubd80\ubd84\uc774\ub2e4. NavHost\ub294 \ud654\uba74\ub4e4(\ubcf4\ud1b5\uc740 Fragment\ub4e4)\uc774 \ub4e4\uc5b4\uac08 \ucee8\ud14c\uc774\ub108\uac19\uc740 \uac83\uc774\ub2e4. NavController\ub294 NavHost\ub0b4\uc5d0\uc11c \uc2e4\uc81c \ud654\uba74\uac04 \uc804\ud658\uc744 \ucc98\ub9ac\ud574\uc900\ub2e4. <\/p>\n\n\n\n<p>Navigation\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac \ucd94\uac00 \uc774\ud6c4\ub294 \uac01 \uc571\ub9c8\ub2e4 \uad6c\ud604\uc758 \ubb38\uc81c\uac00 \ub41c\ub2e4. \ub77c\uc774\ube0c\ub7ec\ub9ac\ub9cc \ucd94\uac00\ud558\uace0 \uad6c\ud604\uc740 \uc54c\uc544\uc11c \ud574\uc57c\uaca0\uc9c0\ub9cc, Basic Activity template\uae30\uc900\uc73c\ub85c \ub098\uba38\uc9c0 \ubd80\ubd84\ub3c4 \uac04\ub2e8\ud788 \uc54c\uc544\ubcf4\uc790.<\/p>\n\n\n\n<p>Basic Activity template\uc5d0\ub294 \uae30\ubcf8\uc73c\ub85c \uc0dd\uc131\ub418\uc5b4 \uc788\ub294 Navigation graph\ub97c \ucd94\uac00\ud574\ubcf4\uc790. Android Studio\uc5d0\uc11c res \ub514\ub809\ud1a0\ub9ac\uc5d0 \ub9c8\uc6b0\uc2a4 \uc6b0\ud074\ub9ad\uc73c\ub85c \ud31d\uc5c5 \uba54\ub274\ub97c \ub744\uc6b0\uace0 New &gt; Android Resource File\uc744 \uc120\ud0dd\ud55c\ub2e4. New Resource File dialog\uc5d0\uc11c &#8220;nav_graph&#8221;\ub85c \uc774\ub984\uc744 \ub9cc\ub4e4\uace0(\uc774\ub984\uc740 \ubc14\uafc0 \uc218 \uc788\ub2e4), Resource Type\uc744 Navigation\uc73c\ub85c \uc9c0\uc815\ud574 \uc0dd\uc131\ud55c\ub2e4. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"838\" height=\"481\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2021\/03\/nav_graph01.png\" alt=\"\" class=\"wp-image-851\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/nav_graph01.png 838w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/nav_graph01-300x172.png 300w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/nav_graph01-768x441.png 768w\" sizes=\"auto, (max-width: 838px) 100vw, 838px\" \/><\/figure>\n<\/div>\n\n\n<p>\ub9ac\uc18c\uc2a4\ud30c\uc77c\uc744 \ucd94\uac00\ud558\uba74, \uc544\ub798\uc640 \uac19\uc774 res \ubc11\uc5d0 \ud3f4\ub354\uc640 \ud574\ub2f9 \ud30c\uc77c\uc774 \uc0dd\uc131\ub41c\uac78 \ud655\uc778 \uac00\ub2a5\ud558\ub2e4. xml\ud30c\uc77c\uc744 \uc120\ud0dd\ud558\uba74, Navigation Editor\uac00 \ub72c\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"331\" height=\"153\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2021\/03\/nav_graph02.png\" alt=\"\" class=\"wp-image-852\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/nav_graph02.png 331w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/nav_graph02-300x139.png 300w\" sizes=\"auto, (max-width: 331px) 100vw, 331px\" \/><\/figure>\n<\/div>\n\n\n<p>Basic Activity template\ub85c \uc0dd\uc131\ud55c \uacbd\uc6b0, nav_graph.xml\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?>\n&lt;navigation xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:id=\"@+id\/nav_graph\"\n    app:startDestination=\"@id\/FirstFragment\">\n\n    &lt;fragment\n        android:id=\"@+id\/FirstFragment\"\n        android:name=\"com.example.mynewapplication.FirstFragment\"\n        android:label=\"@string\/first_fragment_label\"\n        tools:layout=\"@layout\/fragment_first\">\n\n        &lt;action\n            android:id=\"@+id\/action_FirstFragment_to_SecondFragment\"\n            app:destination=\"@id\/SecondFragment\" \/>\n    &lt;\/fragment>\n    &lt;fragment\n        android:id=\"@+id\/SecondFragment\"\n        android:name=\"com.example.mynewapplication.SecondFragment\"\n        android:label=\"@string\/second_fragment_label\"\n        tools:layout=\"@layout\/fragment_second\">\n\n        &lt;action\n            android:id=\"@+id\/action_SecondFragment_to_FirstFragment\"\n            app:destination=\"@id\/FirstFragment\" \/>\n    &lt;\/fragment>\n&lt;\/navigation><\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">&lt;?<\/span><span style=\"color: #8DDB8C\">xml<\/span><span style=\"color: #6CB6FF\"> version<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;1.0&quot;<\/span><span style=\"color: #6CB6FF\"> encoding<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;utf-8&quot;<\/span><span style=\"color: #ADBAC7\">?&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #8DDB8C\">navigation<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">xmlns:android<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">xmlns:app<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;http:\/\/schemas.android.com\/apk\/res-auto&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">xmlns:tools<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;http:\/\/schemas.android.com\/tools&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">android:id<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@+id\/nav_graph&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">app:startDestination<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@id\/FirstFragment&quot;<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    &lt;<\/span><span style=\"color: #8DDB8C\">fragment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">android:id<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@+id\/FirstFragment&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">android:name<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;com.example.mynewapplication.FirstFragment&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">android:label<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@string\/first_fragment_label&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">tools:layout<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@layout\/fragment_first&quot;<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        &lt;<\/span><span style=\"color: #8DDB8C\">action<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">android:id<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@+id\/action_FirstFragment_to_SecondFragment&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">app:destination<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@id\/SecondFragment&quot;<\/span><span style=\"color: #ADBAC7\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    &lt;\/<\/span><span style=\"color: #8DDB8C\">fragment<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    &lt;<\/span><span style=\"color: #8DDB8C\">fragment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">android:id<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@+id\/SecondFragment&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">android:name<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;com.example.mynewapplication.SecondFragment&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">android:label<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@string\/second_fragment_label&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">tools:layout<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@layout\/fragment_second&quot;<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        &lt;<\/span><span style=\"color: #8DDB8C\">action<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">android:id<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@+id\/action_SecondFragment_to_FirstFragment&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">app:destination<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@id\/FirstFragment&quot;<\/span><span style=\"color: #ADBAC7\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    &lt;\/<\/span><span style=\"color: #8DDB8C\">fragment<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">&lt;\/<\/span><span style=\"color: #8DDB8C\">navigation<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>navigation \ud0dc\uadf8\uc548\uc5d0 fragment \ud0dc\uadf8\ub294 \uac01 destination fragment\ub4e4\uc744 \ud45c\uc2dc\ud558\uace0 \uc788\uc73c\uba70, \uadf8 \uc548\uc5d0 action\ud0dc\uadf8\ub294 \uadf8 action\uc774 \uc2e4\ud589\ub420 \ub54c \uc5b4\ub5a4 destination fragment\ub85c \uc774\ub3d9\ud560\uc9c0 \ud45c\uc2dc\ud558\uace0 \uc788\ub2e4. \uc5ec\uae30\uc11c\ub294 \ub450\uac1c\uc758 fragment\uc640 \uac01\uac01 \uc11c\ub85c\ub97c destination\uc73c\ub85c \uc0bc\ub294 action\uc744 \ud558\ub098\uc529 \uac00\uc9c0\uace0 \uc788\ub2e4.<\/p>\n\n\n\n<p> Basic Activity template\ub85c \uc0dd\uc131\ud55c \ud504\ub85c\uc81d\ud2b8\uae30\uc900\uc73c\ub85c content_main.xml \ub808\uc774\uc544\uc6c3 \ud30c\uc77c\uc744 \uc0b4\ud3b4\ubcf4\uba74, \ub2e4\uc74c \ubd80\ubd84\uc744 \ubcfc \uc218 \uc788\ub2e4. \ud604\uc7ac Android Studio\ub294 &lt;fragment \ud0dc\uadf8\ub97c \uc0dd\uc131\ud558\ub294\ub370, \uc774 \uc5ed\ud560\uc744 \ud558\uae30\uc704\ud574 FragmentContainerView\uac00 \uc0c8\ub85c \uc0dd\uacbc\uc73c\uba70 \ubcf4\ub2e4 \uc801\uc808\ud574 \uc218\uc815\ud588\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;androidx.fragment.app.FragmentContainerView\n    android:id=\"@+id\/nav_host_fragment_content_main\"\n    android:name=\"androidx.navigation.fragment.NavHostFragment\"\n    android:layout_width=\"0dp\"\n    android:layout_height=\"0dp\"\n    app:defaultNavHost=\"true\"\n    app:layout_constraintBottom_toBottomOf=\"parent\"\n    app:layout_constraintLeft_toLeftOf=\"parent\"\n    app:layout_constraintRight_toRightOf=\"parent\"\n    app:layout_constraintTop_toTopOf=\"parent\"\n    app:navGraph=\"@navigation\/nav_graph\" \/><\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #8DDB8C\">androidx.fragment.app.FragmentContainerView<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">android:id<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@+id\/nav_host_fragment_content_main&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">android:name<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;androidx.navigation.fragment.NavHostFragment&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">android:layout_width<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;0dp&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">android:layout_height<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;0dp&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">app:defaultNavHost<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;true&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">app:layout_constraintBottom_toBottomOf<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;parent&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">app:layout_constraintLeft_toLeftOf<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;parent&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">app:layout_constraintRight_toRightOf<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;parent&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">app:layout_constraintTop_toTopOf<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;parent&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">app:navGraph<\/span><span style=\"color: #ADBAC7\">=<\/span><span style=\"color: #96D0FF\">&quot;@navigation\/nav_graph&quot;<\/span><span style=\"color: #ADBAC7\"> \/&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc8fc\ubaa9\ud560 \ubd80\ubd84\uc740 android:name \uc774 NavHostFragment\ub85c \uc9c0\uc815\ub418\uc5b4\uc788\ub2e4. \uc774\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \uae30\ubcf8\uc73c\ub85c \uc81c\uacf5\ud558\ub294 NavHost\uc774\ub2e4. app:defaultNavHost\uac00 true\uc778\uac74 \uc774\uac8c default NavHost\ub77c\ub294 \uac83\uc744 \ub9d0\ud574\uc8fc\uba70, app:navGraph\ub294 \uc0dd\uc131\ud588\ub358 nav_graph\ub97c\uc9c0\uc815\ud558\uace0 \uc788\ub2e4. <\/p>\n\n\n\n<p>\uadf8\ub7fc NavController\ub294 \uc5b4\ub5bb\uac8c \uc0ac\uc6a9\ud560\uae4c? Kotlin\uae30\uc900\uc73c\ub85c Activity, Fragment\ub098 View\uc5d0 findNavController() \uba54\uc18c\ub4dc\uac00 \uc874\uc7ac\ud55c\ub2e4. \uc774\ub97c \uc774\uc6a9\ud574\uc11c NavController\ub97c \uc5bb\uc740 \ud6c4, navigate(action) \uba54\uc18c\ub4dc\ub97c \uc774\uc6a9\ud574 nav_graph.xml\uc5d0 \uc815\uc758\ub41c action\uc744 \uc218\ud589\ud558\uace0 destination fragment\ub85c \uc774\ub3d9\ud558\uac8c \ub41c\ub2e4. Basic Activity template \uae30\uc900\uc73c\ub85c FirstFragment\ub97c \ubcf4\uba74, \ucf54\ub4dc\uc758 \uc0ac\uc6a9\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n    super.onViewCreated(view, savedInstanceState)\n\n    binding.buttonFirst.setOnClickListener {\n        findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">override<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">onViewCreated<\/span><span style=\"color: #ADBAC7\">(view: <\/span><span style=\"color: #F69D50\">View<\/span><span style=\"color: #ADBAC7\">, savedInstanceState: <\/span><span style=\"color: #F69D50\">Bundle<\/span><span style=\"color: #ADBAC7\">?) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">.<\/span><span style=\"color: #DCBDFB\">onViewCreated<\/span><span style=\"color: #ADBAC7\">(view, savedInstanceState)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    binding.buttonFirst.<\/span><span style=\"color: #DCBDFB\">setOnClickListener<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">findNavController<\/span><span style=\"color: #ADBAC7\">().<\/span><span style=\"color: #DCBDFB\">navigate<\/span><span style=\"color: #ADBAC7\">(R.id.action_FirstFragment_to_SecondFragment)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ubc84\ud2bc\uc758 \ud074\ub9ad \ub9ac\uc2a4\ub108\uc5d0\uc11c NavContoller\ub97c \uc5bb\uc740 \ud6c4, navigate\ub85c action\uc744 \uc2e4\ud589\ud558\uace0 \uc788\ub2e4. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Safe args<\/h3>\n\n\n\n<p>\uc55e\uc11c navigation\uc5d0\uc11c \ud654\uba74\uac04 \uc804\ud658\uc2dc, \uac12\uc744 \uc804\ub2ec \ud560 \uc218 \uc788\ub294\ub370 android\uc5d0\uc120 bundle\uc744 \ud1b5\ud574 \uc774 \uc791\uc5c5\uc744 \ud574\uc8fc\uace0 \uc788\ub2e4. \ubb38\uc81c\ub294 bundle\uc548\uc758 \uac12\uc744 \uc0ac\uc6a9\uc790\uac00 \uc54c\uc544\uc11c &#8216;\uc798&#8217; \ucc98\ub9ac\ud574\uc57c\ub9cc\ud55c\ub2e4. \uc774\ub97c \ubcf4\uc644\ud558\uae30 \uc704\ud574 type safety\ub97c \uccb4\ud06c\ud574\uc8fc\ub294 Safe args \ud50c\ub7ec\uadf8\uc778\uc744 \uc81c\uacf5\ud55c\ub2e4. \uc5ec\uae30\uc11c \uc0ac\uc6a9\ubc95\uc744 \ub2e4\ub8e8\uc9c0\ub294 \uc54a\uaca0\ub2e4.<\/p>\n\n\n\n<p>\uc8fc\uc758\ud560\uc810\uc740 \ud50c\ub7ec\uadf8\uc778\uc744 \ucd94\uac00\ud558\uae30\uc704\ud574 Project level\uc758 build.gradle\uc5d0 classpath\ub97c \ucd94\uac00\ud574\uc57c\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>buildscript {\n    ext.kotlin_version = \"1.4.31\"\n    repositories {\n        google()\n        mavenCentral()\n    }\n    dependencies {\n        classpath \"com.android.tools.build:gradle:4.2.0-beta06\"\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n\n        \/\/ navigation safe args. safe args is plug-in so here.\n        classpath \"androidx.navigation:navigation-safe-args-gradle-plugin:2.3.4\" \/\/ &lt;-- here\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">buildscript<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    ext.kotlin_version <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;1.4.31&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">repositories<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">google<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">mavenCentral<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">dependencies<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        classpath <\/span><span style=\"color: #96D0FF\">&quot;com.android.tools.build:gradle:4.2.0-beta06&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        classpath <\/span><span style=\"color: #96D0FF\">&quot;org.jetbrains.kotlin:kotlin-gradle-plugin:<\/span><span style=\"color: #6CB6FF\">$kotlin_version<\/span><span style=\"color: #96D0FF\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #768390\">\/\/ navigation safe args. safe args is plug-in so here.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        classpath <\/span><span style=\"color: #96D0FF\">&quot;androidx.navigation:navigation-safe-args-gradle-plugin:2.3.4&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #768390\">\/\/ &lt;-- here<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc704\uc640 \uac19\uc774 classpath\ub97c \ucd94\uac00\ud55c \ud6c4, \uc571 \ubaa8\ub4c8 build.gradle\uc5d0 \ud574\ub2f9 plugin\uc744 \ucd94\uac00\ud574\uc57c\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>plugins {\n    id 'com.android.application'\n    id 'kotlin-android'\n    id 'androidx.navigation.safeargs'    \/\/ &lt;-- here\n    id 'kotlin-kapt'\n}\n...<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">plugins<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    id <\/span><span style=\"color: #96D0FF\">&#39;com.android.application&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    id <\/span><span style=\"color: #96D0FF\">&#39;kotlin-android&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    id <\/span><span style=\"color: #96D0FF\">&#39;androidx.navigation.safeargs&#39;<\/span><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #768390\">\/\/ &lt;-- here<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    id <\/span><span style=\"color: #96D0FF\">&#39;kotlin-kapt&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">5. viewmodel and live data<\/h3>\n\n\n\n<p>build.gradle\uc5d0 \ub2e4\uc74c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucd94\uac00\ud55c\ub2e4. live data, viewmodel\uc758 \uc0ac\uc6a9\uc5d0 \ub300\ud574\uc11c \uc5ec\uae30\uc120 \ub2e4\ub8e8\uc9c0 \uc54a\uaca0\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>dependencies {\n\n    ...\n    \/\/ viewmodel\n    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'\n    \/\/ livedata\n    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">dependencies<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #768390\">\/\/ viewmodel<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    implementation <\/span><span style=\"color: #96D0FF\">&#39;androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #768390\">\/\/ livedata<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    implementation <\/span><span style=\"color: #96D0FF\">&#39;androidx.lifecycle:lifecycle-livedata-ktx:2.3.1&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong><span class=\"has-inline-color has-vivid-red-color\">\uae30\ubcf8\uc801\uc73c\ub85c \ud544\uc694\ud55c \ucf54\ub4dc\ub4e4\uc744 \uc0b4\ud3b4\ubd24\ub2e4. \uc774 \ub0b4\uc6a9\uc744 \uae30\ubc18\uc73c\ub85c \uc0c8 \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud560 \ub54c \ud574\ub2f9 \ub0b4\uc6a9\ub4e4\uc744 \ucd94\uac00\ud574\uc8fc\uba74\ub41c\ub2e4. \uc774\uc0c1\uc801\uc778 \ubc29\ubc95\uc740 \uc774\uac78 template\ub85c \ub9cc\ub4dc\ub294 \uac83\uc774\ub098 \ud604\uc7ac\ub85c\uc11c\ub294 \ubc29\ubc95\uc774 \uc5c6\ub294\uac70 \uac19\ub2e4. \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud574\ub193\uace0 \ubcf5\uc0ac\ud574\uc11c \uc4f0\ub294 \ubc29\ubc95\uc744 \uc0dd\uac01\ud574 \ubd24\uc73c\ub098, \uc2e4\uc81c\ub85c \ud574\ubcf8\uacb0\uacfc \uc190\uc774 \ub9ce\uc774\uac00\ub294\uac74 \ub9c8\ucc2c\uac00\uc9c0\ub85c \ubcf4\uc778\ub2e4. \ubb50 \uae30\uc874 \ud504\ub85c\uc81d\ud2b8\ub97c \ubcc0\uacbd\ud558\ub294 \uacbd\uc6b0\ub3c4 \uc788\uc744\ud14c\ub2c8 \uadf8\ub798\ub3c4 \uc54c\uc544\ubcf4\uc790\uba74, \uc544\ub798\uc5d0 \uc774\uc5b4\uc9c0\ub294 \ub2e4\uc74c \ud30c\ud2b8\uc758 \ub0b4\uc6a9\uc744 \ucc38\uace0\ud558\uc790.<\/span><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-black-color has-css-opacity has-black-background-color has-background is-style-dots\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Project name \ubc0f package name \ubcc0\uacbd\ud558\uae30<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">0. Clean Project<\/h3>\n\n\n\n<p>\ud15c\ud50c\ub9bf\uc6a9 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uc0dd\uc131\ub41c \ud30c\uc77c\uc744 \uc81c\uac70\ud558\uae30 \uc704\ud574, Android Studio &gt; Build &gt; Clean Project \ub97c \uc2e4\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Project \ud3f4\ub354 \ubcf5\uc0ac \ubc0f \uc774\ub984 \ubcc0\uacbd<\/h3>\n\n\n\n<p> \ud15c\ud50c\ub9bf\uc6a9 \ud504\ub85c\uc81d\ud2b8\ub97c \ubcf5\uc0ac\ud574\uc11c \uce74\ud53c\ubcf8\uc744 \ub9cc\ub4e0 \ud6c4, \ud3f4\ub354\uba85\uc744 \uc0c8\ub85c\ub9cc\ub4e4 \ud504\ub85c\uadf8\ub7a8 \uc774\ub984\uc73c\ub85c \ubcc0\uacbd\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Project name \ubcc0\uacbd<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Android Studio\uc5d0\uc11c \ubcf5\uc0ac \ud6c4 \uc774\ub984\uc744 \ubcc0\uacbd\ud55c \ud504\ub85c\uc81d\ud2b8 \ud3f4\ub354\ub97c New &gt; import project \ub85c \ud3f4\ub354\ub97c \uc9c0\uc815\ud574\uc11c \uc5f0\ub2e4. <\/li>\n\n\n\n<li>settings.gradle \ud30c\uc77c\uc5d0\uc11c rootProject.name\uc744 \uc0c8 \uc774\ub984\uc73c\ub85c \ubcc0\uacbd\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>rootProject.name = \"MyNewApplication\"<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">rootProject.name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;MyNewApplication&quot;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3. App name \ubcc0\uacbd<\/h3>\n\n\n\n<p>res &gt; values &gt; strings.xml \uc5d0 \uc788\ub294 &#8220;app_name&#8221; \uac12\uc744 \uc0c8\ub85c\uc6b4 \uc571 \uc774\ub984\uc73c\ub85c \ubcc0\uacbd\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Package name \ubcc0\uacbd<\/h3>\n\n\n\n<p>package name\uc740 Android Studio\uc758 refactor \uae30\ub2a5\uc744 \uc774\uc6a9\ud55c\ub2e4. package name\uc5d0 \ud31d\uc5c5\uba54\ub274\ub97c \ub744\uc6b0\uace0 refactor &gt; rename\uc744 \uc120\ud0dd\ud55c\ub2e4. \ud504\ub85c\uc81d\ud2b8 \ud0d0\uc0c9\uae30\uc5d0\uc11c package directory \ub610\ub294 AndroidManifest.xml \uc5d0 \uc788\ub294 package \uc774\ub984\uc5d0 \uc6b0\ud074\ub9ad\uc73c\ub85c \ud31d\uc5c5\uba54\ub274\ub97c \ub744\uc6cc\ub3c4 \ub41c\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"587\" height=\"80\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2021\/03\/template_project01.png\" alt=\"\" class=\"wp-image-834\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project01.png 587w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project01-300x41.png 300w\" sizes=\"auto, (max-width: 587px) 100vw, 587px\" \/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"627\" height=\"404\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2021\/03\/template_project02.png\" alt=\"\" class=\"wp-image-835\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project02.png 627w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project02-300x193.png 300w\" sizes=\"auto, (max-width: 627px) 100vw, 627px\" \/><\/figure>\n<\/div>\n\n\n<p>package \uc774\ub984\uc744 \ubc14\uafc0 \uac83\uc778\uc9c0, directory \uc774\ub984\ub9cc \ubc14\uafc0 \uac83\uc778\uc9c0 \ubb3c\uc5b4\ubcf4\ub294\ub370, Rename package \ub97c  \uc120\ud0dd\ud55c\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"560\" height=\"218\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2021\/03\/template_project03.png\" alt=\"\" class=\"wp-image-836\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project03.png 560w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project03-300x117.png 300w\" sizes=\"auto, (max-width: 560px) 100vw, 560px\" \/><\/figure>\n<\/div>\n\n\n<p>\uc790\ub3d9\uc73c\ub85c \uc5ec\uae30\uc800\uae30 \ubd84\uc0b0\ub41c package \uc774\ub984\ub4e4\uc774 \ubcc0\uacbd\ub420 \uac83\uc774\ub2e4. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. applicationId \ubcc0\uacbd<\/h3>\n\n\n\n<p>\ubaa8\ub4c8\uc758 build.gradle(:app) \ud30c\uc77c\uc744 \uc5f0\ub2e4. defaultConfig \uc5d0 \uc788\ub294 applicationId\ub97c \ubcc0\uacbd\ud574\uc900\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"487\" height=\"285\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2021\/03\/template_project04.png\" alt=\"\" class=\"wp-image-837\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project04.png 487w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project04-300x176.png 300w\" sizes=\"auto, (max-width: 487px) 100vw, 487px\" \/><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">6. \uc0c8\ub85c \ucd94\uac00\ud55c Application \ud074\ub798\uc2a4 \uc774\ub984 \ubcc0\uacbd<\/h3>\n\n\n\n<p>Timber\ub97c \ucd94\uac00\ud558\uba74\uc11c \ucd94\uac00\ud588\ub358 Application class\ub97c \ubcc0\uacbd\ud55c\ub2e4. \uc774\ub807\uac8c \ubcc0\uacbd\ud558\uc9c0 \uc54a\uace0 \ub2e4 \ub611\uac19\uc740 \uc774\ub984\uc744 \uc0ac\uc6a9\ud574\ub3c4 \ub420 \uac70 \uac19\uae34\ud558\ub2e4. \uc5ed\uc2dc\ub098 Android Studio\uc5d0\uc11c \ud31d\uc5c5\uba54\ub274\ub97c \ub744\uc6cc refactor &gt; rename\uc744 \uc120\ud0dd\ud55c\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"582\" height=\"163\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2021\/03\/template_project05.png\" alt=\"\" class=\"wp-image-838\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project05.png 582w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project05-300x84.png 300w\" sizes=\"auto, (max-width: 582px) 100vw, 582px\" \/><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">7. theme \uc774\ub984 \ubcc0\uacbd<\/h3>\n\n\n\n<p>\ub2e4 \ub410\ub098 \uc2f6\uc5c8\ub294\ub370, Theme \uc774\ub984\uc774 \uc608\uc804 package \uba85\uc73c\ub85c \ub418\uc5b4\uc788\ub2e4. res &gt; values &gt; themes &gt; themes.xml \ud30c\uc77c\uc744 \uc5f0\ub2e4. style \uc774\ub984\uc5d0 \uc6b0\ud074\ub9ad\ud558\uc5ec popup \uba54\ub274\ub97c \ub744\uc6b0\uace0 refactor &gt; rename \uc73c\ub85c \uc774\ub984\uc744 \ubcc0\uacbd\ud574\uc900\ub2e4. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"810\" height=\"147\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2021\/03\/template_project06.png\" alt=\"\" class=\"wp-image-839\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project06.png 810w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project06-300x54.png 300w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/03\/template_project06-768x139.png 768w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/figure>\n<\/div>\n\n\n<p><strong><span class=\"has-inline-color has-vivid-red-color\">\ubcf4\ub2e4\uc2dc\ud53c, \uc0c8 \ud504\ub85c\uc81d\ud2b8\uc5d0 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub4e4\uc744 \ucd94\uac00\ud558\ub294\uac8c \ub354 \uac04\ud3b8\ud560\uc9c0\ub3c4 \ubaa8\ub974\uaca0\ub2e4. \uc774\uac8c \ud15c\ud50c\ub9bf\ud654 \ub418\uc57c \ud3b8\ud560\ud150\ub370, \uc65c \ubabb\ud558\uac8c \ub410\uc744\uae4c<\/span>.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ub85c\uadf8\ub97c \uc704\ud55c Timber\ub098 Architecture component\ub4e4\ucc98\ub7fc \uae30\ubcf8\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\ub4e4\uc774 Android Studio\ub85c \uc0dd\uc131\ud55c \ud504\ub85c\uc81d\ud2b8\uc5d0\ub294 \uc5c6\ub2e4. \ub098\ub9cc\uc758 \ud15c\ud50c\ub9bf\uc744 \ub9cc\ub4e4\uc5b4\ub193\uace0 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc9c0\ub9cc, \ubc29\ubc95\uc740 \ubaa8\ub974\uaca0\uc73c\ub2c8 \uae30\ubcf8\uc801\uc778 \ud504\ub85c\uc81d\ud2b8 \uc14b\ud305\uc744 \ud574\ub193\uace0 \uc774\uac78 \ubcf5\uc0ac\ud574\uc11c \uc0c8 \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc368\uc57c\uaca0\ub2e4\uace0 \uc0dd\uac01\ud588\ub2e4&#8230;\ub9cc, \uc2e4\uc81c\ub85c \ud574\ubcf4\ub2c8 \uc774\uac83\uc5ed\uc2dc \ud504\ub85c\uc81d\ud2b8 \ud30c\uc77c\ub4e4\uc5d0\uc11c \ud504\ub85c\uc81d\ud2b8 \uc774\ub984, \ud328\ud0a4\uc9c0 \uc774\ub984\ub4f1\uc744 \ucc3e\uc544 \ubcc0\uacbd\ud574\uc918\uc57c\ud55c\ub2e4. \uc774 \ubd80\ubd84\uc740 \uc790\ub3d9\ud654 \ud560 \uc218 \uc788\uc9c0 \uc54a\uc744\uae4c \uc0dd\uac01\uc740 \ub4dc\ub294\ub370, \uc544\uc9c1\uae4c\uc9c0\ub294 \ubb50\uac00 \ub354 \uac04\ud3b8\ud560\uc9c0 \ubaa8\ub974\uaca0\ub2e4. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,34],"tags":[187,198,211,212,209,210,197],"class_list":["post-830","post","type-post","status-publish","format-standard","hentry","category-android","category-kotlin","tag-data-binding","tag-livedata","tag-navigation","tag-safe-args","tag-timber","tag-view-binding","tag-viewmodel"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/comments?post=830"}],"version-history":[{"count":31,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/830\/revisions"}],"predecessor-version":[{"id":3541,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/830\/revisions\/3541"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=830"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}