기본적인 싱글톤 코드
public class SingleTonService {
private static final SingleTonService instance = new SingleTonService();
private SingleTonService() {}
public static SingleTonService getInstance() {
return instance;
}
public void logic(){
System.out.println("싱글톤 로직 호출");
}
}
싱글톤은 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴이다.
생성자는 private으로 설정해 외부에서 new 키워드를 사용하지 못하게 막아야한다.
외부에서 인스턴스에 접근하려면 getInstance() 를 통해서만 접근이 가능하다.
스프링은 위의 문제점들을 스프링 컨테이너로 해결했다.
스프링 컨테이너는 싱글톤 코드를 작성하지 않아도 객체를 하나만 생성해 관리하는 싱글톤 레지스트리 기능을 한다.
쓰레드들이 싱글톤 객체를 공유해 사용하기 때문에 상태를 가지고 있다면 잘못된 결과가 나올 수 있다.
그렇기 때문에 싱글톤 객체는 무상태성을 띄어야하고 오직 지역변수, 피라미터, ThreadLocal을 사용해야한다.