{"id":7068,"date":"2026-09-24T11:00:42","date_gmt":"2026-09-24T07:30:42","guid":{"rendered":"https:\/\/parmin.cloud\/blog\/?p=7068"},"modified":"2026-09-24T11:00:42","modified_gmt":"2026-09-24T07:30:42","slug":"%d8%a7%d9%84%da%af%d9%88%db%8c-singleton-%d8%af%d8%b1-%d8%ac%d8%a7%d9%88%d8%a7-%d8%a8%d9%87%d8%aa%d8%b1%db%8c%d9%86-%d8%b1%d9%88%d8%b4%d9%87%d8%a7-%d9%88-%d9%85%d8%ab%d8%a7%d9%84","status":"publish","type":"post","link":"https:\/\/parmin.cloud\/blog\/%d8%a7%d9%84%da%af%d9%88%db%8c-singleton-%d8%af%d8%b1-%d8%ac%d8%a7%d9%88%d8%a7-%d8%a8%d9%87%d8%aa%d8%b1%db%8c%d9%86-%d8%b1%d9%88%d8%b4%d9%87%d8%a7-%d9%88-%d9%85%d8%ab%d8%a7%d9%84\/","title":{"rendered":"\u0627\u0644\u06af\u0648\u06cc Singleton \u062f\u0631 \u062c\u0627\u0648\u0627: \u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634\u200c\u0647\u0627 \u0648 \u0645\u062b\u0627\u0644\u200c\u0647\u0627"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u0645\u0642\u062f\u0645\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u06af\u0648\u06cc Singleton \u062f\u0631 \u062c\u0627\u0648\u0627\u060c \u06cc\u06a9 \u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc \u0633\u0627\u062e\u062a\u0627\u0631\u06cc (Creational) \u0627\u0633\u062a \u06a9\u0647 \u06a9\u0644\u0627\u0633\u06cc \u0631\u0627 \u0628\u0647 \u06cc\u06a9 Instance \u0645\u0646\u0641\u0631\u062f \u0628\u0647\u200c\u0627\u0632\u0627\u06cc \u0647\u0631 Java Virtual Machine \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0647 \u0648 \u0622\u0646 Instance \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0646\u0642\u0637\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0631\u0627\u0633\u0631\u06cc (Global) \u0627\u0641\u0634\u0627 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u0627\u0632 \u06a9\u062a\u0627\u0628 \u00abDesign Patterns\u00bb (\u06f1\u06f9\u06f9\u06f4) \u06af\u0631\u0648\u0647 Gang of Four \u0633\u0631\u0686\u0634\u0645\u0647 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f \u0648 \u0647\u0645\u0686\u0646\u0627\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u067e\u0631\u06a9\u0627\u0631\u0628\u0631\u062f\u062a\u0631\u06cc\u0646 \u0627\u0644\u06af\u0648\u0647\u0627 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0646\u0627\u0628\u0639 \u0645\u0634\u062a\u0631\u06a9\u06cc \u0645\u0627\u0646\u0646\u062f Logging\u060c \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\u060c Connection Pool\u0647\u0627 \u0648 Cache\u0647\u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0647\u0641\u062a \u0646\u0648\u0639 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0631 \u062c\u0627\u0648\u0627 \u0631\u0627 \u067e\u0648\u0634\u0634 \u0645\u06cc\u200c\u062f\u0647\u062f: <strong>Eager Initialization<\/strong>\u060c <strong>Static Block Initialization<\/strong>\u060c <strong>Lazy Initialization<\/strong>\u060c <strong>Synchronized Method<\/strong>\u060c <strong>Double-Checked Locking<\/strong>\u060c <strong>Bill Pugh<\/strong> \u0648 <strong>Enum Singleton<\/strong>. \u0647\u0645\u200c\u0686\u0646\u06cc\u0646 \u062f\u0648 \u0628\u0631\u062f\u0627\u0631 \u062d\u0645\u0644\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u062a\u0636\u0645\u06cc\u0646 Singleton \u0631\u0627 \u0628\u0634\u06a9\u0646\u0646\u062f\u2014\u06cc\u0639\u0646\u06cc Reflection \u0648 Serialization\u2014\u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc\u200c\u0647\u0627\u06cc \u067e\u06cc\u0634\u06af\u06cc\u0631\u06cc \u0628\u0631\u0627\u06cc \u0647\u0631\u06a9\u062f\u0627\u0645 \u067e\u0648\u0634\u0634 \u0645\u06cc\u200c\u062f\u0647\u062f. \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0646\u0647\u0627\u06cc\u06cc\u060c Singleton \u0631\u0627 \u0628\u0627 \u06a9\u0644\u0627\u0633\u200c\u0647\u0627\u06cc Utility \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u0645\u0642\u0627\u06cc\u0633\u0647 \u06a9\u0631\u062f\u0647\u060c \u062a\u0648\u0636\u06cc\u062d \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u0641\u0631\u06cc\u0645\u200c\u0648\u0631\u06a9\u200c\u0647\u0627\u06cc \u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0645\u0627\u0646\u0646\u062f Spring \u0686\u06af\u0648\u0646\u0647 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0633\u062a\u06cc Singleton \u0631\u0627 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f\u061b \u0648 \u0631\u0641\u062a\u0627\u0631 Singleton \u0631\u0627 \u0632\u06cc\u0631 Virtual Thread\u0647\u0627 \u0648 Native Image \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 GraalVM \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u06a9\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0627\u0644\u06af\u0648\u06cc Singleton \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0644\u0627\u0633\u06cc \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9 Instance \u0628\u0647\u200c\u0627\u0632\u0627\u06cc \u0647\u0631 JVM \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f \u0648 \u0646\u0642\u0637\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0631\u0627\u0633\u0631\u06cc \u0628\u0647 \u0622\u0646 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li>\u062c\u0627\u0648\u0627 \u0647\u0641\u062a \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0631\u0627\u06cc\u062c Singleton \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f: Eager\u060c Static Block\u060c Lazy\u060c Synchronized Method\u060c Double-Checked Locking\u060c Bill Pugh \u0648 Enum.<\/li>\n\n\n\n<li><strong>Bill Pugh<\/strong> (\u06cc\u0639\u0646\u06cc initialization-on-demand holder) \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u062a\u0648\u0635\u06cc\u0647\u200c\u0634\u062f\u0647 \u0648\u0642\u062a\u06cc Lazy Loading \u0644\u0627\u0632\u0645 \u0627\u0633\u062a\u061b <strong>Enum Singleton<\/strong> \u062f\u0631 \u0647\u0645\u0647 \u0645\u0648\u0627\u0631\u062f \u062f\u06cc\u06af\u0631 \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/li>\n\n\n\n<li>Double-Checked Locking \u0628\u0647 \u06a9\u0644\u06cc\u062f\u0648\u0627\u0698\u0647 <code>volatile<\/code> \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f \u062a\u0627 JVM \u0627\u0632 \u0627\u0646\u062a\u0634\u0627\u0631 Instance\u0650 \u0646\u06cc\u0645\u0647-\u0633\u0627\u062e\u062a\u0647 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0646\u062f.<\/li>\n\n\n\n<li><strong>Reflection \u0648 Serialization<\/strong> \u0647\u0631 \u062f\u0648 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u062a\u0636\u0645\u06cc\u0646\u200c\u0647\u0627\u06cc Singleton \u0631\u0627 \u062f\u0631 \u0647\u0645\u0647 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc\u200c\u0647\u0627\u2014\u0628\u0647\u200c\u062c\u0632 Enum Singleton \u06a9\u0647 \u062f\u0631 \u0633\u0637\u062d JVM \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u0647\u0631 \u062f\u0648 \u062d\u0645\u0644\u0647 \u0645\u0635\u0648\u0646 \u0627\u0633\u062a\u2014\u0628\u0634\u06a9\u0646\u0646\u062f.<\/li>\n\n\n\n<li>\u0627\u0632 Singleton \u0627\u062c\u062a\u0646\u0627\u0628 \u06a9\u0646\u06cc\u062f \u0648\u0642\u062a\u06cc State \u0633\u0631\u0627\u0633\u0631\u06cc\u0650 \u067e\u0646\u0647\u0627\u0646\u06cc \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u062a\u0633\u062a \u0648\u0627\u062d\u062f \u0631\u0627 \u0628\u0644\u0627\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06cc\u0627 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0631\u0633\u062a \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0647\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/li>\n\n\n\n<li>Bean\u0647\u0627\u06cc Spring \u0628\u0647\u200c\u0637\u0648\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u062f\u0631\u0648\u0646 ApplicationContext \u062f\u0627\u0645\u0646\u0647 Singleton \u062f\u0627\u0631\u0646\u062f\u061b \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0633\u062a\u06cc \u0627\u0644\u06af\u0648\u06cc Singleton \u0631\u0627 \u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0645\u062f\u0631\u0646 \u062c\u0627\u0648\u0627 \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc Singleton \u062f\u0631 \u062c\u0627\u0648\u0627 \u0686\u06cc\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u06af\u0648\u06cc Singleton\u060c \u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc \u0633\u0627\u062e\u062a\u0627\u0631\u06cc\u200c\u0627\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0644\u0627\u0633\u06cc \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9 Instance \u0628\u0647\u200c\u0627\u0632\u0627\u06cc \u0647\u0631 JVM \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f \u0648 \u0646\u0642\u0637\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0631\u0627\u0633\u0631\u06cc \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc\u200c\u0627\u0634 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0648\u0642\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u06cc\u06a9 \u0634\u06cc\u0621 \u0645\u0634\u062a\u0631\u06a9 \u0628\u0627\u06cc\u062f \u0631\u0641\u062a\u0627\u0631\u06cc \u0631\u0627 \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0647\u0645\u0627\u0647\u0646\u06af \u06a9\u0646\u062f\u2014\u0645\u0627\u0646\u0646\u062f Logger\u060c \u0645\u062f\u06cc\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06cc\u0627 Connection Pool. \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u062f\u0631\u0648\u0646 \u062e\u0648\u062f JDK \u0647\u0645 \u062f\u0631 \u06a9\u0644\u0627\u0633\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f <code>java.lang.Runtime<\/code> \u0648 <code>java.awt.Desktop<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0647\u0633\u062a\u0647 \u06a9\u0644\u0627\u0633 Singleton<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Singleton \u062f\u0631 \u062c\u0627\u0648\u0627 \u0633\u0647 \u0639\u0646\u0635\u0631 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u0631\u0627 \u0634\u0631\u06cc\u06a9 \u0627\u0633\u062a:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Constructor \u062e\u0635\u0648\u0635\u06cc.<\/strong> \u062c\u0644\u0648\u06cc \u0633\u0627\u062e\u062a Instance\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u062a\u0648\u0633\u0637 \u06a9\u062f \u0628\u06cc\u0631\u0648\u0646\u06cc \u0628\u0627 <code>new<\/code> \u0631\u0627 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f.<\/li>\n\n\n\n<li><strong>\u0641\u06cc\u0644\u062f Instance \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u062e\u0635\u0648\u0635\u06cc.<\/strong> Instance \u0645\u0646\u0641\u0631\u062f \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u062f.<\/li>\n\n\n\n<li><strong>\u0645\u062a\u062f Accessor \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u0639\u0645\u0648\u0645\u06cc.<\/strong> Instance \u0645\u0646\u0641\u0631\u062f \u0631\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f\u2014\u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0627 \u0646\u0627\u0645 <code>getInstance()<\/code>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u06af\u0648\u06cc Singleton \u0647\u0645\u200c\u0686\u0646\u06cc\u0646 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0628\u0644\u0648\u06a9 \u0633\u0627\u062e\u062a \u062f\u0631 \u0633\u0627\u06cc\u0631 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u062c\u0627\u0648\u0627\u2014including Abstract Factory\u060c Builder\u060c Prototype \u0648 Facade\u2014\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0627\u0632 \u0627\u0644\u06af\u0648\u06cc Singleton \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc Logging<\/strong> \u06a9\u0647 \u0647\u0631 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0628\u0647 \u0647\u0645\u0627\u0646 \u0645\u0642\u0635\u062f \u0645\u06cc\u200c\u0646\u0648\u06cc\u0633\u062f.<\/li>\n\n\n\n<li><strong>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646<\/strong> \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0628\u06cc\u0646 \u0647\u0645\u0647 Caller\u0647\u0627 \u0633\u0627\u0632\u06af\u0627\u0631 \u0628\u0645\u0627\u0646\u062f.<\/li>\n\n\n\n<li><strong>Connection Pool\u0647\u0627\u06cc \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0648 Thread Pool<\/strong> \u06a9\u0647 \u0647\u0632\u06cc\u0646\u0647 \u0633\u0627\u062e\u062a\u200c\u0634\u0627\u0646 \u0628\u0627\u0644\u0627\u0633\u062a \u0648 \u0641\u0642\u0637 \u06cc\u06a9 \u0647\u0645\u0627\u0647\u0646\u06af\u200c\u06a9\u0646\u0646\u062f\u0647 \u0628\u0627\u06cc\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f.<\/li>\n\n\n\n<li><strong>Cache\u0647\u0627\u06cc \u062f\u0631-\u062d\u0627\u0641\u0638\u0647<\/strong> \u06a9\u0647 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0645\u0646\u0628\u0639 \u0648\u0627\u062d\u062f \u062d\u0642\u06cc\u0642\u062a \u0631\u0627 \u0633\u0631\u0648 \u06a9\u0646\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u0627\u0634\u06cc\u0627\u0621 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0633\u062e\u062a\u200c\u0627\u0641\u0632\u0627\u0631 \u06cc\u0627 \u0645\u0646\u0628\u0639<\/strong> \u0645\u0627\u0646\u0646\u062f Device Driver\u0647\u0627 \u0648 File System Handle\u0647\u0627.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0627\u0632 \u0627\u0644\u06af\u0648\u06cc Singleton \u0627\u062c\u062a\u0646\u0627\u0628 \u06a9\u0646\u06cc\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 Singleton \u0627\u062c\u062a\u0646\u0627\u0628 \u06a9\u0646\u06cc\u062f \u0648\u0642\u062a\u06cc \u0645\u0633\u0627\u0626\u0644\u06cc \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0627\u0632 \u0645\u0632\u0627\u06cc\u0627\u06cc\u0634 \u0633\u0646\u06af\u06cc\u0646\u200c\u062a\u0631\u0646\u062f:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>State \u0633\u0631\u0627\u0633\u0631\u06cc\u0650 Mutable.<\/strong> \u0647\u0631 Thread\u0627\u06cc \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0647\u0631 \u0632\u0645\u0627\u0646\u06cc\u2014\u0628\u062f\u0627\u06cc \u0622\u06af\u0627\u0647\u06cc Caller \u0627\u0632 Writer\u0647\u0627\u06cc \u0647\u0645\u200c\u0632\u0645\u0627\u0646\u2014Instance \u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u062f \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u062f. \u0645\u062b\u0644\u0627\u064b Singleton\u0650 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\u200c\u0627\u06cc \u06a9\u0647 \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0631\u0627 Cache \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0645\u0642\u062f\u0627\u0631\u0647\u0627\u06cc \u06a9\u0647\u0646\u0647\u200c\u0627\u06cc \u0628\u0647 \u06cc\u06a9 Thread \u0633\u0631\u0648 \u06a9\u0646\u062f \u0648\u0642\u062a\u06cc Thread \u062f\u06cc\u06af\u0631\u06cc \u0648\u0633\u0637 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0627\u0633\u062a\u061b \u0628\u062f\u0648\u0646 \u0647\u06cc\u0686 \u0642\u0641\u0644\u06cc \u06a9\u0647 \u062e\u0648\u0627\u0646\u062f\u0646 \u0631\u0627 \u0645\u062d\u0627\u0641\u0638\u062a \u06a9\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0647\u0627\u06cc \u067e\u0646\u0647\u0627\u0646.<\/strong> \u06a9\u0644\u0627\u0633\u06cc \u06a9\u0647 \u062f\u0631\u0648\u0646\u0634 <code>Singleton.getInstance()<\/code> \u0631\u0627 \u0635\u062f\u0627 \u0645\u06cc\u200c\u0632\u0646\u062f\u060c \u0647\u06cc\u0686 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0627\u06cc \u062f\u0631 Constructor\u0634 \u062a\u0639\u0631\u06cc\u0641 \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f. \u0647\u0645\u06a9\u0627\u0631 \u0628\u0631\u0627\u06cc Caller \u0646\u0627\u0645\u0631\u0626\u06cc \u0627\u0633\u062a\u061b \u06a9\u0647 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u062f\u0631\u0628\u0627\u0631\u0647 \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0633\u062e\u062a\u200c\u062a\u0631 \u0648 Rewire \u06a9\u0631\u062f\u0646\u0634 \u0631\u0627\u2014\u0628\u062f\u0648\u0646 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0633\u0648\u0631\u0633 \u06a9\u062f\u2014\u063a\u06cc\u0631\u0645\u0645\u06a9\u0646 \u0645\u06cc\u200c\u0633\u0627\u0632\u062f.<\/li>\n\n\n\n<li><strong>\u062a\u0633\u062a \u0648\u0627\u062d\u062f \u062f\u0634\u0648\u0627\u0631.<\/strong> \u0686\u0648\u0646 <code>getInstance()<\/code> \u0647\u0645\u06cc\u0634\u0647 Instance \u0632\u0646\u062f\u0647 \u0631\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f\u060c \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f Mock \u06cc\u0627 Test Double\u0627\u06cc \u0631\u0627 \u062c\u0627\u0646\u0634\u06cc\u0646 \u06a9\u0646\u06cc\u062f\u2014\u0645\u06af\u0631 \u0627\u06cc\u0646\u06a9\u0647 \u062e\u0648\u062f \u06a9\u0644\u0627\u0633 Singleton \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f \u06cc\u0627 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u062f\u0633\u062a\u06a9\u0627\u0631\u06cc Bytecode \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u06a9\u0644\u0627\u0633\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 Singleton \u0648\u0627\u0628\u0633\u062a\u0647\u200c\u0627\u0646\u062f\u060c \u0639\u0645\u0644\u0627\u064b \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0627\u06cc\u0632\u0648\u0644\u0647 \u063a\u06cc\u0631\u0642\u0627\u0628\u0644\u200c\u062a\u0633\u062a\u200c\u0627\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u0646\u0642\u0636 \u0627\u0635\u0644 Single Responsibility.<\/strong> Singleton\u0627\u06cc \u06a9\u0647 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 Logger \u0634\u0631\u0648\u0639 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0627\u063a\u0644\u0628 \u0628\u0647\u200c\u0645\u0631\u0648\u0631\u2014\u0686\u0648\u0646 \u0633\u0631\u0627\u0633\u0631\u0627 \u0642\u0627\u0628\u0644-\u062f\u0633\u062a\u0631\u0633 \u0648 \u0631\u0627\u062d\u062a \u0627\u0633\u062a\u2014\u062e\u0648\u0627\u0646\u062f\u0646 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\u060c \u0627\u0646\u062a\u0634\u0627\u0631 \u0645\u062a\u0631\u06cc\u06a9 \u0648 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc Feature Flag \u0631\u0627 \u0627\u0646\u0628\u0627\u0634\u062a\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u0644\u06af\u0648 \u0647\u06cc\u0686 \u0645\u0642\u0627\u0648\u0645\u062a \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u0627\u06cc\u0646 \u0646\u0648\u0639 \u0631\u0634\u062f \u0627\u0631\u0627\u0626\u0647 \u0646\u0645\u06cc\u200c\u062f\u0647\u062f.<\/li>\n\n\n\n<li><strong>\u0645\u062d\u06cc\u0637\u200c\u0647\u0627\u06cc Classloader-\u0633\u0646\u06af\u06cc\u0646.<\/strong> \u062f\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0647\u0627\u06cc OSGi \u0648 \u0633\u0631\u0648\u0631\u0647\u0627\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 Jakarta EE\u060c \u0647\u0631 \u0645\u0627\u0698\u0648\u0644 \u06cc\u0627 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u0650 \u062f\u06cc\u067e\u0644\u0648\u06cc\u200c\u0634\u062f\u0647 \u062f\u0631 Classloader \u062e\u0648\u062f\u0634 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f. Singleton\u0627\u06cc \u06a9\u0647 \u062f\u0631 Classloader\u0627\u06cc \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0634\u062f\u0647\u060c \u0634\u06cc\u0626\u06cc \u06a9\u0627\u0645\u0644\u0627\u064b \u062c\u062f\u0627 \u0627\u0632 \u0647\u0645\u0627\u0646 \u06a9\u0644\u0627\u0633\u0650 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc\u200c\u0634\u062f\u0647 \u062f\u0631 Classloader \u062f\u06cc\u06af\u0631\u06cc \u0627\u0633\u062a. \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u06cc\u06a9\u062a\u0627\u06cc\u06cc\u0650 \u062f\u0631-\u0633\u0637\u062d-JVM \u0631\u0627 \u0641\u0631\u0636 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f\u060c \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062d\u06cc\u0637\u200c\u0647\u0627 \u0646\u0627\u062f\u0631\u0633\u062a \u0631\u0641\u062a\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0645\u062f\u0631\u0646 \u062c\u0627\u0648\u0627\u060c \u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0628\u0627 Spring \u06cc\u0627 Guice \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u062a\u0631\u062c\u06cc\u062d\u200c\u062f\u0627\u062f\u0647\u200c\u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062a\u0627\u0631\u06cc\u062e\u06cc \u0628\u0647 Singleton \u062f\u0633\u062a\u06cc \u062a\u06a9\u06cc\u0647 \u062f\u0627\u0634\u062a\u0646\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Singleton \u0628\u0627 Eager Initialization<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 Eager Initialization \u0648\u0642\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 Singleton\u062a\u0627\u0646 \u0633\u0628\u06a9 \u0627\u0633\u062a\u060c \u0647\u06cc\u0686 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u0650 Constructor\u0627\u06cc \u0628\u0647 \u0648\u0636\u0639\u06cc\u062a \u0632\u0645\u0627\u0646-\u0627\u062c\u0631\u0627 \u0646\u062f\u0627\u0631\u062f \u0648 \u0647\u0645\u06cc\u0634\u0647 \u062f\u0631 \u0637\u0648\u0644 \u0639\u0645\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0644\u0627\u0632\u0645 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f. \u0627\u06cc\u0646 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u062f\u0631\u0633\u062a \u0628\u0631\u0627\u06cc \u0645\u0646\u0627\u0628\u0639 \u0645\u0634\u062a\u0631\u06a9 \u0633\u0627\u062f\u0647\u200c\u0627\u06cc \u0645\u0627\u0646\u0646\u062f Wrapper \u0627\u0628\u0632\u0627\u0631\u06cc\u0650 Stateless \u06cc\u0627 Registry \u062b\u0627\u0628\u062a\u0650 \u062f\u0631-\u0633\u0637\u062d-\u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0633\u062a. \u0627\u0632 \u0622\u0646 \u0627\u062c\u062a\u0646\u0627\u0628 \u06a9\u0646\u06cc\u062f \u0648\u0642\u062a\u06cc \u0634\u06cc\u0621 \u0633\u0646\u06af\u06cc\u0646 \u0627\u0633\u062a \u06cc\u0627 Constructor\u0634 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0645\u06cc\u200c\u062e\u0648\u0627\u0646\u062f\u060c File Handle \u0628\u0627\u0632 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06cc\u0627 \u0627\u062a\u0635\u0627\u0644 \u0634\u0628\u06a9\u0647 \u0628\u0631\u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u0633\u0627\u0632\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Eager Initialization\u060c Instance \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Singleton \u0648\u0642\u062a\u06cc \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u06a9\u0644\u0627\u0633 \u062a\u0648\u0633\u0637 JVM \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u0648\u062f. Instance \u0642\u0628\u0644 \u0627\u0632 \u0647\u0631 \u06a9\u062f\u06cc \u06a9\u0647 <code>getInstance()<\/code> \u0631\u0627 \u0635\u062f\u0627 \u0628\u0632\u0646\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f\u2014\u0641\u0627\u0631\u063a \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0632\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f \u06cc\u0627 \u0646\u0647. JVM \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633 \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9\u200c\u0628\u0627\u0631 \u0628\u0647\u200c\u0627\u0632\u0627\u06cc \u0647\u0631 Classloader \u0627\u062c\u0631\u0627 \u0634\u062f\u0647 \u0648 Thread-Safe \u0627\u0633\u062a\u061b \u067e\u0633 \u0647\u06cc\u0686 \u06a9\u0644\u06cc\u062f\u0648\u0627\u0698\u0647 Synchronization\u0627\u06cc \u062f\u0631 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Eager Initialization<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.journaldev.singleton;\n\npublic class EagerInitializedSingleton {\n\n    \/\/ Instance \u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633 \u0633\u0627\u062e\u062a\u0647 \u0648 \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9\u200c\u0628\u0627\u0631 \u062a\u062e\u0635\u06cc\u0635 \u0645\u06cc\u200c\u06cc\u0627\u0628\u062f\n    private static final EagerInitializedSingleton instance = new EagerInitializedSingleton();\n\n    \/\/ Constructor \u062e\u0635\u0648\u0635\u06cc\u060c \u0633\u0627\u062e\u062a \u0627\u0632 \u0628\u06cc\u0631\u0648\u0646 \u0628\u0627 `new` \u0631\u0627 \u0628\u0644\u0627\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f\n    private EagerInitializedSingleton(){}\n\n    \/\/ \u0646\u0642\u0637\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0631\u0627\u0633\u0631\u06cc\u061b Instance \u0627\u0632-\u067e\u06cc\u0634-\u0633\u0627\u062e\u062a\u0647 \u0631\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f\n    public static EagerInitializedSingleton getInstance() {\n        return instance;\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u0632\u0627\u06cc\u0627 \u0648 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Eager Initialization \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u06cc\u0646 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Singleton \u062f\u0631 \u062c\u0627\u0648\u0627\u0633\u062a. JVM \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0644\u0627\u0633 \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9\u200c\u0628\u0627\u0631 \u0627\u062c\u0631\u0627 \u0634\u062f\u0647 \u0648 Thread-Safe \u0628\u0627\u0634\u062f\u061b \u067e\u0633 \u0647\u06cc\u0686 Synchronization\u0627\u06cc \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0645\u0632\u0627\u06cc\u0627:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0628\u0647\u200c\u0637\u0648\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 Thread-Safe \u0627\u0632 \u0637\u0631\u06cc\u0642 \u062a\u0636\u0645\u06cc\u0646 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633\u0650 JVM.<\/li>\n\n\n\n<li>\u0633\u0627\u062f\u0647\u200c\u062a\u0631\u06cc\u0646 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0627\u0632 \u0647\u0631 \u0647\u0641\u062a \u0646\u0648\u0639.<\/li>\n\n\n\n<li>\u0628\u062f\u0648\u0646 \u0633\u0631\u0628\u0627\u0631 Synchronization \u062f\u0631 \u0632\u0645\u0627\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Instance \u062d\u062a\u06cc \u0627\u06af\u0631 \u0647\u06cc\u0686 \u06a9\u062f\u06cc \u0647\u0631\u06af\u0632 <code>getInstance()<\/code> \u0631\u0627 \u0635\u062f\u0627 \u0646\u0632\u0646\u062f \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u061b \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u0634\u06cc\u0627\u0621 \u0633\u0646\u06af\u06cc\u0646\u060c \u062d\u0627\u0641\u0638\u0647 \u0631\u0627 \u0647\u062f\u0631 \u0645\u06cc\u200c\u062f\u0647\u062f.<\/li>\n\n\n\n<li>Constructor \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f Exception \u0627\u0632\u0646\u0648\u0639 Checked \u067e\u0631\u062a\u0627\u0628 \u06a9\u0646\u062f\u061b \u067e\u0633 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 Instantiate \u0645\u062d\u062f\u0648\u062f \u0627\u0633\u062a.<\/li>\n\n\n\n<li>\u0645\u0646\u0627\u0633\u0628 \u0646\u06cc\u0633\u062a \u0648\u0642\u062a\u06cc Singleton \u0645\u0646\u0627\u0628\u0639 \u06af\u0631\u0648\u0646\u06af\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u062a\u0635\u0627\u0644\u200c\u0647\u0627\u06cc \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u06cc\u0627 File Handle\u0647\u0627 \u0631\u0627 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u062f \u06a9\u0647 \u0628\u0627\u06cc\u062f Lazy \u0633\u0627\u062e\u062a\u0647 \u0634\u0648\u0646\u062f.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Singleton \u0628\u0627 Static Block Initialization<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 Static Block Initialization \u0648\u0642\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 Constructor \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Singleton\u062a\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u062f. Eager Initialization \u0628\u0647 Constructor \u0627\u062c\u0627\u0632\u0647 \u067e\u0631\u062a\u0627\u0628 Exception\u0650 Checked \u0646\u0645\u06cc\u200c\u062f\u0647\u062f\u061b \u0686\u0648\u0646 \u0647\u06cc\u0686 try\/catch\u0627\u06cc Initializer \u0641\u06cc\u0644\u062f \u0631\u0627 \u0646\u0645\u06cc\u200c\u067e\u06cc\u0686\u062f. \u0627\u06af\u0631 Singleton\u062a\u0627\u0646 \u062d\u06cc\u0646 \u0633\u0627\u062e\u062a \u0641\u0627\u06cc\u0644 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u06cc\u200c\u062e\u0648\u0627\u0646\u062f\u060c Socket \u0628\u0627\u0632 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06cc\u0627 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 Native \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c Static Block \u0628\u0647 \u0634\u0645\u0627 \u062c\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u06af\u0631\u0641\u062a\u0646 \u062e\u0631\u0627\u0628\u06cc \u0648 \u062a\u0628\u062f\u06cc\u0644\u0634 \u0628\u0647 RuntimeException\u0627\u06cc \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0628\u0627 \u062e\u0637\u0627\u06cc\u06cc \u0631\u0648\u0634\u0646 \u0645\u062a\u0648\u0642\u0641 \u0645\u06cc\u200c\u06a9\u0646\u062f\u2014\u0628\u0647\u200c\u062c\u0627\u06cc \u0631\u0647\u0627 \u06a9\u0631\u062f\u0646 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u062f\u0631 \u0648\u0636\u0639\u06cc\u062a \u0646\u06cc\u0645\u0647-\u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc\u200c\u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Static Block Initialization \u0627\u0632 \u0647\u0631 \u062c\u0647\u062a \u062f\u06cc\u06af\u0631\u060c \u0627\u0632 \u0646\u0638\u0631 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u0628\u0627 Earge Initialization \u06cc\u06a9\u0633\u0627\u0646 \u0627\u0633\u062a: Instance \u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633 \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0628\u0647\u200c\u0648\u0627\u0633\u0637\u0647 \u062a\u0636\u0645\u06cc\u0646 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633\u0650 JVM\u060c Thread-Safe \u0627\u0633\u062a \u0648 Lazy \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Static Block<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.journaldev.singleton;\n\npublic class StaticBlockSingleton {\n\n    private static StaticBlockSingleton instance;\n\n    private StaticBlockSingleton(){}\n\n    \/\/ Static Block \u06cc\u06a9\u200c\u0628\u0627\u0631 \u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633 \u0627\u062c\u0631\u0627\u061b \u0633\u0627\u062e\u062a \u0631\u0627 \u062f\u0631 try\/catch \u0645\u06cc\u200c\u067e\u06cc\u0686\u062f\n    static {\n        try {\n            instance = new StaticBlockSingleton();\n        } catch (Exception e) {\n            \/\/ \u062a\u0628\u062f\u06cc\u0644 \u0647\u0631 exception \u0627\u0632\u0646\u0648\u0639 checked \u0628\u0647 RuntimeException \u062a\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633 \u0633\u0631\u06cc\u0639 \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u062f\n            throw new RuntimeException(\"Exception occurred in creating singleton instance\");\n        }\n    }\n\n    public static StaticBlockSingleton getInstance() {\n        return instance;\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0686\u0647 \u0632\u0645\u0627\u0646\u06cc Static Block \u0631\u0627 \u0628\u0647\u200c\u062c\u0627\u06cc Eager Initialization \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 Static Block Initialization \u0648\u0642\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 Constructor \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Singleton \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0627 Exception\u0650 Checked \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u062f (\u0645\u062b\u0644\u0627\u064b \u062d\u06cc\u0646 \u062e\u0648\u0627\u0646\u062f\u0646 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0627\u0632 \u062f\u06cc\u0633\u06a9 \u06cc\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0645\u0646\u0628\u0639 \u0634\u0628\u06a9\u0647\u200c\u0627\u06cc). \u0647\u0631 \u062f\u0648 \u0631\u0648\u06cc\u06a9\u0631\u062f Instance \u0631\u0627 Eager \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f\u061b \u067e\u0633 \u0647\u06cc\u0686\u200c\u06a9\u062f\u0627\u0645 \u0628\u0631\u0627\u06cc \u0645\u0646\u0627\u0628\u0639 \u0633\u0646\u06af\u06cc\u0646\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f Lazy \u0633\u0627\u062e\u062a\u0647 \u0634\u0648\u0646\u062f \u0645\u0646\u0627\u0633\u0628 \u0646\u06cc\u0633\u062a\u0646\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Singleton \u0628\u0627 Lazy Initialization<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Lazy Initialization \u0633\u0627\u062e\u062a Singleton \u0631\u0627 \u062a\u0627 \u0627\u0648\u0644\u06cc\u0646 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc <code>getInstance()<\/code> \u0628\u0647 \u062a\u0639\u0648\u06cc\u0642 \u0645\u06cc\u200c\u0627\u0646\u062f\u0627\u0632\u062f. Instance \u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633 \u0633\u0627\u062e\u062a\u0647 \u0646\u0645\u06cc\u200c\u0634\u0648\u062f\u061b \u06a9\u0647 \u0628\u0631\u0627\u06cc Singleton\u0647\u0627\u06cc \u0633\u0646\u06af\u06cc\u0646\u06cc \u06a9\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0631 \u0647\u0631 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0644\u0627\u0632\u0645 \u0646\u0628\u0627\u0634\u0646\u062f \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Lazy Initialization<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.journaldev.singleton;\n\npublic class LazyInitializedSingleton {\n\n    private static LazyInitializedSingleton instance;\n\n    private LazyInitializedSingleton(){}\n\n    public static LazyInitializedSingleton getInstance() {\n        \/\/ \u0645\u0648\u0627\u062c\u0647\u0647 \u0628\u0627 race condition: \u0686\u0646\u062f thread \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0627\u0632 \u0627\u06cc\u0646 \u0686\u06cc\u0632 \u0639\u0628\u0648\u0631 \u06a9\u0646\u0646\u062f\n        if (instance == null) {\n            instance = new LazyInitializedSingleton();\n        }\n        return instance;\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u0633\u0626\u0644\u0647 Thread Safety \u062f\u0631 Lazy Initialization \u0633\u0627\u062f\u0647<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u0647\u0634\u062f\u0627\u0631:<\/strong> \u0627\u06cc\u0646 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Thread-Safe \u0646\u06cc\u0633\u062a \u0648 \u062a\u062d\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u0647\u0645\u200c\u0632\u0645\u0627\u0646\u060c \u062a\u0636\u0645\u06cc\u0646 Singleton \u0631\u0627 \u0645\u06cc\u200c\u0634\u06a9\u0646\u062f. \u0641\u0642\u0637 \u062f\u0631 \u0632\u0645\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f-\u0634\u062f\u0647\u0654 \u062a\u06a9-Thread\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u0634 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648 Thread \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u062f\u0631\u0648\u0646 \u0686\u06a9 null \u062f\u0631\u0647\u0645\u200c\u062a\u0646\u06cc\u062f\u0647 \u0634\u062f\u0647 \u0648 \u062f\u0648 Instance \u0645\u062a\u0645\u0627\u06cc\u0632 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0646\u062f:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Thread A \u0645\u0642\u062f\u0627\u0631 <code>instance == null<\/code> \u0631\u0627 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0646\u062a\u06cc\u062c\u0647: true.<\/li>\n\n\n\n<li>Thread B \u0645\u0642\u062f\u0627\u0631 <code>instance == null<\/code> \u0631\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0627\u062a\u0645\u0627\u0645 \u0633\u0627\u062e\u062a \u0634\u06cc\u0621 \u062a\u0648\u0633\u0637 Thread A \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0646\u062a\u06cc\u062c\u0647: true.<\/li>\n\n\n\n<li>\u0647\u0631 \u062f\u0648 Thread <code>new LazyInitializedSingleton()<\/code> \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f.<\/li>\n\n\n\n<li>\u062f\u0648 Instance \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0648 \u062a\u0636\u0645\u06cc\u0646 Singleton \u0634\u06a9\u0633\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0628\u0639\u062f\u06cc\u060c \u0686\u0647\u0627\u0631 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 Thread-Safe \u0631\u0627\u2014from \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u062a\u0627 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0647\u0632\u06cc\u0646\u0647 Synchronization\u2014\u067e\u0648\u0634\u0634 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Singleton \u0627\u0645\u0646-\u0628\u0631\u0627\u06cc-Thread \u0628\u0627 \u0645\u062a\u062f Synchronized<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u0647 Lazy Initialization \u0648 Thread Safety \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f \u0648 \u0646\u06af\u0631\u0627\u0646 \u06a9\u0627\u0631\u0627\u06cc\u06cc \u0632\u06cc\u0631 \u0647\u0645\u200c\u0632\u0645\u0627\u0646\u06cc \u0628\u0627\u0644\u0627 \u0646\u06cc\u0633\u062a\u06cc\u062f\u060c \u0639\u0644\u0627\u0645\u062a\u200c\u06af\u0630\u0627\u0631\u06cc <code>getInstance()<\/code> \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 synchronized \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u06cc\u0646 \u0631\u0627\u0647\u200c\u062d\u0644 \u062f\u0631\u0633\u062a \u0627\u0633\u062a. \u0641\u0642\u0637 \u06cc\u06a9 Thread \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u0647\u0631 \u0644\u062d\u0638\u0647 \u0648\u0627\u0631\u062f \u0645\u062a\u062f \u0634\u0648\u062f\u061b \u06a9\u0647 Race Condition \u062a\u0648\u0635\u06cc\u0641\u200c\u0634\u062f\u0647 \u062f\u0631 \u0628\u062e\u0634 \u0642\u0628\u0644\u06cc \u0631\u0627 \u0645\u06cc\u200c\u0628\u0646\u062f\u062f. \u0628\u062f\u0647\u200c\u0628\u0633\u062a\u0627\u0646 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0647\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc <code>getInstance()<\/code> \u0642\u0641\u0644 Monitor \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f\u2014even \u0645\u06cc\u0644\u06cc\u0648\u0646\u200c\u0647\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc\u200c\u0627\u06cc \u06a9\u0647 \u0628\u0639\u062f \u0627\u0632 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0646 Instance \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc\u200c\u0627\u0641\u062a\u0646\u062f. \u0628\u0631\u0627\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u0647\u0627\u06cc\u06cc \u06a9\u0647 <code>getInstance()<\/code> \u0628\u0647\u200c\u0646\u062f\u0631\u062a \u0635\u062f\u0627 \u0632\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0627\u06cc\u0646 \u0633\u0631\u0628\u0627\u0631 \u0628\u06cc\u200c\u0627\u0647\u0645\u06cc\u062a \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0645\u0633\u06cc\u0631\u0647\u0627\u06cc \u062f\u0627\u063a \u06a9\u0647 \u0647\u0632\u0627\u0631\u0627\u0646 Thread \u062f\u0631 \u062b\u0627\u0646\u06cc\u0647 \u0635\u062f\u0627 \u0645\u06cc\u200c\u0632\u0646\u0646\u062f\u060c \u0628\u0647\u200c\u062c\u0627\u06cc\u0634 \u0627\u0632 Bill Pugh \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.journaldev.singleton;\n\npublic class ThreadSafeSingleton {\n\n    private static ThreadSafeSingleton instance;\n\n    private ThreadSafeSingleton(){}\n\n    \/\/ synchronized \u0647\u0645\u0647 caller\u0647\u0627 \u0631\u0627 \u0633\u0631\u06cc\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u0641\u0642\u0637 \u06cc\u06a9 thread \u062f\u0631 \u0647\u0631 \u0644\u062d\u0638\u0647 \u0648\u0627\u0631\u062f \u0645\u062a\u062f \u0645\u06cc\u200c\u0634\u0648\u062f\n    public static synchronized ThreadSafeSingleton getInstance() {\n        if (instance == null) {\n            instance = new ThreadSafeSingleton();\n        }\n        return instance;\n    }\n\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0647\u0632\u06cc\u0646\u0647 \u06a9\u0627\u0631\u0627\u06cc\u06cc Synchronization<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc <code>getInstance()<\/code> \u0647\u0645\u06af\u0627\u0645\u200c\u0634\u062f\u0647\u060c Monitor \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f\u061b \u06a9\u0647 \u0634\u0627\u0645\u0644 Compare-And-Swap \u0631\u0648\u06cc Lock Word \u0648 Memory Barrier \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0647\u0632\u06cc\u0646\u0647 \u0631\u0648\u06cc \u0647\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u067e\u0631\u062f\u0627\u062e\u062a \u0645\u06cc\u200c\u0634\u0648\u062f\u2014including \u0645\u06cc\u0644\u06cc\u0648\u0646\u200c\u0647\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc\u200c\u0627\u06cc \u06a9\u0647 \u0628\u0639\u062f \u0627\u0632 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0646 Instance \u0631\u062e \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u0648 \u0642\u0641\u0644 \u062f\u06cc\u06af\u0631 \u0647\u06cc\u0686 \u0647\u062f\u0641\u06cc \u0631\u0627 \u062e\u062f\u0645\u062a \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f. \u0632\u06cc\u0631 Contention\u060c \u0647\u0645\u0647 Caller\u0647\u0627 \u0631\u0648\u06cc Monitor \u0633\u0631\u06cc\u0627\u0644 \u0634\u062f\u0647 \u0648 Throughput \u0641\u0631\u0648 \u0645\u06cc\u200c\u0631\u06cc\u0632\u062f. Double-Checked Locking \u0627\u06cc\u0646 \u0631\u0627 \u0628\u0627 Synchronize \u06a9\u0631\u062f\u0646 \u0641\u0642\u0637 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u06a9\u0648\u062a\u0627\u0647\u0650 \u062d\u06cc\u0646 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0646 Instance \u062d\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u06a9\u0647 \u067e\u0633 \u0627\u0632 \u0622\u0646\u060c \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc\u200c\u0647\u0627\u06cc \u0628\u0639\u062f\u06cc \u0641\u0642\u0637 \u06cc\u06a9 \u062e\u0648\u0627\u0646\u062f\u0646\u0650 volatile \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Double-Checked Locking \u062f\u0631 \u062c\u0627\u0648\u0627<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Double-Checked Locking \u0645\u0642\u062f\u0627\u0631 <code>instance == null<\/code> \u0631\u0627 \u062f\u0648 \u0628\u0627\u0631 \u0686\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f: \u06cc\u06a9\u200c\u0628\u0627\u0631 \u0628\u06cc\u0631\u0648\u0646 \u0628\u0644\u0627\u06a9 synchronized\u2014\u0628\u0631\u0627\u06cc \u0627\u062c\u062a\u0646\u0627\u0628 \u0627\u0632 \u0642\u0641\u0644 \u0648\u0642\u062a\u06cc Instance \u0627\u0632 \u0642\u0628\u0644 \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a\u061b \u0648 \u06cc\u06a9\u200c\u0628\u0627\u0631 \u062f\u0631\u0648\u0646 \u0628\u0644\u0627\u06a9 synchronized\u2014\u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0633\u0627\u062e\u062a Instance \u062a\u0648\u0633\u0637 \u062f\u0648 Thread \u0628\u0639\u062f \u0627\u0632 \u0639\u0628\u0648\u0631 \u0647\u0631 \u062f\u0648 \u0627\u0632 \u0686\u06a9 \u0627\u0648\u0644.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0686\u0631\u0627 volatile \u0644\u0627\u0632\u0645 \u0627\u0633\u062a<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0627\u062e\u062a \u0634\u06cc\u0621 \u062f\u0631 JVM \u062f\u0631 \u0633\u0647 \u0642\u062f\u0645 \u0631\u062e \u0645\u06cc\u200c\u062f\u0647\u062f: (\u06f1) \u062a\u062e\u0635\u06cc\u0635 \u062d\u0627\u0641\u0638\u0647\u060c (\u06f2) \u0627\u062c\u0631\u0627\u06cc Constructor \u0628\u0631\u0627\u06cc \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0641\u06cc\u0644\u062f\u0647\u0627\u060c (\u06f3) \u062a\u062e\u0635\u06cc\u0635 Reference \u0628\u0647 instance. \u0628\u062f\u0648\u0646 volatile\u060c \u0628\u0647 JVM \u06cc\u0627 CPU \u0627\u062c\u0627\u0632\u0647 Reorder \u06a9\u0631\u062f\u0646 \u0642\u062f\u0645\u200c\u0647\u0627\u06cc \u06f2 \u0648 \u06f3 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f. Thread \u062f\u0648\u0645 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0622\u0646\u06af\u0627\u0647 Reference\u0627\u06cc\u0650 \u063a\u06cc\u0631-null \u0628\u062e\u0648\u0627\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0634\u06cc\u0621\u0650 \u0646\u06cc\u0645\u0647-\u0633\u0627\u062e\u062a\u0647 \u0627\u0634\u0627\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0639\u0644\u0627\u0646 \u0645\u062a\u063a\u06cc\u0631 instance \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 volatile \u0627\u0632 \u0627\u06cc\u0646 Reorder \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0631\u062f\u0647 \u0648 \u0631\u0627\u0628\u0637\u0647 Happens-Before \u0628\u06cc\u0646 \u0646\u0648\u0634\u062a\u0646 \u0648 \u0647\u0631 \u062e\u0648\u0627\u0646\u062f\u0646 \u0628\u0639\u062f\u06cc \u0628\u06cc\u0646 Thread\u0647\u0627 \u0628\u0631\u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0628\u0627 \u06a9\u062f \u062a\u0648\u0636\u06cc\u062d\u200c\u062f\u0627\u0631<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.journaldev.singleton;\n\npublic class DoubleCheckedLockingSingleton {\n\n    \/\/ volatile \u062f\u06cc\u062f \u0631\u0627 \u0628\u06cc\u0646 thread\u0647\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0648 reordering \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0631\u0627 \u0646\u0645\u06cc\u200c\u06af\u0630\u0627\u0631\u062f\n    private static volatile DoubleCheckedLockingSingleton instance;\n\n    private DoubleCheckedLockingSingleton() {}\n\n    public static DoubleCheckedLockingSingleton getInstance() {\n        \/\/ \u0686\u06a9 \u0627\u0648\u0644: \u0627\u06af\u0631 instance \u0627\u0632 \u0642\u0628\u0644 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0627\u0632 \u06af\u0631\u0641\u062a\u0646 \u0642\u0641\u0644 \u0627\u062c\u062a\u0646\u0627\u0628 \u06a9\u0646\n        if (instance == null) {\n            \/\/ \u0641\u0642\u0637 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u06a9\u0648\u062a\u0627\u0647 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 synchronize \u06a9\u0646\n            synchronized (DoubleCheckedLockingSingleton.class) {\n                \/\/ \u0686\u06a9 \u062f\u0648\u0645: \u0627\u06af\u0631 \u062f\u0648 thread \u0627\u0632 \u0686\u06a9 \u0627\u0648\u0644 \u06af\u0630\u0634\u062a\u0647 \u0628\u0648\u062f\u0646\u062f \u062c\u0644\u0648\u06cc \u0633\u0627\u062e\u062a \u062a\u06a9\u0631\u0627\u0631\u06cc \u0631\u0627 \u0628\u06af\u06cc\u0631\n                if (instance == null) {\n                    instance = new DoubleCheckedLockingSingleton();\n                }\n            }\n        }\n        return instance;\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u062a\u0636\u0645\u06cc\u0646\u200c\u0647\u0627\u06cc Memory Model \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 JVM<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u0646\u06a9\u062a\u0647:<\/strong> \u0627\u06cc\u0646 \u062a\u0636\u0645\u06cc\u0646 \u0628\u0647 Memory Model \u062c\u0627\u0648\u0627 \u06f5+ \u062a\u0639\u0631\u06cc\u0641\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 JSR-133 \u0648\u0627\u0628\u0633\u062a\u0647 \u0627\u0633\u062a. \u0631\u0648\u06cc JDK\u0647\u0627\u06cc \u0642\u0628\u0644 \u0627\u0632 \u062c\u0627\u0648\u0627 \u06f5\u060c Double-Checked Locking\u2014even \u0628\u0627 volatile\u2014\u0634\u06a9\u0633\u062a\u0647 \u0628\u0648\u062f.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u0632\u06cc\u0631 JSR-133\u060c \u0646\u0648\u0634\u062a\u0646 \u0631\u0648\u06cc \u0645\u062a\u063a\u06cc\u0631 volatile \u0642\u0628\u0644 \u0627\u0632 \u0647\u0631 \u062e\u0648\u0627\u0646\u062f\u0646 \u0628\u0639\u062f\u06cc\u0650 \u0622\u0646 \u0645\u062a\u063a\u06cc\u0631 \u0628\u06cc\u0646 Thread\u0647\u0627 Happens-Before \u0627\u0633\u062a. JVM \u0645\u0648\u0638\u0641 \u0627\u0633\u062a \u0634\u06cc\u0621 \u06a9\u0627\u0645\u0644\u0627\u064b-\u0633\u0627\u062e\u062a\u0647 \u0631\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0647\u0631 Thread\u0627\u06cc \u06a9\u0647 Reference \u063a\u06cc\u0631-null \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u062f\u061b \u067e\u0633 \u0647\u06cc\u0686 Thread\u0627\u06cc \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0641\u06cc\u0644\u062f volatile\u060c Instance\u0650 \u0646\u06cc\u0645\u0647-\u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc\u200c\u0634\u062f\u0647\u200c\u0627\u06cc \u0628\u0628\u06cc\u0646\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Bill Pugh Singleton<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Bill Pugh Singleton<\/strong>\u2014\u06a9\u0647 \u0628\u0647 initialization-on-demand holder idiom \u0647\u0645 \u0645\u0639\u0631\u0648\u0641 \u0627\u0633\u062a\u2014\u0627\u0632 \u06a9\u0644\u0627\u0633 Helper \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u062f\u0627\u062e\u0644\u06cc \u0628\u0631\u0627\u06cc \u0628\u0647 \u062a\u0639\u0648\u06cc\u0642 \u0627\u0646\u062f\u0627\u062e\u062a\u0646 \u0633\u0627\u062e\u062a Instance \u062a\u0627 \u0627\u0648\u0644\u06cc\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc\u060c \u0628\u062f\u0648\u0646 \u0647\u06cc\u0686 Synchronization \u0635\u0631\u06cc\u062d\u06cc\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u062a\u0648\u0633\u0637 Bill Pugh \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u067e\u0627\u0633\u062e\u06cc \u0628\u0647 \u063a\u06cc\u0631\u0642\u0627\u0628\u0644-\u0627\u0639\u062a\u0645\u0627\u062f \u0628\u0648\u062f\u0646 Double-Checked Locking \u0632\u06cc\u0631 Memory Model \u0642\u0628\u0644 \u0627\u0632 \u062c\u0627\u0648\u0627 \u06f5 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0634\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u06a9\u0644\u0627\u0633 Helper \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u062f\u0627\u062e\u0644\u06cc \u0686\u06af\u0648\u0646\u0647 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.journaldev.singleton;\n\npublic class BillPughSingleton {\n\n    private BillPughSingleton(){}\n\n    \/\/ \u06a9\u0644\u0627\u0633 \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u062f\u0627\u062e\u0644\u06cc \u062a\u0627 \u0627\u0648\u0644\u06cc\u0646 \u0627\u0631\u062c\u0627\u0639 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0645\u06cc\u200c\u0634\u0648\u062f\n    private static class SingletonHelper {\n        \/\/ INSTANCE \u0648\u0642\u062a\u06cc \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 JVM \u06a9\u0644\u0627\u0633 SingletonHelper \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0646\u062f\n        private static final BillPughSingleton INSTANCE = new BillPughSingleton();\n    }\n\n    public static BillPughSingleton getInstance() {\n        \/\/ \u0627\u0648\u0644\u06cc\u0646 \u0627\u0631\u062c\u0627\u0639 \u0628\u0647 SingletonHelper \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0644\u0627\u0633\u0634 \u0631\u0627 trigger \u0645\u06cc\u200c\u06a9\u0646\u062f\n        return SingletonHelper.INSTANCE;\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">SingletonHelper \u0648\u0642\u062a\u06cc BillPughSingleton \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0645\u06cc\u200c\u0634\u0648\u062f. JVM \u0641\u0642\u0637 \u0648\u0642\u062a\u06cc \u0622\u0646 \u0631\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 <code>getInstance()<\/code> \u0628\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646\u200c\u0628\u0627\u0631 \u0635\u062f\u0627 \u0632\u062f\u0647 \u0634\u0648\u062f\u061b \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0646\u0642\u0637\u0647 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0644\u0627\u0633 \u0627\u062c\u0631\u0627 \u0634\u062f\u0647 \u0648 INSTANCE \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f. \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0644\u0627\u0633 \u0630\u0627\u062a\u0627\u064b Thread-Safe \u0627\u0633\u062a\u061b \u0686\u0648\u0646 JVM \u0628\u0631\u0627\u06cc \u0645\u062f\u062a \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0644\u0627\u0633 \u0642\u0641\u0644 \u062f\u0627\u062e\u0644\u06cc \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f\u061b \u067e\u0633 \u0647\u06cc\u0686 \u0628\u0644\u0627\u06a9 synchronized \u06cc\u0627 \u0641\u06cc\u0644\u062f volatile\u0627\u06cc \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0627\u06cc\u0646 \u0628\u0631 Double-Checked Locking \u062a\u0631\u062c\u06cc\u062d \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Bill Pugh \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0648 \u0633\u0631\u0628\u0627\u0631 Synchronization \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Double-Checked Locking \u0631\u0627 \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u062f:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0647\u06cc\u0686 \u0628\u0644\u0627\u06a9 synchronized \u0635\u0631\u06cc\u062d\u06cc \u062f\u0631 \u0645\u062d\u0644 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.<\/li>\n\n\n\n<li>\u0647\u06cc\u0686 \u0641\u06cc\u0644\u062f volatile\u0627\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.<\/li>\n\n\n\n<li>\u0630\u0627\u062a\u0627\u064b Lazy \u0627\u0633\u062a: Instance \u0628\u0627 \u0627\u0648\u0644\u06cc\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u061b \u0646\u0647 \u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633.<\/li>\n\n\n\n<li>\u06a9\u062f \u062a\u0645\u06cc\u0632\u062a\u0631 \u0628\u062f\u0648\u0646 \u0686\u06a9 null\u0650 \u062f\u0648\u0628\u0644.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bill Pugh\u060c \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Singleton \u0647\u0645\u0647-\u0645\u0646\u0638\u0648\u0631\u0647\u0654 \u062a\u0648\u0635\u06cc\u0647\u200c\u0634\u062f\u0647 \u0627\u0633\u062a \u0648\u0642\u062a\u06cc Lazy Loading \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Enum Singleton \u062f\u0631 \u062c\u0627\u0648\u0627<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Enum Singleton<\/strong> \u06cc\u06a9 \u0646\u0648\u0639 Enum \u062a\u06a9-\u0645\u0642\u062f\u0627\u0631\u06cc \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u062b\u0627\u0628\u062a \u0645\u0646\u0641\u0631\u062f\u0634 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 Instance \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Singleton \u0639\u0645\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f. JVM \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u062b\u0627\u0628\u062a \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9\u200c\u0628\u0627\u0631 Instantiate \u0634\u062f\u0647 \u0648 \u0645\u062d\u0627\u0641\u0638\u062a \u062f\u0627\u062e\u0644\u06cc \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u0647\u0631 \u062f\u0648 \u062d\u0645\u0644\u0647 Reflection \u0648 Serialization \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. Joshua Bloch \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0631\u0627 \u062f\u0631 \u06a9\u062a\u0627\u0628 Effective Java (\u0622\u06cc\u062a\u0645 \u06f3) \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u062b\u0627\u0644 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.journaldev.singleton;\n\npublic enum EnumSingleton {\n\n    \/\/ INSTANCE \u062a\u0646\u0647\u0627 \u062b\u0627\u0628\u062a enum \u0648 instance \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 singleton \u0627\u0633\u062a\n    INSTANCE;\n\n    \/\/ \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc instance \u0627\u0645\u0646\u200c\u0627\u0646\u062f \u0628\u0631\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u061b \u0647\u0631 \u062b\u0627\u0628\u062a enum \u0646\u0633\u062e\u0647 \u062e\u0648\u062f\u0634 \u0631\u0627 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f\n    private String databaseUrl = \"jdbc:postgresql:\/\/localhost:5432\/appdb\";\n    private int maxConnections = 10;\n\n    public String getDatabaseUrl() {\n        return databaseUrl;\n    }\n\n    public void setDatabaseUrl(String url) {\n        \/\/ \u062f\u0631 \u067e\u0631\u0648\u062f\u0627\u06a9\u0634\u0646\u060c \u0646\u0648\u0634\u062a\u0646\u200c\u0647\u0627 \u0631\u0627 \u0628\u0627 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0645\u062d\u0627\u0641\u0638 \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u0641\u06cc\u0644\u062f \u0631\u0627 final \u0628\u06af\u0630\u0627\u0631\u06cc\u062f\n        this.databaseUrl = url;\n    }\n\n    public int getMaxConnections() {\n        return maxConnections;\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u062f \u0628\u06cc\u0631\u0648\u0646\u06cc \u0627\u0632 \u0637\u0631\u06cc\u0642 \u062b\u0627\u0628\u062a Enum \u0628\u0647 Singleton \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc singleton \u0648 \u062e\u0648\u0627\u0646\u062f\u0646 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\nString url = EnumSingleton.INSTANCE.getDatabaseUrl();\nint maxConn = EnumSingleton.INSTANCE.getMaxConnections();\n\n\/\/ \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627\nEnumSingleton.INSTANCE.setDatabaseUrl(\"jdbc:postgresql:\/\/prod-host:5432\/appdb\");<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0686\u0631\u0627 Joshua Bloch enum Singleton \u0631\u0627 \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0647 \u0648\u06cc\u0698\u06af\u06cc\u060c enum Singleton \u0631\u0627 \u0627\u0645\u0646\u200c\u062a\u0631\u06cc\u0646 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u0646\u062f:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0636\u062f Reflection.<\/strong> JVM \u0633\u0627\u062e\u062a\u0650 \u0627\u0632\u0646\u0648\u0639 Reflective\u0650 \u0627\u0646\u0648\u0627\u0639 enum \u0631\u0627 \u0645\u0645\u0646\u0648\u0639 \u0645\u06cc\u200c\u06a9\u0646\u062f. <code>Constructor.newInstance()<\/code> \u0631\u0648\u06cc enum\u060c IllegalArgumentException \u067e\u0631\u062a\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u0636\u062f Serialization.<\/strong> JVM \u062f\u0633\u062a\u200c\u0632\u062f\u0644\u0633\u06cc\u0650 enum \u0631\u0627 \u0628\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u062b\u0627\u0628\u062a\u0650 \u0645\u0648\u062c\u0648\u062f\u2014\u0628\u0647\u200c\u062c\u0627\u06cc \u0635\u062f\u0627 \u0632\u062f\u0646 Constructor \u06cc\u0627 readObject()\u2014\u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0647\u06cc\u0686 readResolve()\u0627\u06cc \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a.<\/li>\n\n\n\n<li><strong>\u0645\u062e\u062a\u0635\u0631.<\/strong> \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0627\u0632 \u0647\u0645\u0647 \u0647\u0641\u062a \u0631\u0648\u06cc\u06a9\u0631\u062f \u06a9\u0648\u062a\u0627\u0647\u200c\u062a\u0631\u06cc\u0646 \u0627\u0633\u062a.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Enum Singleton\u060c \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Singleton \u062a\u0648\u0635\u06cc\u0647\u200c\u0634\u062f\u0647 \u062f\u0631 \u0647\u0645\u0647 \u0645\u0648\u0627\u0631\u062f\u06cc \u0627\u0633\u062a \u06a9\u0647 Lazy Initialization \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc Enum Singleton<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Lazy Initialization \u0646\u062f\u0627\u0631\u062f.<\/strong> Instance \u0648\u0642\u062a\u06cc \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u06a9\u0644\u0627\u0633 enum \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u0648\u062f.<\/li>\n\n\n\n<li><strong>\u0627\u0631\u062b\u200c\u0628\u0631\u06cc \u0627\u0632 Superclass \u0646\u062f\u0627\u0631\u062f.<\/strong> Enum\u0647\u0627 \u0636\u0645\u0646\u0627\u064b java.lang.Enum \u0631\u0627 Extend \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f \u0648 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0647\u06cc\u0686 \u06a9\u0644\u0627\u0633 \u062f\u06cc\u06af\u0631\u06cc \u0631\u0627 Extend \u06a9\u0646\u0646\u062f. \u0627\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f Interface \u067e\u06cc\u0627\u062f\u0647 \u06a9\u0646\u0646\u062f.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Singleton \u062f\u0631 \u0645\u0642\u0627\u0628\u0644 \u06a9\u0644\u0627\u0633 Static \u062f\u0631 \u062c\u0627\u0648\u0627<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Singleton \u0648 \u06a9\u0644\u0627\u0633\u06cc \u0628\u0627 \u0641\u0642\u0637 \u0627\u0639\u0636\u0627\u06cc Static\u060c \u0647\u0631 \u062f\u0648 \u0646\u0642\u0637\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0646\u0641\u0631\u062f\u06cc \u0628\u0647 \u0648\u0636\u0639\u06cc\u062a \u0645\u0634\u062a\u0631\u06a9 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f\u061b \u0627\u0645\u0627 \u062f\u0631 \u0642\u0627\u0628\u0644\u06cc\u062a \u0648 \u0647\u062f\u0641 \u0645\u062a\u0641\u0627\u0648\u062a\u200c\u0627\u0646\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u062c\u062f\u0648\u0644 \u062a\u0641\u0627\u0648\u062a\u200c\u0647\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u0648\u06cc\u0698\u06af\u06cc<\/th><th>Singleton<\/th><th>\u06a9\u0644\u0627\u0633 Static<\/th><\/tr><\/thead><tbody><tr><td>Instantiate \u0634\u062f\u0646<\/td><td>Instance \u0645\u0646\u0641\u0631\u062f\u060c \u0633\u0627\u062e\u062a\u0647\u200c\u0634\u062f\u0647 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0646\u06cc\u0627\u0632 \u06cc\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc<\/td><td>\u0628\u062f\u0648\u0646 Instantiate\u061b \u0641\u0642\u0637 \u0627\u0639\u0636\u0627\u06cc static<\/td><\/tr><tr><td>\u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Interface<\/td><td>\u0628\u0644\u0647<\/td><td>\u062e\u06cc\u0631<\/td><\/tr><tr><td>\u0627\u0631\u062b\u200c\u0628\u0631\u06cc<\/td><td>\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f superclass \u0631\u0627 extend \u06a9\u0646\u062f<\/td><td>\u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u06a9\u0644\u0627\u0633\u06cc \u0631\u0627 extend \u06a9\u0646\u062f (\u0639\u0645\u0644\u0627\u064b implicit final)<\/td><\/tr><tr><td>Lazy initialization<\/td><td>\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc\u200c\u0634\u062f\u0647 (Bill Pugh\u060c double-checked locking)<\/td><td>\u0642\u0627\u0628\u0644 \u0627\u0639\u0645\u0627\u0644 \u0646\u06cc\u0633\u062a<\/td><\/tr><tr><td>Serialization<\/td><td>\u0628\u0627 readResolve() \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc\u200c\u0634\u0648\u062f<\/td><td>\u0642\u0627\u0628\u0644 \u0627\u0639\u0645\u0627\u0644 \u0646\u06cc\u0633\u062a<\/td><\/tr><tr><td>Testability<\/td><td>\u0648\u0642\u062a\u06cc \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc inject \u0634\u0648\u062f \u0642\u0627\u0628\u0644 Mock \u0627\u0633\u062a<\/td><td>Mock \u06a9\u0631\u062f\u0646\u0634 \u062f\u0634\u0648\u0627\u0631 \u0627\u0633\u062a<\/td><\/tr><tr><td>State<\/td><td>\u062f\u0631 instance \u06a9\u067e\u0633\u0648\u0644\u0647<\/td><td>\u0627\u0632 \u0637\u0631\u06cc\u0642 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc static \u0645\u0634\u062a\u0631\u06a9<\/td><\/tr><tr><td>Polymorphism<\/td><td>\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc\u200c\u0634\u062f\u0647<\/td><td>\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc\u200c\u0646\u0634\u062f\u0647<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0647\u0631 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u0645<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0627\u0632 <strong>Singleton<\/strong> \u0648\u0642\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0634\u06cc\u0621 State \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u062f\u060c \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u0632\u0627\u0639\u0650 Interface\u0627\u06cc \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u06a9\u0646\u062f\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a Lazy Loading \u0644\u0627\u0632\u0645 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f \u06cc\u0627 \u0628\u0627\u06cc\u062f \u062f\u0631 \u062a\u0633\u062a \u0648\u0627\u062d\u062f \u0628\u0627 Mock \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0634\u0648\u062f.<\/li>\n\n\n\n<li>\u0627\u0632 <strong>\u06a9\u0644\u0627\u0633 Static<\/strong> \u0648\u0642\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 API \u06cc\u06a9 Utility\u0650 Stateless \u0628\u0627 \u0647\u06cc\u0686 \u0686\u0631\u062e\u0647 \u062d\u06cc\u0627\u062a Instance\u0627\u06cc \u0648 \u0647\u06cc\u0686 \u0646\u06cc\u0627\u0632 \u0628\u0647 Polymorphism \u0646\u06cc\u0633\u062a. \u0645\u062b\u0627\u0644\u200c\u0647\u0627 \u062f\u0631 JDK \u0639\u0628\u0627\u0631\u062a\u200c\u0627\u0646\u062f \u0627\u0632 java.util.Collections \u0648 java.util.Arrays.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u0634\u06a9\u0633\u062a\u0646 Singleton \u0628\u0627 Reflection \u0648 \u0646\u062d\u0648\u0647 \u067e\u06cc\u0634\u06af\u06cc\u0631\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Reflection \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0647\u0631 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Singleton\u0627\u06cc\u2014\u0628\u0647\u200c\u062c\u0632 enum\u2014\u0631\u0627 \u0628\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 Constructor \u062e\u0635\u0648\u0635\u06cc \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0628\u0634\u06a9\u0646\u062f. Enum Singleton \u062f\u0631 \u0633\u0637\u062d JVM \u0645\u0635\u0648\u0646 \u0627\u0633\u062a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u062b\u0627\u0644 \u062d\u0645\u0644\u0647 Reflection<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u0647\u0634\u062f\u0627\u0631:<\/strong> Reflection \u067e\u06cc\u0634\u0648\u0646\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u062e\u0635\u0648\u0635\u06cc \u0631\u0648\u06cc Constructor \u0631\u0627 \u062f\u0648\u0631 \u0632\u062f\u0647 \u0648 \u062a\u0636\u0645\u06cc\u0646 Singleton \u0631\u0627 \u0631\u0648\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc\u200c\u0647\u0627\u06cc eager\u060c static block\u060c lazy\u060c synchronized\u060c double-checked locking \u0648 Bill Pugh \u0645\u06cc\u200c\u0634\u06a9\u0646\u062f.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.journaldev.singleton;\n\nimport java.lang.reflect.Constructor;\n\npublic class ReflectionSingletonTest {\n\n    public static void main(String&#91;] args) {\n        EagerInitializedSingleton instanceOne = EagerInitializedSingleton.getInstance();\n        EagerInitializedSingleton instanceTwo = null;\n        try {\n            Constructor&#91;] constructors = EagerInitializedSingleton.class.getDeclaredConstructors();\n            for (Constructor constructor : constructors) {\n                \/\/ setAccessible(true) \u067e\u06cc\u0634\u0648\u0646\u062f private \u0631\u0648\u06cc constructor \u0631\u0627 \u062f\u0648\u0631 \u0645\u06cc\u200c\u0632\u0646\u062f\n                constructor.setAccessible(true);\n                \/\/ newInstance() \u0633\u0627\u062e\u062a instance \u062f\u0648\u0645 \u0631\u0627 \u0645\u06cc\u200c\u0633\u0627\u0632\u062f \u0648 \u062a\u0636\u0645\u06cc\u0646 singleton \u0631\u0627 \u0645\u06cc\u200c\u0634\u06a9\u0646\u062f\n                instanceTwo = (EagerInitializedSingleton) constructor.newInstance();\n                break;\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n        System.out.println(instanceOne.hashCode());\n        System.out.println(instanceTwo.hashCode());\n    }\n\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648 Hash Code \u0686\u0627\u067e\u200c\u0634\u062f\u0647 \u0645\u062a\u0641\u0627\u0648\u062a \u062e\u0648\u0627\u0647\u0646\u062f \u0628\u0648\u062f\u061b \u06a9\u0647 \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f \u062f\u0648 Instance \u0645\u062a\u0645\u0627\u06cc\u0632 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0646\u062f. \u0645\u0642\u0627\u062f\u06cc\u0631 \u062f\u0642\u06cc\u0642 \u0628\u0647\u200c\u0627\u0632\u0627\u06cc \u0647\u0631 \u0627\u062c\u0631\u0627\u06cc JVM \u0645\u062a\u063a\u06cc\u0631 \u0627\u0633\u062a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u067e\u06cc\u0634\u06af\u06cc\u0631\u06cc<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u06a9 Guard\u0627\u06cc \u062f\u0631 Constructor \u062e\u0635\u0648\u0635\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0648\u0642\u062a\u06cc Instance\u0627\u06cc \u0627\u0632 \u0642\u0628\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u067e\u0631\u062a\u0627\u0628 \u06a9\u0646\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private EagerInitializedSingleton() {\n    \/\/ \u0628\u0639\u062f \u0627\u0632 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0646 singleton\u060c \u0633\u0627\u062e\u062a\u0650 reflective \u0631\u0627 \u0628\u0644\u0627\u06a9 \u06a9\u0646\n    if (instance != null) {\n        throw new IllegalStateException(\n            \"Singleton instance already exists. Use getInstance() instead.\"\n        );\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 Guard \u0628\u0631\u0627\u06cc eager \u0648 static block \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u0686\u0648\u0646 instance \u062a\u0627 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627\u06cc \u0647\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc Reflection\u0627\u06cc\u060c \u063a\u06cc\u0631-null \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc\u200c\u0647\u0627\u06cc Lazy \u0628\u0647\u200c\u0637\u0648\u0631 \u0642\u0627\u0628\u0644-\u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u06a9\u0627\u0631 \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u0686\u0648\u0646 instance \u062d\u06cc\u0646 \u0627\u0648\u0644\u06cc\u0646 \u0633\u0627\u062e\u062a\u0650 \u0642\u0627\u0646\u0648\u0646\u06cc null \u0627\u0633\u062a\u061b \u06cc\u0639\u0646\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc Reflection\u0627\u06cc \u06a9\u0647 \u0628\u0627 <code>getInstance()<\/code> \u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0647\u062f \u0647\u0645\u0686\u0646\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0645\u0648\u0641\u0642 \u0634\u0648\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0645\u062d\u0627\u0641\u0638\u062a \u06a9\u0627\u0645\u0644 \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u062d\u0645\u0644\u0627\u062a Reflection\u060c \u0627\u0632 Enum Singleton \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. JVM \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc\u200c\u0647\u0627\u06cc <code>Constructor.newInstance()<\/code> \u0631\u0648\u06cc \u0627\u0646\u0648\u0627\u0639 enum \u0631\u0627 \u0628\u0627 IllegalArgumentException \u0631\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u06a9\u0647 \u062a\u0646\u0647\u0627 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0645\u0635\u0648\u0646 \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 Reflection \u062f\u0631 \u0633\u0637\u062d JVM \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0634\u06a9\u0633\u062a\u0646 Singleton \u0628\u0627 Serialization \u0648 \u0646\u062d\u0648\u0647 \u067e\u06cc\u0634\u06af\u06cc\u0631\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Singleton\u0627\u06cc \u06a9\u0647 Serializable \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0641\u0627\u06cc\u0644 \u06cc\u0627 Stream \u0634\u0628\u06a9\u0647\u200c\u0627\u06cc \u0646\u0648\u0634\u062a\u0647 \u0648 \u0627\u0632 \u0622\u0646 \u062e\u0648\u0627\u0646\u062f\u0647 \u0634\u0648\u062f. \u0627\u06cc\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u062f\u0631 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc \u062a\u0648\u0632\u06cc\u0639\u200c\u0634\u062f\u0647 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a\u061b \u0627\u0645\u0627 \u0628\u0631\u062f\u0627\u0631 \u062d\u0645\u0644\u0647 \u062f\u0648\u0645\u06cc \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u062a\u0636\u0645\u06cc\u0646 Singleton \u0631\u0627 \u0645\u06cc\u200c\u0634\u06a9\u0646\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u0633\u0626\u0644\u0647 Serialization<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u0647\u0634\u062f\u0627\u0631:<\/strong> \u0633\u0627\u0632\u0648\u06a9\u0627\u0631 Deserialize \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u062c\u0627\u0648\u0627\u060c Constructor \u0631\u0627 \u062f\u0648\u0631 \u0632\u062f\u0647 \u0648 Instance \u0634\u06cc\u0621 \u062c\u062f\u06cc\u062f\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u062f. \u0628\u062f\u0648\u0646 \u0631\u0641\u0639 \u0635\u0631\u06cc\u062d\u060c \u0647\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc <code>readObject()<\/code> Instance \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f \u0648 \u062a\u0636\u0645\u06cc\u0646 Singleton \u0631\u0627 \u0645\u06cc\u200c\u0634\u06a9\u0646\u062f.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.journaldev.singleton;\n\nimport java.io.Serializable;\n\npublic class SerializedSingleton implements Serializable {\n\n    private static final long serialVersionUID = -7604766932017737115L;\n\n    private SerializedSingleton(){}\n\n    private static class SingletonHelper {\n        private static final SerializedSingleton instance = new SerializedSingleton();\n    }\n\n    public static SerializedSingleton getInstance() {\n        return SingletonHelper.instance;\n    }\n\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0633\u062a \u0632\u06cc\u0631 Singleton \u0631\u0627 Serialize\u060c Deserialize \u0648 \u0647\u0631 \u062f\u0648 Hash Code \u0631\u0627 \u0686\u0627\u067e \u0645\u06cc\u200c\u06a9\u0646\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.journaldev.singleton;\n\nimport java.io.FileInputStream;\nimport java.io.FileNotFoundException;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.ObjectInput;\nimport java.io.ObjectInputStream;\nimport java.io.ObjectOutput;\nimport java.io.ObjectOutputStream;\n\npublic class SingletonSerializedTest {\n\n    public static void main(String&#91;] args) throws FileNotFoundException, IOException, ClassNotFoundException {\n        SerializedSingleton instanceOne = SerializedSingleton.getInstance();\n        ObjectOutput out = new ObjectOutputStream(new FileOutputStream(\n                \"filename.ser\"));\n        out.writeObject(instanceOne);\n        out.close();\n\n        \/\/ Deserialize \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 constructor \u0631\u0627 \u062f\u0648\u0631 \u0632\u062f\u0647 \u0648 instance \u062c\u062f\u06cc\u062f\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u062f\n        ObjectInput in = new ObjectInputStream(new FileInputStream(\n                \"filename.ser\"));\n        SerializedSingleton instanceTwo = (SerializedSingleton) in.readObject();\n        in.close();\n\n        System.out.println(\"instanceOne hashCode=\"+instanceOne.hashCode());\n        System.out.println(\"instanceTwo hashCode=\"+instanceTwo.hashCode());\n\n    }\n\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648 Hash Code \u0686\u0627\u067e\u200c\u0634\u062f\u0647 \u0645\u062a\u0641\u0627\u0648\u062a \u062e\u0648\u0627\u0647\u0646\u062f \u0628\u0648\u062f\u061b \u06a9\u0647 \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f Deserialize Instance \u062f\u0648\u0645\u06cc \u062a\u0648\u0644\u06cc\u062f \u06a9\u0631\u062f\u0647. \u0645\u0642\u0627\u062f\u06cc\u0631 \u062f\u0642\u06cc\u0642 \u0628\u0647\u200c\u0627\u0632\u0627\u06cc \u0647\u0631 \u0627\u062c\u0631\u0627\u06cc JVM \u0645\u062a\u063a\u06cc\u0631 \u0627\u0633\u062a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 readResolve() \u0628\u0631\u0627\u06cc \u062d\u0641\u0638 \u0631\u0641\u062a\u0627\u0631 Singleton<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">readResolve() \u0631\u0627 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0645\u062a\u062f Instance\u0627\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0631\u0648\u0646 \u06a9\u0644\u0627\u0633 Singleton \u0628\u06cc\u0631\u0648\u0646\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f\u2014\u0646\u0647 \u062f\u0631\u0648\u0646 SingletonHelper. JVM \u0627\u06cc\u0646 \u0645\u062a\u062f \u0631\u0627 \u0631\u0648\u06cc \u0634\u06cc\u0621 Deserialize-\u0634\u062f\u0647 \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0628\u0639\u062f \u0627\u0632 \u0633\u0627\u062e\u062a \u0635\u062f\u0627 \u0632\u062f\u0647 \u0648 \u0645\u0642\u062f\u0627\u0631 \u0628\u0627\u0632\u06af\u0634\u062a\u06cc\u200c\u0627\u0634 \u0631\u0627 \u062c\u0627\u0646\u0634\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u0648 \u0634\u06cc\u0621 \u062a\u0627\u0632\u0647-\u0633\u0627\u062e\u062a\u0647 \u0631\u0627 \u062f\u0648\u0631 \u0645\u06cc\u200c\u0631\u06cc\u0632\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.journaldev.singleton;\n\nimport java.io.Serializable;\n\npublic class SerializedSingleton implements Serializable {\n\n    private static final long serialVersionUID = -7604766932017737115L;\n\n    private SerializedSingleton(){}\n\n    private static class SingletonHelper {\n        private static final SerializedSingleton instance = new SerializedSingleton();\n    }\n\n    public static SerializedSingleton getInstance() {\n        return SingletonHelper.instance;\n    }\n\n    \/\/ readResolve() \u0628\u0639\u062f \u0627\u0632 deserialize \u062a\u0648\u0633\u0637 JVM \u0635\u062f\u0627 \u0632\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u061b \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 getInstance()\n    \/\/ \u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f JVM \u0634\u06cc\u0621 deserialized \u0631\u0627 \u062f\u0648\u0631 \u0628\u0631\u06cc\u0632\u062f \u0648 instance \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\n    protected Object readResolve() {\n        return getInstance();\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0627\u0641\u0632\u0648\u062f\u0646 readResolve()\u060c \u062f\u0648 Hash Code \u0686\u0627\u067e\u200c\u0634\u062f\u0647 \u0645\u0637\u0627\u0628\u0642\u062a \u062e\u0648\u0627\u0647\u0646\u062f \u06a9\u0631\u062f\u061b \u06a9\u0647 \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f Deserialize\u060c Instance \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enum Singleton \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f \u0631\u0627\u2014\u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 readResolve()\u2014\u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u0686\u0648\u0646 Deserialize \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 enum \u062f\u0631 JVM \u0647\u0645\u06cc\u0634\u0647 \u062b\u0627\u0628\u062a \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Singleton \u062f\u0631 Spring \u0648 \u0641\u0631\u06cc\u0645\u200c\u0648\u0631\u06a9\u200c\u0647\u0627\u06cc \u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u06cc\u0634\u062a\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0645\u062f\u0631\u0646 \u062c\u0627\u0648\u0627 \u0628\u0647\u200c\u062c\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0633\u062a\u06cc \u0627\u0644\u06af\u0648\u06cc Singleton \u0627\u0632 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f. \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u060c Instance \u0645\u0646\u0641\u0631\u062f \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0647 \u0647\u0631 \u0647\u0645\u06a9\u0627\u0631\u06cc \u06a9\u0647 \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u062f Inject \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0627\u0645\u0646\u0647 Bean \u062f\u0631 Spring \u062f\u0631 \u0645\u0642\u0627\u0628\u0644 Singleton \u062f\u0633\u062a\u06cc<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Spring\u060c \u0647\u0631 Bean \u0628\u0647\u200c\u0637\u0648\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u062f\u0631\u0648\u0646 ApplicationContext \u062f\u0627\u0645\u0646\u0647 Singleton \u062f\u0627\u0631\u062f. \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0644\u0627\u0633\u06cc \u0628\u0627 @Service\u060c @Component \u06cc\u0627 @Repository \u06a9\u0627\u0641\u06cc \u0627\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import org.springframework.stereotype.Service;\n\n@Service\n\/\/ Spring \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9 instance \u0627\u0632 \u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0628\u0647\u200c\u0627\u0632\u0627\u06cc \u0647\u0631 ApplicationContext \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f\npublic class ConfigurationService {\n\n    public String getDatabaseUrl() {\n        return \"jdbc:postgresql:\/\/localhost:5432\/mydb\";\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0627\u0645\u0646\u0647 \u0628\u0647\u200c\u0627\u0632\u0627\u06cc ApplicationContext \u0627\u0633\u062a\u2014\u0646\u0647 \u0628\u0647\u200c\u0627\u0632\u0627\u06cc JVM. JVM \u0645\u0646\u0641\u0631\u062f\u06cc \u06a9\u0647 \u062f\u0648 Context \u0631\u0627 Bootstrap \u06a9\u0646\u062f\u060c \u062f\u0648 Instance \u0627\u0632 Bean \u0645\u06cc\u200c\u0633\u0627\u0632\u062f. \u0627\u06cc\u0646 \u0628\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0633\u0637\u062d-JVM\u0650 \u0627\u0644\u06af\u0648\u06cc Singleton \u062a\u0641\u0627\u0648\u062a \u062f\u0627\u0631\u062f\u061b \u0627\u0645\u0627 \u0628\u0627 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u0646\u062f \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u062f: \u0627\u06cc\u0632\u0648\u0644\u0647\u200c\u0633\u0627\u0632\u06cc \u0628\u0647-\u0627\u0632\u0627\u06cc-\u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0628\u0647\u200c\u062c\u0627\u06cc State \u0633\u0631\u0627\u0633\u0631\u06cc\u0650 \u062f\u0631-\u0633\u0637\u062d-\u067e\u0631\u0648\u0633\u0647.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u062a\u0633\u062a \u06a9\u0631\u062f\u0646 Singleton\u0647\u0627 \u0628\u0627 \u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Singleton\u0647\u0627\u06cc \u062f\u0633\u062a\u06cc \u0631\u0627 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u062f\u0631 \u062a\u0633\u062a\u200c\u0647\u0627\u06cc \u0648\u0627\u062d\u062f\u2014\u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0644\u0627\u0633\u0650 \u0632\u06cc\u0631 \u062a\u0633\u062a\u2014\u0628\u0627 Mock \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f. \u062a\u0632\u0631\u06cc\u0642 Constructor \u0627\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647 \u0631\u0627 \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u0628\u0647\u200c\u062c\u0627\u06cc \u0635\u062f\u0627 \u0632\u062f\u0646 ConfigurationService.getInstance()\u060c \u0633\u0631\u0648\u06cc\u0633 \u0631\u0627 inject \u06a9\u0646\u06cc\u062f\npublic class DatabaseConnector {\n\n    private final ConfigurationService configService;\n\n    \/\/ \u062a\u0632\u0631\u06cc\u0642 constructor \u0627\u062c\u0627\u0632\u0647 \u067e\u0627\u0633 \u062f\u0627\u062f\u0646 mock \u062f\u0631 \u062a\u0633\u062a\u200c\u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0631\u0627 \u0645\u06cc\u200c\u062f\u0647\u062f\n    public DatabaseConnector(ConfigurationService configService) {\n        this.configService = configService;\n    }\n\n    \/\/ \u0628\u0647 \u0633\u0631\u0648\u06cc\u0633 inject-\u0634\u062f\u0647 \u062a\u0641\u0648\u06cc\u0636 \u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u0647\u06cc\u0686 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc static getInstance() \u062f\u0631 \u0628\u062f\u0646\u0647 \u0645\u062a\u062f \u0646\u06cc\u0633\u062a\n    public String getDatabaseUrl() {\n        return configService.getDatabaseUrl();\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0632\u0631\u06cc\u0642 Constructor \u0628\u0627 Spring \u06cc\u0627 Guice\u060c \u0646\u06cc\u0627\u0632 \u0628\u0647 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0633\u062a\u06cc Singleton \u0631\u0627 \u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u067e\u0631\u0648\u062f\u0627\u06a9\u0634\u0646 \u062c\u0627\u0648\u0627 \u062d\u0630\u0641 \u06a9\u0631\u062f\u0647 \u0648 \u06a9\u0644\u0627\u0633\u0647\u0627\u06cc\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u062f \u06a9\u0647 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0627\u06cc\u0632\u0648\u0644\u0647 \u0642\u0627\u0628\u0644-\u062a\u0633\u062a\u200c\u0627\u0646\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0627\u0644 JUnit 5 \u0648 Mockito \u0632\u06cc\u0631 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u062a\u0633\u062a\u06cc \u0628\u0631\u0627\u06cc DatabaseConnector \u0648\u0642\u062a\u06cc \u0648\u0627\u0628\u0633\u062a\u06af\u06cc Inject \u0634\u062f\u0647\u2014to\u200c\u062c\u0627\u06cc \u06af\u0631\u0641\u062a\u0646 \u0627\u0632 \u0637\u0631\u06cc\u0642 getInstance()\u2014\u0686\u06af\u0648\u0646\u0647 \u0627\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import org.junit.jupiter.api.Test;\nimport org.mockito.Mockito;\nimport static org.junit.jupiter.api.Assertions.assertEquals;\n\npublic class DatabaseConnectorTest {\n\n    @Test\n    void testGetUrlUsesInjectedConfig() {\n        \/\/ \u0633\u0627\u062e\u062a mock\u0627\u06cc \u06a9\u0647 \u0645\u0642\u062f\u0627\u0631 \u06a9\u0646\u062a\u0631\u0644\u200c\u0634\u062f\u0647\u200c\u0627\u06cc \u0628\u0647\u200c\u062c\u0627\u06cc singleton \u0648\u0627\u0642\u0639\u06cc \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f\n        ConfigurationService mockConfig = Mockito.mock(ConfigurationService.class);\n        Mockito.when(mockConfig.getDatabaseUrl()).thenReturn(\"jdbc:h2:mem:testdb\");\n\n        \/\/ \u062a inject \u0627\u0632 \u0637\u0631\u06cc\u0642 constructor\u061b \u0647\u06cc\u0686 singleton\u0627\u06cc \u062f\u0631 \u06a9\u0627\u0631 \u0646\u06cc\u0633\u062a\n        DatabaseConnector connector = new DatabaseConnector(mockConfig);\n\n        assertEquals(\"jdbc:h2:mem:testdb\", connector.getDatabaseUrl());\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0633\u062a\u2014\u0628\u062f\u0648\u0646 Context \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Spring\u060c \u0628\u062f\u0648\u0646 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0648\u0627\u0642\u0639\u06cc \u0648 \u0628\u062f\u0648\u0646 \u062f\u0633\u062a \u0632\u062f\u0646 \u0628\u0647 Singleton \u0632\u0646\u062f\u0647\u0654 ConfigurationService\u2014\u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f. \u0627\u06af\u0631 DatabaseConnector \u0645\u0633\u062a\u0642\u06cc\u0645 <code>ConfigurationService.getInstance()<\/code> \u0631\u0627 \u0635\u062f\u0627 \u0645\u06cc\u200c\u0632\u062f\u060c \u0646\u0648\u0634\u062a\u0646 \u0627\u06cc\u0646 \u062a\u0633\u062a\u2014\u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u062f \u067e\u0631\u0648\u062f\u0627\u06a9\u0634\u0646 \u06cc\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u062f\u0633\u062a\u06a9\u0627\u0631\u06cc Bytecode\u2014\u063a\u06cc\u0631\u0645\u0645\u06a9\u0646 \u0628\u0648\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0631\u0641\u062a\u0627\u0631 Singleton \u0628\u0627 Virtual Thread\u0647\u0627 \u0648 GraalVM Native Image<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0627\u062e\u06cc\u0631 \u0628\u0647 \u067e\u0644\u062a\u0641\u0631\u0645 \u062c\u0627\u0648\u0627\u060c \u0631\u0641\u062a\u0627\u0631 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc\u200c\u0647\u0627\u06cc Singleton \u0631\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f: <strong>Virtual Thread\u0647\u0627 \u0627\u0632 Project Loom<\/strong> \u0648 <strong>Native Image \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 GraalVM<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Virtual Thread\u0647\u0627\u060c Heap State \u0631\u0627 \u0628\u0627 Thread\u0647\u0627\u06cc \u067e\u0644\u062a\u0641\u0631\u0645\u06cc \u0634\u0631\u06cc\u06a9 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f\u061b \u067e\u0633 \u0647\u0631 \u0647\u0641\u062a \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Singleton \u0632\u06cc\u0631 Virtual Thread\u0647\u0627 \u062f\u0631\u0633\u062a \u0645\u06cc\u200c\u0645\u0627\u0646\u0646\u062f. \u062f\u0631 JDK \u06f2\u06f1 \u0648 \u06f2\u06f2\u060c Virtual Thread\u0627\u06cc \u06a9\u0647 \u0648\u0627\u0631\u062f \u0628\u0644\u0627\u06a9 synchronized \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0628\u0631\u0627\u06cc \u0645\u062f\u062a \u0628\u0644\u0627\u06a9 \u0628\u0647 Carrier Thread \u062e\u0648\u062f\u0634 Pin \u0645\u06cc\u200c\u0634\u0648\u062f\u061b \u06a9\u0647 Throughput \u0632\u06cc\u0631 Contention \u0631\u0627\u2014\u0646\u0647 \u062f\u0631\u0633\u062a\u06cc \u0631\u0627\u2014\u062a\u062d\u062a \u062a\u0623\u062b\u06cc\u0631 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u062f\u0647\u062f. JDK \u06f2\u06f4 \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 Pin \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0645\u0648\u0627\u0631\u062f \u062d\u0630\u0641 \u06a9\u0631\u062f\u0647. Bill Pugh \u0648 Enum Singleton \u0627\u06cc\u0646 \u0646\u06af\u0631\u0627\u0646\u06cc \u0631\u0627 \u06a9\u0627\u0645\u0644\u0627\u064b \u062f\u0648\u0631 \u0645\u06cc\u200c\u0632\u0646\u0646\u062f\u061b \u0686\u0648\u0646 \u0647\u06cc\u0686\u200c\u06a9\u062f\u0627\u0645 \u062f\u0631 \u0645\u0633\u06cc\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc\u060c \u0642\u0641\u0644 synchronized \u0646\u0645\u06cc\u200c\u06af\u06cc\u0631\u0646\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GraalVM Native Image<\/strong> \u0628\u0647\u200c\u0637\u0648\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u06a9\u0644\u0627\u0633\u0647\u0627 \u0631\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 Build \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u06cc\u0639\u0646\u06cc Singleton\u0650 Eager \u06cc\u0627 Static Block \u062d\u06cc\u0646 Build \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Native Image \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u2014\u0646\u0647 \u062f\u0631 \u0627\u0648\u0644\u06cc\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0632\u0645\u0627\u0646-\u0627\u062c\u0631\u0627. \u0627\u06af\u0631 Constructor \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc\u200c\u0627\u06cc \u0645\u0627\u0646\u0646\u062f <code>System.getenv(\"DB_URL\")<\/code> \u0628\u062e\u0648\u0627\u0646\u062f \u06cc\u0627 Socket \u0628\u0627\u0632 \u06a9\u0646\u062f\u060c \u0622\u0646 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0631\u0648\u06cc \u0645\u0627\u0634\u06cc\u0646 Build \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f\u2014\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u062a\u063a\u06cc\u0631 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f \u0648 \u0634\u0628\u06a9\u0647\u060c \u0634\u0628\u06a9\u0647 \u062f\u06cc\u067e\u0644\u0648\u06cc \u0646\u06cc\u0633\u062a. Singleton \u0622\u0646 State \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0634\u0647 \u062f\u0631\u0648\u0646 Binary Capture \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0639\u0644\u0627\u0645\u062a\u060c \u0641\u06cc\u0644\u062f null \u06cc\u0627 \u0627\u062a\u0635\u0627\u0644\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0622\u062f\u0631\u0633 \u0632\u0645\u0627\u0646-Build \u0627\u0634\u0627\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f. GraalVM \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0647\u0645 Build \u0631\u0627 \u0628\u0627 \u062e\u0637\u0627\u06cc\u06cc \u0645\u062b\u0644 \u0632\u06cc\u0631 \u0634\u06a9\u0633\u062a \u0628\u062f\u0647\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Error: Classes that should be initialized at run time got initialized during image building<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0631\u0641\u0639 \u0627\u06cc\u0646\u060c \u0628\u0647 GraalVM \u0628\u06af\u0648\u06cc\u06cc\u062f \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0628\u0627 \u0641\u0644\u06af <code>--initialize-at-run-time<\/code> \u0628\u0647 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0645\u0648\u06a9\u0648\u0644 \u06a9\u0646\u062f. \u0646\u0627\u0645 \u06a9\u0644\u0627\u0633\u0650 \u06a9\u0627\u0645\u0644\u0627\u064b \u06a9\u06cc\u0641\u06cc\u200c\u0634\u062f\u0647\u0654 Singleton \u0631\u0627 \u067e\u0627\u0633 \u0628\u062f\u0647\u06cc\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>native-image --initialize-at-run-time=com.journaldev.singleton.EagerInitializedSingleton \\\n  -jar myapp.jar<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Singleton\u0647\u0627\u06cc Bill Pugh \u0648 enum\u2014\u0648\u0642\u062a\u06cc \u0641\u0642\u0637 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u0634\u0648\u0646\u062f\u2014\u062a\u062d\u062a \u062a\u0623\u062b\u06cc\u0631 \u0646\u06cc\u0633\u062a\u0646\u062f\u061b \u0686\u0648\u0646 \u0647\u06cc\u0686\u200c\u06a9\u062f\u0627\u0645 \u062a\u0627 \u0627\u0648\u0644\u06cc\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc\u200c\u0634\u0627\u0646\u2014which \u0631\u0648\u06cc \u0647\u0627\u0633\u062a \u062f\u06cc\u067e\u0644\u0648\u06cc \u0628\u0639\u062f \u0627\u0632 \u0634\u0631\u0648\u0639 Binary \u0631\u062e \u0645\u06cc\u200c\u062f\u0647\u062f\u2014\u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0646\u0645\u06cc\u200c\u0634\u0648\u0646\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0642\u0627\u06cc\u0633\u0647 \u0647\u0645\u0647 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc\u200c\u0647\u0627\u06cc Singleton<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u062c\u062f\u0648\u0644 \u062e\u0644\u0627\u0635\u0647: Thread Safety\u060c Lazy Loading\u060c \u0627\u0645\u0646\u06cc\u062a Reflection\u060c \u0627\u0645\u0646\u06cc\u062a Serialization<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc<\/th><th>Thread Safe<\/th><th>Lazy Loading<\/th><th>Reflection Safe<\/th><th>Serialization Safe<\/th><th>\u062a\u0648\u0635\u06cc\u0647\u200c\u0634\u062f\u0647<\/th><\/tr><\/thead><tbody><tr><td>Eager Initialization<\/td><td>\u0628\u0644\u0647 (\u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633)<\/td><td>\u062e\u06cc\u0631<\/td><td>\u062e\u06cc\u0631<\/td><td>\u062e\u06cc\u0631 (readResolve \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u062f)<\/td><td>\u0641\u0642\u0637 \u0645\u0646\u0627\u0628\u0639 \u06a9\u0645-\u0633\u0631\u0628\u0627\u0631<\/td><\/tr><tr><td>Static Block Initialization<\/td><td>\u0628\u0644\u0647 (\u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u0627\u0633)<\/td><td>\u062e\u06cc\u0631<\/td><td>\u062e\u06cc\u0631<\/td><td>\u062e\u06cc\u0631 (readResolve \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u062f)<\/td><td>\u0648\u0642\u062a\u06cc constructor \u067e\u0631\u062a\u0627\u0628 checked exception \u0645\u06cc\u200c\u06a9\u0646\u062f<\/td><\/tr><tr><td>Lazy Initialization<\/td><td>\u062e\u06cc\u0631<\/td><td>\u0628\u0644\u0647<\/td><td>\u062e\u06cc\u0631<\/td><td>\u062e\u06cc\u0631<\/td><td>\u0641\u0642\u0637 \u062a\u06a9-Thread<\/td><\/tr><tr><td>Synchronized Method<\/td><td>\u0628\u0644\u0647<\/td><td>\u0628\u0644\u0647<\/td><td>\u062e\u06cc\u0631<\/td><td>\u062e\u06cc\u0631<\/td><td>\u062a\u0648\u0635\u06cc\u0647\u200c\u0646\u0634\u062f\u0647 (\u06a9\u0627\u0631\u0627\u06cc\u06cc)<\/td><\/tr><tr><td>Double-Checked Locking<\/td><td>\u0628\u0644\u0647 (\u0628\u0627 volatile)<\/td><td>\u0628\u0644\u0647<\/td><td>\u062e\u06cc\u0631<\/td><td>\u062e\u06cc\u0631 (readResolve \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u062f)<\/td><td>\u0642\u0627\u0628\u0644\u200c\u0642\u0628\u0648\u0644\u061b Bill Pugh \u0631\u0627 \u062a\u0631\u062c\u06cc\u062d \u0628\u062f\u0647\u06cc\u062f<\/td><\/tr><tr><td>Bill Pugh (Holder)<\/td><td>\u0628\u0644\u0647<\/td><td>\u0628\u0644\u0647<\/td><td>\u062e\u06cc\u0631<\/td><td>\u062e\u06cc\u0631 (readResolve \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u062f)<\/td><td>\u062a\u0648\u0635\u06cc\u0647\u200c\u0634\u062f\u0647 \u0648\u0642\u062a\u06cc lazy loading \u0644\u0627\u0632\u0645 \u0627\u0633\u062a<\/td><\/tr><tr><td>Enum Singleton<\/td><td>\u0628\u0644\u0647<\/td><td>\u062e\u06cc\u0631<\/td><td>\u0628\u0644\u0647<\/td><td>\u0628\u0644\u0647<\/td><td>\u062a\u0648\u0635\u06cc\u0647\u200c\u0634\u062f\u0647 \u062f\u0631 \u0647\u0645\u0647 \u0645\u0648\u0627\u0631\u062f \u062f\u06cc\u06af\u0631<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u0633\u0648\u0627\u0644\u0627\u062a \u0645\u062a\u062f\u0627\u0648\u0644<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0633: \u0627\u0644\u06af\u0648\u06cc Singleton \u062f\u0631 \u062c\u0627\u0648\u0627 \u0686\u06cc\u0633\u062a \u0648 \u0686\u0631\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u061f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c: \u0627\u0644\u06af\u0648\u06cc Singleton\u060c \u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc \u0633\u0627\u062e\u062a\u0627\u0631\u06cc\u200c\u0627\u06cc \u0627\u0633\u062a \u06a9\u0647 \u06a9\u0644\u0627\u0633\u06cc \u0631\u0627 \u0628\u0647 \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9 Instance \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0647 \u0648 \u0646\u0642\u0637\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0631\u0627\u0633\u0631\u06cc \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc\u200c\u0627\u0634 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0648\u0642\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u06cc\u06a9 \u0645\u0646\u0628\u0639 \u0645\u0634\u062a\u0631\u06a9 \u0645\u0646\u0641\u0631\u062f \u0628\u0627\u06cc\u062f \u0627\u0642\u062f\u0627\u0645\u0627\u062a\u06cc \u0631\u0627 \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0645\u0627\u0647\u0646\u06af \u06a9\u0646\u062f\u2014\u0645\u0627\u0646\u0646\u062f \u0633\u0631\u0648\u06cc\u0633 Logging\u060c \u0645\u062f\u06cc\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06cc\u0627 Connection Pool \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633. \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u062f\u0631 \u06a9\u062a\u0627\u0628 \u00abDesign Patterns\u00bb (\u06f1\u06f9\u06f9\u06f4) \u06af\u0631\u0648\u0647 Gang of Four \u0645\u0639\u0631\u0641\u06cc \u0634\u062f \u0648 \u06cc\u06a9\u06cc \u0627\u0632 \u0634\u0646\u0627\u062e\u062a\u0647\u200c\u0634\u062f\u0647\u200c\u062a\u0631\u06cc\u0646 \u0627\u0644\u06af\u0648\u0647\u0627 \u062f\u0631 \u062c\u0627\u0648\u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0633: \u06a9\u062f\u0627\u0645 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Singleton \u0628\u0631\u0627\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 Multi-Threaded \u062c\u0627\u0648\u0627 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u0627\u0633\u062a\u061f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c: <strong>Bill Pugh Singleton<\/strong> (\u06cc\u0639\u0646\u06cc initialization-on-demand holder idiom) \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0647\u0645\u0647-\u0645\u0646\u0638\u0648\u0631\u0647\u0654 \u062a\u0648\u0635\u06cc\u0647\u200c\u0634\u062f\u0647 \u0627\u0633\u062a \u0648\u0642\u062a\u06cc Lazy Loading \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u062f. \u0628\u062f\u0648\u0646 Synchronization \u0635\u0631\u06cc\u062d Thread-Safe \u0627\u0633\u062a \u0648 \u0647\u06cc\u0686 \u06a9\u0644\u06cc\u062f\u0648\u0627\u0698\u0647 volatile\u0627\u06cc \u0644\u0627\u0632\u0645 \u0646\u062f\u0627\u0631\u062f. <strong>Enum Singleton<\/strong> \u0627\u0646\u062a\u062e\u0627\u0628 \u062a\u0648\u0635\u06cc\u0647\u200c\u0634\u062f\u0647 \u0627\u0633\u062a \u0648\u0642\u062a\u06cc Lazy Initialization \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a\u061b \u0686\u0648\u0646 \u062f\u0631 \u0633\u0637\u062d JVM \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u062d\u0645\u0644\u0627\u062a Reflection \u0648 Serialization \u0647\u0645 \u0645\u0635\u0648\u0646 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0633: Double-Checked Locking \u062f\u0631 Singleton \u062c\u0627\u0648\u0627 \u0686\u06cc\u0633\u062a \u0648 \u0686\u0631\u0627 volatile \u0644\u0627\u0632\u0645 \u0627\u0633\u062a\u061f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c: Double-Checked Locking \u0633\u0631\u0628\u0627\u0631 Synchronization \u0631\u0627 \u0628\u0627 \u0686\u06a9 \u06a9\u0631\u062f\u0646 null \u0628\u0648\u062f\u0646 Instance \u0642\u0628\u0644 \u0648 \u0628\u0639\u062f \u0627\u0632 \u06af\u0631\u0641\u062a\u0646 \u0642\u0641\u0644 \u06a9\u0627\u0647\u0634 \u0645\u06cc\u200c\u062f\u0647\u062f. \u0628\u062f\u0648\u0646 \u06a9\u0644\u06cc\u062f\u0648\u0627\u0698\u0647 volatile\u060c JVM \u06cc\u0627 CPU \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0642\u062f\u0645\u200c\u0647\u0627\u06cc \u0633\u0627\u062e\u062a \u0634\u06cc\u0621 (\u062a\u062e\u0635\u06cc\u0635 \u062d\u0627\u0641\u0638\u0647\u060c \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647\u060c \u062a\u062e\u0635\u06cc\u0635 Reference) \u0631\u0627 Reorder \u06a9\u0646\u062f\u061b \u06a9\u0647 \u0628\u0647 Thread \u062f\u0648\u0645 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f Instance\u0627\u06cc \u063a\u06cc\u0631-null \u0627\u0645\u0627 \u0646\u0627\u0642\u0635-\u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc\u200c\u0634\u062f\u0647 \u0628\u062e\u0648\u0627\u0646\u062f. \u0627\u0639\u0644\u0627\u0646 \u0645\u062a\u063a\u06cc\u0631 Instance \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 volatile\u060c \u0631\u0627\u0628\u0637\u0647 Happens-Before\u0627\u06cc \u0631\u0627 \u0627\u0644\u0632\u0627\u0645\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0627\u0632 \u0627\u06cc\u0646 Reorder \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u0646\u0645\u0627\u06cc\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0633: enum Singleton \u0686\u06af\u0648\u0646\u0647 \u0627\u0632 \u062d\u0645\u0644\u0627\u062a Reflection \u0648 Serialization \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f\u061f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c: JVM \u0633\u0627\u062e\u062a\u0650 Reflective\u0650 \u0627\u0646\u0648\u0627\u0639 enum \u0631\u0627 \u0645\u0645\u0646\u0648\u0639 \u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u0635\u062f\u0627 \u0632\u062f\u0646 <code>Constructor.newInstance()<\/code> \u0631\u0648\u06cc enum\u060c IllegalArgumentException \u067e\u0631\u062a\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0628\u0631\u0627\u06cc Serialization\u060c JVM \u062f\u0633\u062a\u200c\u0632\u062f\u0644\u0633\u06cc\u0650 enum \u0631\u0627 \u0628\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u062b\u0627\u0628\u062a\u0650 \u0645\u0648\u062c\u0648\u062f\u2014to\u200c\u062c\u0627\u06cc \u0633\u0627\u062e\u062a Instance \u062c\u062f\u06cc\u062f\u2014\u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u067e\u0633 readResolve() \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a. \u0627\u06cc\u0646 \u062a\u0636\u0645\u06cc\u0646\u200c\u0647\u0627 \u062f\u0631 \u0633\u0637\u062d JVM \u0641\u0631\u0627\u0647\u0645 \u0634\u062f\u0647 \u0648 \u0642\u0627\u0628\u0644 \u062f\u0648\u0631 \u0632\u062f\u0646 \u0646\u06cc\u0633\u062a\u0646\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0633: \u062a\u0641\u0627\u0648\u062a Singleton \u062c\u0627\u0648\u0627 \u0648 \u06a9\u0644\u0627\u0633 Static \u0686\u06cc\u0633\u062a\u061f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c: Singleton\u060c Instance \u0634\u06cc\u0621\u0627\u06cc \u0628\u0627 State \u06a9\u067e\u0633\u0648\u0644\u0647 \u0627\u0633\u062a\u061b \u0628\u0627 \u0642\u0627\u0628\u0644\u06cc\u062a \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Interface\u060c \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0631\u062b\u200c\u0628\u0631\u06cc \u0648 \u067e\u0627\u0633 \u062f\u0627\u062f\u0647 \u0634\u062f\u0646 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc. \u06a9\u0644\u0627\u0633 Static (\u06a9\u0644\u0627\u0633\u06cc \u0628\u0627 \u0641\u0642\u0637 \u0645\u062a\u062f\u0647\u0627 \u0648 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc Static) \u0642\u0627\u0628\u0644 Instantiate \u0646\u06cc\u0633\u062a\u060c \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u0632\u0645\u06cc\u0646\u0647 Polymorphic \u0627\u0632 Interface \u067e\u06cc\u0627\u062f\u0647 \u0634\u0648\u062f \u0648 Mock \u06a9\u0631\u062f\u0646\u0634 \u062f\u0631 \u062a\u0633\u062a\u200c\u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0622\u0633\u0627\u0646 \u0646\u06cc\u0633\u062a. \u0648\u0642\u062a\u06cc \u0631\u0641\u062a\u0627\u0631 State-\u062f\u0627\u0631 \u06cc\u0627 \u0627\u0646\u062a\u0632\u0627\u0639 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 Interface \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u06cc\u062f \u0627\u0632 Singleton \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u061b \u0628\u0631\u0627\u06cc \u0645\u062a\u062f\u0647\u0627\u06cc Utility\u0650 Stateless \u0627\u0632 \u06a9\u0644\u0627\u0633 Static.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0633: \u0622\u06cc\u0627 Singleton \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u062c\u0627\u0648\u0627 \u0628\u0627 Serialization \u0634\u06a9\u0633\u062a\u0647 \u0634\u0648\u062f\u061f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c: \u0628\u0644\u0647. \u0633\u0627\u0632\u0648\u06a9\u0627\u0631 Deserialize \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u062c\u0627\u0648\u0627\u060c Constructor \u0631\u0627 \u062f\u0648\u0631 \u0632\u062f\u0647 \u0648 \u0634\u06cc\u0621 \u062c\u062f\u06cc\u062f\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u062f\u061b \u06a9\u0647 \u0628\u0647 Instance \u062f\u0648\u0645\u06cc \u0645\u0646\u062c\u0631 \u0634\u062f\u0647 \u0648 \u062a\u0636\u0645\u06cc\u0646 Singleton \u0631\u0627 \u0645\u06cc\u200c\u0634\u06a9\u0646\u062f. \u0628\u0631\u0627\u06cc \u067e\u06cc\u0634\u06af\u06cc\u0631\u06cc\u060c \u0645\u062a\u062f readResolve() \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 Instance \u0645\u0648\u062c\u0648\u062f \u067e\u06cc\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u060c \u0627\u0632 Enum Singleton \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u2014which \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u062d\u0645\u0644\u0627\u062a Serialization \u0645\u0635\u0648\u0646 \u0627\u0633\u062a\u061b \u0686\u0648\u0646 JVM \u062f\u0633\u062a\u200c\u0632\u062f\u0644\u0633\u06cc enum \u0631\u0627 \u0628\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u062b\u0627\u0628\u062a \u0645\u0648\u062c\u0648\u062f \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0633: \u0686\u0637\u0648\u0631 \u0627\u0632 \u0627\u0644\u06af\u0648\u06cc Singleton \u062f\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 Spring \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645\u061f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c: Bean\u0647\u0627\u06cc Spring \u0628\u0647\u200c\u0637\u0648\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u062f\u0631\u0648\u0646 ApplicationContext \u062f\u0627\u0645\u0646\u0647 Singleton \u062f\u0627\u0631\u0646\u062f. \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0644\u0627\u0633\u06cc \u0628\u0627 @Service\u060c @Component \u06cc\u0627 @Repository \u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f Spring \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9 Instance \u0628\u0647\u200c\u0627\u0632\u0627\u06cc \u0647\u0631 Context \u0628\u0633\u0627\u0632\u062f \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u062a\u0631\u062c\u06cc\u062d\u200c\u062f\u0627\u062f\u0647\u200c\u0634\u062f\u0647 \u062f\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc Spring \u0627\u0633\u062a\u061b \u0686\u0648\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0686\u0631\u062e\u0647 \u062d\u06cc\u0627\u062a \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u062f\u0647\u062f \u0648 Bean \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 Constructor \u062a\u0632\u0631\u06cc\u0642 \u0634\u0648\u062f\u061b \u06a9\u0647 \u0628\u0627 \u0627\u0634\u06cc\u0627\u0621 Mock \u0642\u0627\u0628\u0644-\u062a\u0633\u062a\u0634 \u0645\u06cc\u200c\u0633\u0627\u0632\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0633: \u0622\u06cc\u0627 \u0627\u0644\u06af\u0648\u06cc Singleton \u0636\u062f\u0627\u0644\u06af\u0648 (Anti-Pattern) \u062a\u0644\u0642\u06cc \u0645\u06cc\u200c\u0634\u0648\u062f\u061f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c: \u0627\u0644\u06af\u0648\u06cc Singleton \u062f\u0631 \u0632\u0645\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc\u06cc \u0636\u062f\u0627\u0644\u06af\u0648 \u062a\u0644\u0642\u06cc \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 State \u0633\u0631\u0627\u0633\u0631\u06cc\u0650 Mutable \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0647\u0627 \u0631\u0627 \u067e\u0646\u0647\u0627\u0646 \u0645\u06cc\u200c\u0633\u0627\u0632\u062f \u06cc\u0627 \u062a\u0633\u062a \u0648\u0627\u062d\u062f \u0631\u0627 \u062f\u0634\u0648\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0645\u0634\u06a9\u0644\u0627\u062a \u0627\u063a\u0644\u0628 \u0648\u0642\u062a\u06cc \u0628\u0631\u0648\u0632 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f \u06a9\u0647 Singleton \u0633\u0631\u0627\u0633\u0631\u0627\u2014from \u0637\u0631\u06cc\u0642 getInstance() \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 Codebase\u2014\u0635\u062f\u0627 \u0632\u062f\u0647 \u0634\u0648\u062f\u061b \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc Inject \u0634\u0648\u062f. \u062f\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0645\u062f\u0631\u0646 \u062c\u0627\u0648\u0627 \u06a9\u0647 \u0627\u0632 Spring \u06cc\u0627 Guice \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f\u060c \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0633\u062a\u06cc Singleton \u0628\u0647\u200c\u0646\u062f\u0631\u062a \u0644\u0627\u0632\u0645 \u0627\u0633\u062a. \u0627\u0644\u06af\u0648 \u0628\u0631\u0627\u06cc \u0645\u0646\u0627\u0628\u0639 \u0645\u0634\u062a\u0631\u06a9\u0650 Stateless \u06cc\u0627 \u0627\u0634\u06cc\u0627\u0621 \u0632\u06cc\u0631\u0633\u0627\u062e\u062a\u06cc\u2014which \u062f\u0631 \u0622\u0646\u200c\u0647\u0627 Instance \u0647\u0645\u0627\u0647\u0646\u06af\u200c\u06a9\u0646\u0646\u062f\u0647\u0654 \u0645\u0646\u0641\u0631\u062f \u0627\u0644\u0632\u0627\u0645 \u0645\u0639\u0645\u0627\u0631\u06cc \u0648\u0627\u0642\u0639\u06cc \u0627\u0633\u062a\u2014\u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u062a\u06cc\u062c\u0647\u200c\u06af\u06cc\u0631\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0647\u0641\u062a \u0646\u0648\u0639 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Singleton \u062f\u0631 \u062c\u0627\u0648\u0627 (\u06cc\u0639\u0646\u06cc eager\u060c static block\u060c lazy\u060c synchronized method\u060c double-checked locking\u060c Bill Pugh \u0648 enum)\u060c \u062f\u0648 \u0628\u0631\u062f\u0627\u0631 \u062d\u0645\u0644\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u062a\u0636\u0645\u06cc\u0646 Singleton \u0631\u0627 \u0628\u0634\u06a9\u0646\u0646\u062f (\u06cc\u0639\u0646\u06cc Reflection \u0648 Serialization) \u0648 \u0646\u062d\u0648\u0647 \u067e\u06cc\u0634\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0647\u0631\u06a9\u062f\u0627\u0645\u060c \u0645\u0642\u0627\u06cc\u0633\u0647 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u0628\u06cc\u0646 Singleton \u0648 \u06a9\u0644\u0627\u0633\u200c\u0647\u0627\u06cc Utility \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9\u060c \u0646\u0642\u0634 \u0641\u0631\u06cc\u0645\u200c\u0648\u0631\u06a9\u200c\u0647\u0627\u06cc \u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0645\u0627\u0646\u0646\u062f Spring \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0645\u062f\u0631\u0646\u060c \u0648 \u0631\u0641\u062a\u0627\u0631 Singleton \u0632\u06cc\u0631 Virtual Thread\u0647\u0627 \u0648 GraalVM Native Image \u0631\u0627 \u067e\u0648\u0634\u0634 \u062f\u0627\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Singleton \u062f\u0631\u0633\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u062a\u0627\u0646\u2014\u0628\u0631 \u0627\u0633\u0627\u0633 \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 Lazy Loading \u0644\u0627\u0632\u0645 \u0627\u0633\u062a\u2014\u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f\u060c volatile \u0631\u0627 \u062f\u0631\u0633\u062a \u0647\u0646\u06af\u0627\u0645 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Double-Checked Locking \u0627\u0639\u0645\u0627\u0644 \u0646\u0645\u0627\u06cc\u06cc\u062f\u060c Singleton\u0647\u0627\u06cc\u200c\u062a\u0627\u0646 \u0631\u0627 \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u062d\u0645\u0644\u0627\u062a Reflection \u0648 Serialization \u0645\u062d\u0627\u0641\u0638\u062a \u06a9\u0646\u06cc\u062f\u061b \u0648 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u06cc\u062f \u06a9\u0650\u06cc Singleton \u062f\u0633\u062a\u06cc \u0631\u0627 \u0628\u0627 Bean \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647\u0654 Spring \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0646\u06cc\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0645\u0642\u062f\u0645\u0647 \u0627\u0644\u06af\u0648\u06cc Singleton \u062f\u0631 \u062c\u0627\u0648\u0627\u060c \u06cc\u06a9 \u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc \u0633\u0627\u062e\u062a\u0627\u0631\u06cc (Creational) \u0627\u0633\u062a \u06a9\u0647 \u06a9\u0644\u0627\u0633\u06cc \u0631\u0627 \u0628\u0647 \u06cc\u06a9 Instance \u0645\u0646\u0641\u0631\u062f \u0628\u0647\u200c\u0627\u0632\u0627\u06cc \u0647\u0631 Java Virtual Machine \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0647 \u0648 \u0622\u0646 Instance \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0646\u0642\u0637\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0631\u0627\u0633\u0631\u06cc (Global) \u0627\u0641\u0634\u0627 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u0627\u0632 \u06a9\u062a\u0627\u0628 \u00abDesign Patterns\u00bb (\u06f1\u06f9\u06f9\u06f4) \u06af\u0631\u0648\u0647 Gang of Four \u0633\u0631\u0686\u0634\u0645\u0647 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f \u0648 \u0647\u0645\u0686\u0646\u0627\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u067e\u0631\u06a9\u0627\u0631\u0628\u0631\u062f\u062a\u0631\u06cc\u0646 &hellip;<\/p>\n","protected":false},"author":9,"featured_media":7069,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[190],"tags":[],"class_list":["post-7068","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming"],"_links":{"self":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/7068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/comments?post=7068"}],"version-history":[{"count":1,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/7068\/revisions"}],"predecessor-version":[{"id":7070,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/7068\/revisions\/7070"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/media\/7069"}],"wp:attachment":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/media?parent=7068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/categories?post=7068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/tags?post=7068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}