{"id":1911,"date":"2023-06-21T12:53:01","date_gmt":"2023-06-21T03:53:01","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=1911"},"modified":"2025-09-11T18:55:32","modified_gmt":"2025-09-11T09:55:32","slug":"application-context%eb%a5%bc-%ec%88%98%ec%8b%9c%eb%a1%9c-%ec%b0%b8%ec%a1%b0%ed%95%98%ea%b3%a0-%ec%8b%b6%eb%8b%a4","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2023\/06\/21\/1911\/","title":{"rendered":"Application Context\ub97c \uc218\uc2dc\ub85c \ucc38\uc870\ud558\uace0 \uc2f6\ub2e4!"},"content":{"rendered":"\n<p> Shared Preference\ub97c \uc0ac\uc6a9\ud574 \ub370\uc774\ud130\ub97c \uc77d\uace0 \uc800\uc7a5\ud558\ub294 Data Model\uc744 \ub9cc\ub4e4\ub824\uace0 \ud588\ub354\ub2c8, Shared Preference\ub97c \uc5bb\uae30 \uc704\ud574 Application Context\uac00 \ud544\uc694\ud588\ub2e4. \ubcf4\ud1b5 context\ub294 \ud544\uc694\ud560 \ub54c \ub9e4\ubc88 \uac12\uc744 \uc778\uc790\ub85c \ub118\uaca8\uc8fc\ub294 \uc0ac\uc6a9\ubc95\uc774 \uad8c\uc7a5\ub41c\ub2e4. \uadf8\ub7f0\ub370 \ub9d0\uc774\uc9c0. \uc5b8\uc81c\ub4e0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c singleton\uc73c\ub85c \ub9cc\ub4e4\uc5c8\ub294\ub370, \ub9cc\ub4e4\ub2e4\ubcf4\ub2c8 lifecycle\uc774 Application\uacfc \ub3d9\uc77c\ud558\uace0 \ub370\uc774\ud130 \uc800\uc7a5, \uc77d\uae30\ub97c \ud558\ub294\ub370 \uad73\uc774 \uc678\ubd80\uc5d0\uc11c context\ub97c \ub9e4\ubc88\ub118\uaca8\uc918\uc57c \ud558\ub294\uac74\uac00 \uc0dd\uac01\uc774 \ub4e4\uc5c8\ub2e4. Data Model\uc5d0\uc11c \uc54c\uc544\uc11c \uc77d\uace0 \uc4f0\uace0 \ud558\uba74 \ub418\ub294\uac74\ub370.  <\/p>\n\n\n\n<p> \uc77c\ub2e8, Singleton \uad6c\ud604\uc740 static\uc73c\ub85c \ub9cc\ub4e4\uc5b4\uc9c4\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 TimerModel {\n\n    companion object {\n        @Volatile private var instance: TimerModel? = null\n        fun getInstance(): TimerModel {\n            return instance ?: synchronized(this) {\n                instance ?: TimerModel().also { instance = it }\n            }\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\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">TimerModel<\/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\">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: #F69D50\">@Volatile<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">private<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">var<\/span><span style=\"color: #ADBAC7\"> instance: <\/span><span style=\"color: #F69D50\">TimerModel<\/span><span style=\"color: #ADBAC7\">? <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getInstance<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">TimerModel<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> instance ?: <\/span><span style=\"color: #DCBDFB\">synchronized<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">this<\/span><span style=\"color: #ADBAC7\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">                instance ?: <\/span><span style=\"color: #DCBDFB\">TimerModel<\/span><span style=\"color: #ADBAC7\">().<\/span><span style=\"color: #DCBDFB\">also<\/span><span style=\"color: #ADBAC7\"> { instance <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> it }<\/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 style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>getInstance(context: Context) \ud615\ud0dc\ub85c context\ub97c \ub118\uaca8\uc57c\ud558\ub098? \uc774\ub7ec\uba74 \ub9e4\ubc88 \ub118\uaca8\uc8fc\ub294\uac8c \ub418\ub294\ub370. \uc77c\ub2e8, \ud574\ubcf4\uc790&#8230;\ub294 \uc5c4\uc911\ud55c \uacbd\uace0\uac00 \ub738.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Do not place Android context classes in static fields (static reference to TimerModel which has field context pointing to Context); this is a memory leak<br>Inspection info:A static field will leak contexts. Non-static inner classes have an implicit reference to their outer class. If that outer class is for example a Fragment or Activity, then this reference means that the long-running handler\/loader\/task will hold a reference to the activity which prevents it from getting garbage collected. Similarly, direct field references to activities and fragments from these longer running instances can cause leaks. ViewModel classes should never point to Views or non-application Contexts.       <\/p>\n<\/blockquote>\n\n\n\n<p>\uac04\ub2e8\ud788 \ub9d0\ud558\uba74, static field\uc5d0 context \uc800\uc7a5\ud558\uc9c0\ub9c8\ub77c, \uba54\ubaa8\ub9ac \ub204\uc218\uac00 \uc0dd\uae34\ub2e4. <\/p>\n\n\n\n<p>\uc774\ub7f0 \ubb38\uc81c \ub54c\ubb38\uc778\uc9c0, Android \uc624\ud508\uc18c\uc2a4 \uc571\uc778 DeskClock\uc744 \ubcf4\uba74, singleton\uc5d0\uc11c static\uc73c\ub85c \uc800\uc7a5\ud558\uc9c0\uc54a\uace0, \ucd5c\ucd08 \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131\uc2dc init() \ud568\uc218\ub97c \ub530\ub85c \ub9cc\ub4e4\uc5b4\uc11c \uc804\ub2ec\ud574\uc8fc\uace0 \uc788\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>class DeskClockApplication : Application() {\n    override fun onCreate() {\n        super.onCreate()\n\n        val applicationContext = applicationContext\n        val prefs = getDefaultSharedPreferences(applicationContext)\n\n        DataModel.dataModel.init(applicationContext, prefs)  \/\/ &lt;-- \uc694\uae30\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\">DeskClockApplication<\/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: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> applicationContext <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> applicationContext<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> prefs <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getDefaultSharedPreferences<\/span><span style=\"color: #ADBAC7\">(applicationContext)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        DataModel.dataModel.<\/span><span style=\"color: #DCBDFB\">init<\/span><span style=\"color: #ADBAC7\">(applicationContext, prefs)  <\/span><span style=\"color: #768390\">\/\/ &lt;-- \uc694\uae30<\/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>\uc774\ub7f4\uac70\uba74 singleton\uc73c\ub85c \uc65c\ub9cc\ub4e4\uc9c0? \ub77c\ub294 \uc0dd\uac01\uc774 \ub4e4\uc5b4\uc11c \ubb54\uac00 \uc544\ub2cc\uac70 \uac19\uc558\uc5b4.<\/p>\n\n\n\n<p> \uc798 \ubaa8\ub974\ub294 \uc0c1\ud0dc\uc5d0\uc11c \uc774\ub7f0\uc800\ub7f0\uac70 \ucc3e\uc544\ubcf4\ub2e4\uac00, Application context\uc758 \uacbd\uc6b0, custom Application \ud074\ub798\uc2a4\uc5d0\uc11c \uc800\uc7a5\ud574\ub193\uace0 \ucc38\uc870\ud558\ub294 \ubc29\ubc95\uc744 \ucc3e\uc558\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\n    init{\n        instance = this\n    }\n\n    companion object {\n       lateinit var instance: MyApplication\n        fun ApplicationContext() : Context {\n            return instance.applicationContext\n        }\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\">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>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">init<\/span><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        instance <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">this<\/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 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\">lateinit<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">var<\/span><span style=\"color: #ADBAC7\"> instance: <\/span><span style=\"color: #F69D50\">MyApplication<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">ApplicationContext<\/span><span style=\"color: #ADBAC7\">() : <\/span><span style=\"color: #F69D50\">Context<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> instance.applicationContext<\/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: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p> \uc544\ub2c8 \ubb50\uc57c, \uc774\uac83\ub3c4 static\uc73c\ub85c context\ub97c \uc800\uc7a5\ud558\ub294\uac74\ub370? \uc2e4\uc81c\ub85c \uac80\uc0c9\uc744 \ud574\ubd10\ub3c4 \uc774\uac8c \ub41c\ub2e4 \uc548\ub41c\ub2e4 \ub9d0\ub4e4\uc774 \ub108\ubb34 \ub9ce\ub354\ub77c\uace0. \uc544\ubb34\ub798\ub3c4 \uc65c \uba54\ubaa8\ub9ac \ub9ad\uc774 \uc0dd\uae30\ub294\uc9c0 \uc774\ud574\ub97c \ud574\uc57c \uc815\ub2f5\uc744 \uc54c\uac70\uac19\uc544\uc11c \uc880 \ub354 \ucc3e\uc544\ubd24\ub2e4.<\/p>\n\n\n\n<p>Context\uc5d0 \ub300\ud574 \uac04\ub2e8\ud788 \uc54c\uc544\ubcf4\uba74, context\ub294 \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc11c\ube44\uc2a4\uc5d0 \ub300\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc81c\uacf5\ud558\uace0, \uc571\uc758 \ub9ac\uc18c\uc2a4\uc5d0 \uc811\uadfc, Activity\uac04 \uc778\ud150\ud2b8\ub97c \uc8fc\uace0\ubc1b\ub294 \uc778\ud130\ud398\uc774\uc2a4 \uc5ed\ud560\ub4f1\uc744 \ud55c\ub2e4. \ub610\ud55c, \ub450\uac00\uc9c0\uc758 context\uac00 \uc874\uc7ac\ud558\ub294\ub370, Application context\uac00 \uc788\uace0 Activity context\uac00 \uc788\ub2e4. \uac01, context\ub294 \ud574\ub2f9\ud558\ub294 lifecycle\uc744 \uac16\ub294\ub2e4. \uadf8\ub7ec\ub2c8\uae4c, \ud2b9\uc815 Activity\uc758 context\ub294 \ud574\ub2f9\ud558\ub294 Activity\uac00 \uc885\ub8cc\ub418\uba74 \uac19\uc774 \uc0ac\ub77c\uc9c4\ub2e4\ub294 \uc598\uae30.<\/p>\n\n\n\n<p> \uacb0\uad6d, \ud558\ub098\uc758 \uc571\uc5d0\uc11c \uc5ec\ub7ec Activity\uac00 \uc0ac\uc6a9\ub418\uba74\uc11c \uac01\uac01 \ubd99\uc5b4\uc788\ub294 context\ub4e4\uc774 \uc0ac\uc6a9\ub418\ub294\ub370, \uc774 context\ub97c static\uc73c\ub85c \uc800\uc7a5\ud574\ub193\uc73c\uba74, Activity\uac00 \uc0ac\ub77c\uc838\ub3c4 context\ub294 gabage collection \ub300\uc0c1\uc774 \ub418\uc9c0 \uc54a\uc544 \uba54\ubaa8\ub9ac \ub204\uc218\uac00 \uc0dd\uae34\ub2e4\ub294 \uc598\uae30\ub2e4. <\/p>\n\n\n\n<p>\uadf8\ub7f0\ub370 \ub9d0\uc774\uc9c0. application context\ub294 \ud574\ub2f9\uc0ac\ud56d\uc774 \uc5c6\uc796\uc544? \uc704\ucc98\ub7fc Application \uc778\uc2a4\ud134\uc2a4\uc5d0\uc11c \uc800\uc7a5\ud574\ub3c4 \ubb38\uc81c\uac00 \uc548\ub41c\ub2e4\ub294 \uc598\uae30. \ub610\ud55c, Dagger\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 <a href=\"https:\/\/stackoverflow.com\/questions\/14057273\/android-singleton-with-global-context\">\ub2e4\uc74c\uacfc \uac19\uc740 \ub354 \uac04\ub2e8\ud55c \uc194\ub8e8\uc158<\/a>\ub3c4 \uc788\ub294\ub370,<\/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>@Inject Context context;<\/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: #F69D50\">@Inject<\/span><span style=\"color: #ADBAC7\"> Context context;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc774\uac83\ub3c4 \uacb0\uad6d, Dagger \ub0b4\uc5d0\uc11c context\ub97c \uc800\uc7a5\ud558\uace0 \uadf8\uac78 \ud65c\uc6a9\ud55c\ub2e8 \uc598\uae30\uac70\ub4e0. \uadf8\ub7ec\ub2c8\uae4c, \uc544 \ub09c \ubaa8\ub974\uaca0\uc73c\ub2c8\uae4c \uc2f6\uc73c\uba74 Dagger\ub97c \uc368\ub3c4 \ub418\uace0, \uc800 \uc704\uc5d0\uc11c\ucc98\ub7fc custom Application \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc800\uc7a5\ud574\ub193\uace0 \uc77d\uc5b4\uac00\uac8c \ud574\ub3c4 \uad1c\ucc2e\ub2e4\ub294 \uac70\ub2e4. \uc815\ub9ac \ub05d!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Shared Preference\ub97c \uc0ac\uc6a9\ud574 \ub370\uc774\ud130\ub97c \uc77d\uace0 \uc800\uc7a5\ud558\ub294 Data Model\uc744 \ub9cc\ub4e4\ub824\uace0 \ud588\ub354\ub2c8, Shared Preference\ub97c \uc5bb\uae30 \uc704\ud574 Application Context\uac00 \ud544\uc694\ud588\ub2e4. \ubcf4\ud1b5 context\ub294 \ud544\uc694\ud560 \ub54c \ub9e4\ubc88 \uac12\uc744 \uc778\uc790\ub85c \ub118\uaca8\uc8fc\ub294 \uc0ac\uc6a9\ubc95\uc774 \uad8c\uc7a5\ub41c\ub2e4. \uadf8\ub7f0\ub370 \ub9d0\uc774\uc9c0. \uc5b8\uc81c\ub4e0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c singleton\uc73c\ub85c \ub9cc\ub4e4\uc5c8\ub294\ub370, \ub9cc\ub4e4\ub2e4\ubcf4\ub2c8 lifecycle\uc774 Application\uacfc \ub3d9\uc77c\ud558\uace0 \ub370\uc774\ud130 \uc800\uc7a5, \uc77d\uae30\ub97c \ud558\ub294\ub370 \uad73\uc774 \uc678\ubd80\uc5d0\uc11c context\ub97c \ub9e4\ubc88\ub118\uaca8\uc918\uc57c \ud558\ub294\uac74\uac00 \uc0dd\uac01\uc774 \ub4e4\uc5c8\ub2e4. <a href=\"http:\/\/batmask.net\/index.php\/2023\/06\/21\/1911\/\" class=\"btn btn-link continue-link\">\ub354 \uc77d\uae30<\/a><\/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":[186,314,313,38,315,108],"class_list":["post-1911","post","type-post","status-publish","format-standard","hentry","category-android","category-kotlin","tag-android-2","tag-application","tag-context","tag-kotlin","tag-memory-leak","tag-singleton"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/1911","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=1911"}],"version-history":[{"count":2,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/1911\/revisions"}],"predecessor-version":[{"id":3468,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/1911\/revisions\/3468"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=1911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=1911"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=1911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}