private 생성자를 가지는 특징이 있으며, 생성된 싱글톤 오브젝트는 저장할 수 있는 자신과 같은 타입의 static 필드를 정의한다.static 메서드를 통하여 객체를 생성한다.public class Singleton {
private static Singleton singleton = null;
private Singleton(){}
public static Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
private 와 staticprivate 을 사용하기 때문에 → 외부에서 new 로 객체 생성이 불가하다.static 이 붙은 클래스 / 메서드 → 정적공간, 메모리 용량이 딱 정해져있다.static이 아닌 것들은 객체가 생성될 때마다 메모리를 차지하지만 static 으로 선언되면 객체가 얼마나 만들어지던 메모리에 지정된 공간에 하나씩만 존재하게 된다.new 키워드를 직접 사용하여 클래스 안에서 객체를 생성하고 있으므로, 이는 SOLID 원칙 중 DIP를 위반하게 되고 OCP 원칙 또한 위반할 가능성이 높다.SRP - 단일 책임의 원칙OCP - 개방-패쇄 원칙LSP - 리스코프 치환의 원칙ISP - 인터페이스 분리의 원칙DIP - 의존성 역전의 원칙private 생성자 때문에 테스트가 번거롭다.public class Singleton {
private Singleton(){}
public static Singleton getInstance(){
return LazyHolder.INSTANCE;
}
private static class LazyHolder {
public static final Singleton INSTANCE = new Singleton();
}
}
private static으로 인스턴스 변수 만들기private으로 생성자를 만들어 외부에서의 생성을 막음1번의 성능저하를 완화시키는 방법
public class Singleton {
private Singleton(){}
public static Singleton getInstance(){
return LazyHolder.INSTANCE;
}
private static class LazyHolder {
public static final Singleton INSTANCE = new Singleton();
}
}
synchronized를 통해 동기화를 시켜 인스턴스를 생성하는 방법synchronized를 실행하지 않기 때문에 성능저하 완화가 가능함클래스 안에 클래스(
holder)를 두어JVM의 클래스 로더 매커니즘과 클래스가 로드되는 시점을 이용한 방법
public class Singleton {
private Singleton(){}
public static Singleton getInstance(){
return LazyHolder.INSTANCE;
}
private static class LazyHolder {
public static final Singleton INSTANCE = new Singleton();
}
}
JVM의 클래스 초기화 과정에서 보장되는 원자적 특성을 이용해 싱글톤의 초기화 문제에 대한 책임을 JVM에게 떠넘기는 걸 활용한다.holder에서 선언된 인스턴스는 static이기 때문에 클래스 로딩시점에서 한번만 호출된다.final을 사용해서 다시 값이 할당되지 않도록 만드는 방식이다.사용자가 어떠한 페이지에서 다크모드를 설정하면 다른 모든 페이지에서도 다크모드로 나와야한다.
new 로 다크모드를 설정해주는 객체를 생성하지 않아도 되도록 하기 위해 싱글톤 패턴을 사용한다.static 으로 정적 변수에 저장된 값을 다른 페이지에서 그대로 가져다 쓰게하여 매번 new로 다크모드를 설정해주는 객체를 생성하지 않아도 계속해서 변수 값을 불러와 일정한 설정 유지 가능참고 자료
싱글톤(Singleton) 패턴이란?
[JAVA] 싱글톤 패턴(Singleton Pattern) : 멀티 스레드 환경에서의 문제점
싱글톤 패턴(Singleton pattern) | 👨🏻💻 Tech Interview
2. 싱글톤 패턴(Singleton Pattern)
객체지향 디자인패턴 1