Java 싱글턴 패턴은 클래스에 인스턴스가 하나만 있음을 보장하고 이에 대한 전역 액세스 지점을 제공하는 널리 사용되는 디자인 패턴입니다. 팀을 감독하는 단일 관리자로 생각하십시오. 단 한 명만 있고 모든 사람이 단일 연락 창구를 통해 상호 작용합니다. 이 기사에서는 패턴의 구현과 Java의 다양한 접근 방식을 분석합니다.
여러 가지 접근 방식이 있으며 각각 장단점이 있습니다.
1. 지연 초기화: 처음 필요할 때만 인스턴스를 생성합니다.
<code class="language-java">import java.io.Serializable; public class LazySingleton implements Serializable { private static LazySingleton instance; private LazySingleton() { if (instance != null) { throw new IllegalStateException("Instance already created"); } } public static LazySingleton getInstance() { if (instance == null) { instance = new LazySingleton(); } return instance; } private Object readResolve() { return getInstance(); } }</code>
2. 스레드로부터 안전한 싱글톤: synchronized
을 사용하여 인스턴스 생성 중 스레드 안전성을 보장합니다.
<code class="language-java">import java.io.*; public class ThreadSafeSingleton implements Serializable { private static final long serialVersionUID = 1L; private static ThreadSafeSingleton instance; private ThreadSafeSingleton() { if (instance != null) { throw new IllegalStateException("Instance already created"); } } public static synchronized ThreadSafeSingleton getInstance() { if (instance == null) { instance = new ThreadSafeSingleton(); } return instance; } private Object readResolve() { return getInstance(); } }</code>
3. 이중 확인 잠금: 동기화 오버헤드를 최소화하여 스레드 안전성을 최적화합니다.
<code class="language-java">import java.io.*; public class DoubleCheckedLockingSingleton implements Serializable { private static final long serialVersionUID = 1L; private static volatile DoubleCheckedLockingSingleton instance; private DoubleCheckedLockingSingleton() { if (instance != null) { throw new IllegalStateException("Instance already created"); } } public static DoubleCheckedLockingSingleton getInstance() { if (instance == null) { synchronized (DoubleCheckedLockingSingleton.class) { if (instance == null) { instance = new DoubleCheckedLockingSingleton(); } } } return instance; } private Object readResolve() { return getInstance(); } }</code>
4. Bill Pugh 싱글턴(권장): 정적 내부 클래스를 사용하여 지연 초기화 및 스레드 안전성을 보장합니다.
<code class="language-java">import java.io.*; public class BillPughSingleton implements Serializable { private static final long serialVersionUID = 1L; private BillPughSingleton() { if (SingletonHelper.INSTANCE != null) { throw new IllegalStateException("Instance already created"); } } private static class SingletonHelper { private static final BillPughSingleton INSTANCE = new BillPughSingleton(); } public static BillPughSingleton getInstance() { return SingletonHelper.INSTANCE; } private Object readResolve() { return getInstance(); } }</code>
5. Enum Singleton(최신 접근 방식): 고유한 스레드 안전성과 열거형의 직렬화 처리를 활용합니다. 이는 단순성과 견고성 측면에서 가장 좋은 접근 방식으로 간주되는 경우가 많습니다.
<code class="language-java">public enum EnumSingleton { INSTANCE; public void showMessage() { System.out.println("Hello from Enum Singleton!"); } }</code>
위 내용은 Java의 싱글톤 패턴 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!