August 30, 2022
싱글톤이란 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 만약에 클라이언트의 호출이 있을 때 마다 새로운 인스턴스를 생성한다면, 이를 서버의 메모리가 버티기에는 너무나도 부담이 된다. 따라서 이러한 경우에는 인스턴스가 1개만 생성되는 싱글톤 패턴을 사용한다.
public class SingletonService {
private static final SingletonService instance = new SingletonService();
public static SingletonService getInstance(){
return instance;
}
// private 생성자를 통해 new 를 사용한 인스턴스 생성을 막음
private SingletonService() {
}
public void logic(){
System.out.println("싱글톤 객체 로직 호출");
}
}
하지만 하나의 인스턴스만 사용한다는 싱글톤패턴에도 다음과 같은 문제점이 있다. 따라서 안티패턴으로 불린다.
하지만 스프링컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리한다.
따라서 스프링 컨테이너는 싱글톤 컨테이너 역할을 한다. 이렇게 싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스트리라고 한다.
싱글톤 패턴은 결국 하나의 객체 인스턴스를 공유하기 때문에, 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다.