Singleton Pattern

✒️ 2025-05-26 09:10 내용 수정


참고 자료 : wikipedia Singleton pattern , 위키백과 싱글턴 패턴, 끝나지 않는 프로그래밍 일기's 디자인 패턴.싱글턴 패턴

클래스의 초기화를 하나의 인스턴스로만 제한을 두는 패턴


1. Lazy Initialization Singleton

public class LazyInitialSingleton {
	private static LazyInitialSingleton single;
	
	public static LazyInitialSingleton getInstance() {
		if (single == null) {
			single = new LazyInitialSingleton();
		}
		return single;
	}
}

2. Synchronized Singleton

public class SynchSingleton {
	private static SynchSingleton single;
	
	public static synchronized SynchSingleton getInstance() {
		if (single == null) {
			single = new SynchSingleton();
		}
		return single;
	}
}

3. Eager Initialization Singleton

public class EagerInitialSIngleton {
	private static EagerInitialSIngleton single = new EagerInitialSIngleton();
	
	private EagerInitialSIngleton() {
	}
	
	public static EagerInitialSIngleton getInstance() {
		return single;
	}
}

4. Double-Checking-Locking Singleton

public class DCLSingleton {
	private static volatile DCLSingleton single;
	
	private DCLSingleton() {
	}
	
	public static DCLSingleton getInstance() {
		if(single == null) {
			synchronized (DCLSingleton.class) {
				if(single == null) {
					single = new DCLSingleton();
				}
			}
		}
		return single;
	}
}

5. Enum Singleton

public enum EnumSingleton {
	single;
}

6. Lazy Holder Singleton

public class LazyHolderSingleton {
	private LazyHolderSingleton() {
	}
	
	public static LazyHolderSingleton getInstance() {
		return LazyHolder.single;
	}
	
	private static class LazyHolder {
		private static final LazyHolderSingleton single = new LazyHolderSingleton();
	}
}