{"id":270,"date":"2020-04-05T13:57:12","date_gmt":"2020-04-05T04:57:12","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=270"},"modified":"2025-09-11T18:30:12","modified_gmt":"2025-09-11T09:30:12","slug":"design-pattern-singleton","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2020\/04\/05\/270\/","title":{"rendered":"Design pattern: Singleton"},"content":{"rendered":"\n<p>singleton \ud328\ud134\uc740 \uc778\uc2a4\ud134\uc2a4\uac00 \ub2e8 \ud558\ub098\ub9cc \uc874\uc7ac\ud574\uc57c\ud560 \ub54c \uc0ac\uc6a9\ud55c\ub2e4. \uad00\ub828\uc608\ub294 \uc27d\uac8c \ucc3e\uc544\ubcfc \uc218 \uc788\ub2e4. preference\ub97c \ub2e4\ub8e8\ub294 \uacbd\uc6b0 \uadf8 \uc790\uccb4\uac00 global \uc131\uaca9\uc744 \uac00\uc9c0\uae30 \ub54c\ubb38\uc5d0 \uc4f8 \uc218 \uc788\ub2e4. \uac8c\uc784\uac1c\ubc1c\uc5d0\uc120 audio manager\uac19\uc740\uacbd\uc6b0, \uc624\ub514\uc624 \uc785\ucd9c\ub825\uc744 \ub2e8\uc77c\ud654 \ud558\uae30\uc704\ud574 \uc0ac\uc6a9\ud55c\ub2e4. \ubaa8\ubc14\uc77c\uae30\uae30\uc758  HW \uc81c\uc5b4\uac19\uc740 \uacbd\uc6b0 \ubb3c\ub9ac\uc801\uc73c\ub85c \ud558\ub098\ub9cc \uc874\uc7ac\ud558\uae30 \ub54c\ubb38\uc5d0, singleton\uc0ac\uc6a9\uc774 \uc774\uc0c1\uc801\uc774\ub2e4.<\/p>\n\n\n\n<p>\uc0ac\uc6a9\ubc29\ubc95\uc740 \uc880 \ub2e4\ub974\uc9c0\ub9cc \uc548\ub4dc\ub85c\uc774\ub4dc \uacf5\uc6a9\uc790\uc6d0\uc778 \uc2dc\uc2a4\ud15c \uc11c\ube44\uc2a4\ub4e4 (LocationManager, NotificationManger, ConnectivityManager, LayoutInflater \ub4f1)\uc758 \uc774\uc6a9\ub3c4 \uac19\uc740 \ub9e5\ub77d\uc73c\ub85c \uc0dd\uac01\ud560 \uc218 \uc788\ub2e4. \uac01\uac01\uc758 \ud504\ub85c\uadf8\ub7a8\uc774 \uc778\uc2a4\ud134\uc2a4\ud654 \uc2dc\ud0a4\uc9c0 \uc54a\uace0, \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc11c\ube44\uc2a4\ud615\ud0dc\ub85c \ub2e8\uc77c \uc778\uc2a4\ud134\uc2a4\uac00 \ub3d9\uc791\ud558\uace0 \uc788\uc73c\uba70 \uc6b0\ub9ac\ub294 getSystemService()\ub97c \uc774\uc6a9\ud574 \uadf8 \uc778\uc2a4\ud134\uc2a4\uc758 \ub808\ud37c\ub7f0\uc2a4\ub97c \uc5bb\uc5b4\uc640 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color\">\uc8fc\uc758 : \uc720\uc6a9\ud574 \ubcf4\uc774\uc9c0\ub9cc \uc804\uc5ed\ubcc0\uc218\uc640 \uac19\uc740 \ub0c4\uc0c8\uac00 \ub098\uace0, \uba40\ud2f0 \uc4f0\ub808\ub4dc\ud658\uacbd\uc5d0\uc11c \ub3d9\uae30\ud654 \ubb38\uc81c\uac00 \uc788\uc744\uc218 \uc788\uc73c\ubbc0\ub85c \ub0a8\uc6a9\ud574\uc11c\ub294 \uc548\ub41c\ub2e4. <\/p>\n\n\n\n<p>Singleton pattern\uc744 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc73c\ub85c \ub3c4\uc2dd\ud654\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"280\" height=\"210\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2020\/03\/Singleton-pattern-class-diagram.png\" alt=\"\" class=\"wp-image-272\"\/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Java<\/h4>\n\n\n\n<p>\uc6b0\uc120 \uc774\ud574\ud558\uae30 \uc26c\uc6b4 lazy initializaton \ubc29\ubc95\uc758 \uad6c\ud604\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>public class Singleton {\n    private static Singleton instance = null;\n    private Singleton(){}\n    \n    public static Singleton getInstance(){\n        if(instance == null) instance = new Singleton();\n        \n        return instance;\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\">public<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Singleton<\/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\">static<\/span><span style=\"color: #ADBAC7\"> Singleton<\/span><span style=\"color: #F69D50\"> <\/span><span style=\"color: #ADBAC7\">instance<\/span><span style=\"color: #F69D50\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">null<\/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: #DCBDFB\">Singleton<\/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: #F47067\">public<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">static<\/span><span style=\"color: #ADBAC7\"> Singleton <\/span><span style=\"color: #DCBDFB\">getInstance<\/span><span style=\"color: #ADBAC7\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\">(instance <\/span><span style=\"color: #F47067\">==<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">null<\/span><span style=\"color: #ADBAC7\">) instance <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">new<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">Singleton<\/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: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> instance;<\/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>\ud074\ub798\uc2a4 \uba64\ubc84\ub85c \uc790\uae30\uc790\uc2e0\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uac00\uc9c0\uace0 \uc788\uc73c\uba70, \uc678\ubd80\uc5d0\uc11c \uc784\uc758\ub85c \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131\uc744 \ub9c9\uae30\uc704\ud574 \uc0dd\uc131\uc790\uac00 private\uc73c\ub85c \uc9c0\uc815\ub418\uc5b4\uc788\ub2e4. \uc778\uc2a4\ud134\uc2a4\ub97c \uc5bb\ub294 \uc678\ubd80 \uc778\ud130\ud398\uc774\uc2a4\ub294 getInstance()\uc778\ub370, \ud544\uc694\ud55c \uacbd\uc6b0 \uc0c8\ub85c \uc0dd\uc131\ud558\uace0, \uc774\ubbf8 \uc788\ub2e4\uba74 \uadf8 \uc778\uc2a4\ud134\uc2a4\ub97c \ub3cc\ub824\uc900\ub2e4.<\/p>\n\n\n\n<p>\uae54\ub054\ud558\uace0 \ubcc4 \ubb38\uc81c\uac00 \uc5c6\uc744\uac70 \uac19\uc740\ub370, \uba40\ud2f0 \uc4f0\ub808\ub4dc \ud658\uacbd\uc5d0\uc11c getInstance()\uac00 \ub3d9\uc2dc\uc5d0 \uc2e4\ud589\ub418\uba74 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud55c\ub2e4\uace0 \ud55c\ub2e4. thread safe\ud558\uac8c \ub9cc\ub4e4\ub824\uba74 getInstance()\ub97c synchronized\ub85c \uc4f0\uba74 \ub418\uaca0\uc9c0\ub9cc, \ubcf4\ub2e4 \ubcf4\ud3b8\uc801\uc778 \ubc29\ubc95\uc740 Holder\ub97c \uc774\uc6a9\ud55c \ub2e4\uc74c\uacfc \uac19\ub2e4\uace0 \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>public class SingletonWithHolder {\n    private SingletonWithHolder(){}\n\n    private static class LazyHolder {\n        private static final SingletonWithHolder instance = new SingletonWithHolder();\n    }\n\n    public static SingletonWithHolder getInstance(){\n        return LazyHolder.instance;\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\">public<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">SingletonWithHolder<\/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: #DCBDFB\">SingletonWithHolder<\/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\">static<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">LazyHolder<\/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\">static<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">final<\/span><span style=\"color: #ADBAC7\"> SingletonWithHolder<\/span><span style=\"color: #F69D50\"> <\/span><span style=\"color: #ADBAC7\">instance<\/span><span style=\"color: #F69D50\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">new<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">SingletonWithHolder<\/span><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 style=\"color: #F47067\">public<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">static<\/span><span style=\"color: #ADBAC7\"> SingletonWithHolder <\/span><span style=\"color: #DCBDFB\">getInstance<\/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\"> LazyHolder.instance;<\/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>JVM\uc758 \ucd08\uae30\ud654 \uc2e4\ud589\uc744 \uc54c\uc544\uc57c \uc774\ud574\uac00 \ub418\ub294\ub370, Innerclass\uc778 LazyHolder\ub294 SingletonWithHolder \ud074\ub798\uc2a4 \ucd08\uae30\ud654\ub54c \uc2e4\ud589\ub418\uc9c0 \uc54a\ub294\ub2e4. getInstance()\uac00 \ubd88\ub824 \ud074\ub798\uc2a4\uc758 \uba64\ubc84\uac00 \ud638\ucd9c\ub420 \ub54c \uc2e4\ud589\ub418\uba70, instance \uc0dd\uc131\uc774 \ud55c\uc904\uc774\uae30 \ub54c\ubb38\uc5d0 \uc4f0\ub808\ub4dc\uac04 \ub3d9\uae30\ud654 \ubb38\uc81c\ub3c4 \uc5c6\ub2e4. \uac00\uc7a5 \ubcf4\ud3b8\uc801\uc778 \ubc29\ubc95\uc774\ub77c\uace0 \uc0dd\uac01\ud558\uba74 \ub420\uac70\uac19\ub2e4. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Initialization-on-demand_holder_idiom\">Initialization on demand holder idiom \uc704\ud0a4 \ucc38\uc870.<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">C#<\/h4>\n\n\n\n<p>C#\uc5d0\uc11c\ub3c4 \uc790\ubc14\uc640 \uc0c1\ud669\uc774 \ube44\uc2b7\ud55c\ub370, thread-safe \uc758 \ubb38\uc81c\uac00 \uac78\ub824\uc788\uc73c\uba70, lazy initialization\uc758 \uc5ec\ubd80\uc5d0 \ub530\ub77c \uac08\ub77c\uc9c4\ub2e4. \uc5ec\uae30\uc11c\ub294 \ub458 \ub2e4 \uc801\uc6a9\ub41c \ucf54\ub4dc\ub97c \uc18c\uac1c\ud558\uba70, \ub2e4\ub978 \uc608\ub4e4\uc5d0 \ub300\ud574\uc120 \uc815\ub9ac\uac00 \uc798\ub41c \ubb38\uc11c\ub97c \ucc38\uc870. <a href=\"https:\/\/csharpindepth.com\/articles\/singleton\">https:\/\/csharpindepth.com\/articles\/singleton<\/a><\/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>public sealed class Singleton\n{\n    private static readonly Lazy&lt;Singleton> lazy = \n        new Lazy&lt;Singleton>(() => new Singleton());\n\n    public static Singleton Instance { get { return lazy.Value; } }\n    private Singleton(){}\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\">public<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">sealed<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Singleton<\/span><\/span>\n<span class=\"line\"><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\">static<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">readonly<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Lazy<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Singleton<\/span><span style=\"color: #ADBAC7\">&gt; <\/span><span style=\"color: #F69D50\">lazy<\/span><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: #F47067\">new<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Lazy<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Singleton<\/span><span style=\"color: #ADBAC7\">&gt;(() <\/span><span style=\"color: #F47067\">=&gt;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">new<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Singleton<\/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\">public<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">static<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Singleton<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Instance<\/span><span style=\"color: #ADBAC7\"> { <\/span><span style=\"color: #F47067\">get<\/span><span style=\"color: #ADBAC7\"> { <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> lazy.Value; } }<\/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: #DCBDFB\">Singleton<\/span><span style=\"color: #ADBAC7\">(){}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Kotlin<\/h4>\n\n\n\n<p>\ucf54\ud2c0\ub9b0\uc5d0\uc11c\ub294 static\uc774 \uc5c6\ub294\ub300\uc2e0, &#8216;object&#8217;\ub77c\ub294 \ud0a4\uc6cc\ub4dc\uac00 \uc788\ub2e4. \uc5ec\ub7ec \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud560 \ud544\uc694\uac00 \uc5c6\uc744 \ub54c, \uad73\uc774 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uace0 \uc774\ub85c\ubd80\ud130 \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud558\ub294 \uc624\ubc84\ud5e4\ub4dc\ub97c \uc904\uc778 \ud0a4\uc6cc\ub4dc\ub85c, \ud074\ub798\uc2a4\uc758 \ud615\ud0dc\ub97c \uac00\uc9c0\uc9c0\ub9cc \uadf8 \uc790\uccb4\uac00 \uac1d\uccb4\ub2e4. <\/p>\n\n\n\n<p>\ub208\uce58\ucc58\uaca0\uc9c0\ub9cc, object \ud0a4\uc6cc\ub4dc\ub97c \uc0ac\uc6a9\ud558\uba74 singleton\uc740 \ubc14\ub85c \uad6c\ud604\ub41c\ub2e4. \uc5b4\ub5bb\uac8c \ubcf4\uba74 \uc5b8\uc5b4\ucc28\uc6d0\uc5d0\uc11c singleton\uc744 \uc9c0\uc6d0\ud558\ub294\uac78\ub85c \ubcfc \uc218\ub3c4 \uc788\ub2e4. singleton\uc5d0 \ub300\ud55c \uad6c\ud604\uc774 \ub530\ub85c \ud544\uc694 \uc5c6\uc73c\ubbc0\ub85c, \uacf5\uc2dd\ubb38\uc11c\uc758 \uc608\uc81c\ub9cc \ud558\ub098 \uae01\uc5b4\uc640 \ubd24\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>object CarFactory {\n    val cars = mutableListOf&lt;Car>()\n    \n    fun makeCar(horsepowers: Int): Car {\n        val car = Car(horsepowers)\n        cars.add(car)\n        return car\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\">object<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">CarFactory<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> cars <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">mutableListOf<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Car<\/span><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\">    <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">makeCar<\/span><span style=\"color: #ADBAC7\">(horsepowers: <\/span><span style=\"color: #F69D50\">Int<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> car <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">Car<\/span><span style=\"color: #ADBAC7\">(horsepowers)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        cars.<\/span><span style=\"color: #DCBDFB\">add<\/span><span style=\"color: #ADBAC7\">(car)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> car<\/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>&#8216;object&#8217;\uc758 \ucd08\uae30\ud654\ub294 thread safe\ud558\ub2e4\uace0 \uacf5\uc2dd\ubb38\uc11c\uc5d0\uc11c \ub9d0\ud558\uace0 \uc788\ub2e4. \ub2e8\uc810\uc774\ub77c\uba74, \ucf54\ub4dc\ub9cc \ubcf4\uace0 singleton\uc778\uc9c0 \uc778\uc9c0\ud558\uae30 \uc5b4\ub835\ub2e4\ub294\uc815\ub3c4?<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Python<\/h4>\n\n\n\n<p>OOP\uc801 \uc124\uacc4\ubc29\ubc95\ub860\uc740 \uc0ac\uc2e4 \ud30c\uc774\uc36c\uc5d0 \uadf8\ub807\uac8c \uc798 \ub9de\uc9c0 \uc54a\ub294\ub2e4. \uad6c\ud604\ubc29\ubc95\uc740 \ub9ce\uc9c0\ub9cc, \ubcf4\ud3b8\uc801\uc778 \ubc29\uc2dd\uc740 \uba54\ud0c0\ud074\ub798\uc2a4\ub97c \uc774\uc6a9\ud55c \ubc29\uc2dd\uc778\ub4ef \ud558\ub2e4. \ub2e4\uc591\ud55c \ubc29\uc2dd\uc5d0 \ub300\ud574\uc120 \ub9c1\ud06c \ucc38\uc870. <a href=\"https:\/\/stackoverflow.com\/questions\/6760685\/creating-a-singleton-in-python\">https:\/\/stackoverflow.com\/questions\/6760685\/creating-a-singleton-in-python<\/a> \uba54\ud0c0 \ud074\ub798\uc2a4\ub97c \uc774\uc6a9\ud55c \uad6c\ud604\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>class Singleton(type):\n    _instances = {}\n\n    def __call__(cls, *args, **kwargs):\n        if cls not in cls._instances:\n            cls._instances&#91;cls&#93; = super(Singleton, cls).__call__(*args, **kwargs)\n        return cls._instances&#91;cls&#93;\n\n\nclass Logger(metaclass=Singleton):\n    def __init__(self):\n        self.name = \"Bato\"\n\n    def who_are_you(self):\n        print(f\"I'm {self.name}\")\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\">Singleton<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">type<\/span><span style=\"color: #ADBAC7\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    _instances <\/span><span style=\"color: #F47067\">=<\/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\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">__call__<\/span><span style=\"color: #ADBAC7\">(cls, <\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #ADBAC7\">args, <\/span><span style=\"color: #F47067\">**<\/span><span style=\"color: #ADBAC7\">kwargs):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">cls<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">not<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">in<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">cls<\/span><span style=\"color: #ADBAC7\">._instances:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">cls<\/span><span style=\"color: #ADBAC7\">._instances&#91;<\/span><span style=\"color: #6CB6FF\">cls<\/span><span style=\"color: #ADBAC7\">&#93; <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">(Singleton, <\/span><span style=\"color: #6CB6FF\">cls<\/span><span style=\"color: #ADBAC7\">).<\/span><span style=\"color: #6CB6FF\">__call__<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #ADBAC7\">args, <\/span><span style=\"color: #F47067\">**<\/span><span style=\"color: #ADBAC7\">kwargs)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">cls<\/span><span style=\"color: #ADBAC7\">._instances&#91;<\/span><span style=\"color: #6CB6FF\">cls<\/span><span style=\"color: #ADBAC7\">&#93;<\/span><\/span>\n<span class=\"line\"><\/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\">Logger<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">metaclass<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">Singleton<\/span><span style=\"color: #ADBAC7\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">__init__<\/span><span style=\"color: #ADBAC7\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;Bato&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">who_are_you<\/span><span style=\"color: #ADBAC7\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">f<\/span><span style=\"color: #96D0FF\">&quot;I&#39;m <\/span><span style=\"color: #F47067\">{<\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.name<\/span><span style=\"color: #F47067\">}<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uba54\ud0c0\ud074\ub798\uc2a4 _instances set\uc5d0 \ucc98\uc74c \uc0dd\uc131\ud558\ub294 \uc778\uc2a4\ud134\uc2a4\ub97c \uc800\uc7a5\ud574\ub193\uace0, \ub2e4\uc74c \ud638\ucd9c\uc2dc \ub3cc\ub824\uc8fc\ub294 \ubc29\uc2dd\uc774\ub2e4. \uc0ac\uc6a9\uc740 \ud074\ub798\uc2a4\uc5d0 metaclass\ub85c Singleton\uc744 \uc9c0\uc815\ud574\uc8fc\uba74 \ub418\uae30 \ub54c\ubb38\uc5d0 \uac04\ud3b8\ud558\ub2e4.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>singleton \ud328\ud134\uc740 \uc778\uc2a4\ud134\uc2a4\uac00 \ub2e8 \ud558\ub098\ub9cc \uc874\uc7ac\ud574\uc57c\ud560 \ub54c \uc0ac\uc6a9\ud55c\ub2e4. \uad00\ub828\uc608\ub294 \uc27d\uac8c \ucc3e\uc544\ubcfc \uc218 \uc788\ub2e4. preference\ub97c \ub2e4\ub8e8\ub294 \uacbd\uc6b0 \uadf8 \uc790\uccb4\uac00 global \uc131\uaca9\uc744 \uac00\uc9c0\uae30 \ub54c\ubb38\uc5d0 \uc4f8 \uc218 \uc788\ub2e4. \uac8c\uc784\uac1c\ubc1c\uc5d0\uc120 audio manager\uac19\uc740\uacbd\uc6b0, \uc624\ub514\uc624 \uc785\ucd9c\ub825\uc744 \ub2e8\uc77c\ud654 \ud558\uae30\uc704\ud574 \uc0ac\uc6a9\ud55c\ub2e4. \ubaa8\ubc14\uc77c\uae30\uae30\uc758 HW \uc81c\uc5b4\uac19\uc740 \uacbd\uc6b0 \ubb3c\ub9ac\uc801\uc73c\ub85c \ud558\ub098\ub9cc \uc874\uc7ac\ud558\uae30 \ub54c\ubb38\uc5d0, singleton\uc0ac\uc6a9\uc774 \uc774\uc0c1\uc801\uc774\ub2e4. \uc0ac\uc6a9\ubc29\ubc95\uc740 \uc880 \ub2e4\ub974\uc9c0\ub9cc \uc548\ub4dc\ub85c\uc774\ub4dc \uacf5\uc6a9\uc790\uc6d0\uc778 \uc2dc\uc2a4\ud15c \uc11c\ube44\uc2a4\ub4e4 (LocationManager, NotificationManger, ConnectivityManager, LayoutInflater \ub4f1)\uc758 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,24,34,33],"tags":[109,104,106,38,35,108,128,134,135,41,55],"class_list":["post-270","post","type-post","status-publish","format-standard","hentry","category-etc","category-note4reference","category-kotlin","category-python","tag-c","tag-design-pattern","tag-java","tag-kotlin","tag-python","tag-singleton","tag-design-pattern-kr","tag-singleton-kr","tag-java-kr","tag-kotlin-kr","tag-python-kr"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/270","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=270"}],"version-history":[{"count":6,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/270\/revisions"}],"predecessor-version":[{"id":3438,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/270\/revisions\/3438"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=270"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}