싱글턴 패턴(Singleton Pattern)

@023· May 24, 2025 · 3 min read

싱글턴 패턴(Singleton Pattern) 이란 생성자를 여러 차례 호출해도 실제로 생성되는 인스턴스를 오직 하나만 존재하도록 유지 및 보장하는 패턴을 의미한다. 객체가 최초로 생성된 이후에 생성자나 객체 생성 메서드는 기존에 만들어진 객체를 반환한다.

public class Singleton {

  private static final Singleton INSTANCE = new Singleton();

  // 생성자 호출 제한
  private Singleton() { ... }

  public static Singleton getInstance() {
    return INSTANCE;
  }
}

이러한 싱글턴 패턴은 하나의 객체를 여러 상황에서 재사용할 수 있기 때문에 메모리 낭비를 방지 할 수 있다. 또한, 여러 다른 객체가 하나의 인스턴스에 쉽게 접근할 수 있어 편리하다는 장점도 있다.

하지만, 싱글턴 패턴은 전역 객체를 생성한다는 특성상 코드의 복잡도를 높이고, 테스트하기 어려운 코드를 만들 수 있는 단점이 있다. 그리고 상황에 따라 더욱 복잡한 구현이 필요할 수 있다. 예를 들어, 싱글턴 객체를 지연 초기화(Lazy Initialization)하고 싶을 때 여러 쓰레드가 동시 접근하면 두 개 이상의 객체가 생성될 수 있으므로 동시성 문제를 고려해야 한다. 또한 싱글턴 패턴을 이용한 테스트에서는 싱글턴 객체의 상태를 초기화하는 과정이 필요하다. 예를 들어, 1번 테스트에서 싱글턴 객체를 수정한 경우, 2번 테스트에서 이전 상태가 유지되어 테스트 결과에 영향을 줄 수 있으므로 싱글턴의 상태를 초기화한 후 테스트를 실행해야 한다. 그리고 만약 싱글턴 객체가 인터페이스를 구현하지 않은 경우, 테스트 환경에서 가짜 구현체로 대체하여 주입하기 어렵다.

참고

@023
focus and hustle