Spring makes it easy to create Java enterprise applications.
public class SingletonService {
// static 영역에 객체를 딱 1개 생성
private static final SingletonService instance = new SingletonService();
// public 으로 열어서 객체 인스턴스가 필요하면 이 static 메서드를 통해서만 조회하도록 허용
public static SingletonService getInstance() {
return instance;
}
// 생성자를 private 로 선언해서 외부에서 new 키워드를 사용한 객체 생성을 못하게 막는다.
private SingletonService() {
}
public void logic() {
System.out.println("print singleton instance logic");
}
}
public class SingletonClient {
private Singleton singleton = Singleton.getInstance(); // 구체 클래스에 의존
}
또한 싱글톤은 단 하나의 인스턴스만 존재하기 때문에 객체의 상태를 변경시키는 설계를 하면 안됩니다. 이러한 경우 여러 스레드에서 단 하나의 인스턴스를 공유하기 때문에 예상치못한 상태 변화가 일어날 것입니다.
이러한 문제점들로 인해 최근에는 DI(Dependency Injection)와 같은 더 유연하고 테스트 가능한 패턴을 사용합니다.