싱글톤 패턴이란 클래스와 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다.
싱글톤 패턴 구현 예제를 코드로 보면 아래와 같다.
우선 싱글톤 패턴은 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 하기 때문에 private 생성자를 사용하여 외부에서 new 키워드를 사용하지 못하도록 막는다.
또한 static을 사용하여 클래스 레벨에 딱 하나만 존재하도록 한다.
그래서 자바가 뜰 때, 객체 하나가 생성되어 instance에 저장되고, 이 후 이를 가져와 사용하는 방식이다.
public class SingletonService {
private static final SingletonService instance = new SingletonService();
public static SingletonService getInstance() {
return instance;
}
private SingletonService() {
}
public void logic() {
System.out.println("싱글톤 객체 로직 호출");
}
}
이러한 싱글톤 패턴을 적용하면 아래와 같이 동일한 객체 인스턴스를 반환하게 된다.

그렇다면 왜 이런 싱글톤 패턴을 사용해야 하는가?
웹 어플리케이션을 개발한다고 가정해보자.
여러 고객들로부터 동시에 요청이 들어오는데 각 요청마다 새로운 객체를 생성하게 된다면 메모리가 새로운 객체로 가득 차게 될 것이다.
그러나 싱글톤 패턴을 적용하면 이미 만들어진 객체를 공유해서 효율적으로 사용할 수 있다.
그렇기 때문에 싱글톤 패턴을 사용하는 것이다.
그러나 싱글톤 패턴은 여러 문제점도 많이 갖고 있다.
=> 결론적으로 유연성이 떨어지며, 위와 같은 다양한 문제점으로 인해 안티패턴이라 불리기도 한다.
싱글톤 패턴을 사용을 통해 얻을 수 있는 장점도 있지만, 문제점도 많이 존재한다. 이러한 문제점은 스프링의 도움을 통해 보완할 수 있다.
다음에는 스프링 싱글톤 컨테이너에 대해 정리해보겠다.