🧩 Singleton 패턴이란?

정의

Singleton 패턴은 프로그램 내에서 하나의 인스턴스만 존재하도록 보장하는 디자인 패턴이다.
주로 설정 객체, 공통 유틸리티, 전역 접근이 필요한 객체에 사용한다.

✅ Singleton의 특징

  • 메모리 절약: 인스턴스를 여러 개 만들지 않는다.
  • 전역 상태 공유: 모든 곳에서 같은 객체를 사용한다.
  • 객체 생성 비용 절감: 반복 생성 비용을 줄일 수 있다.

⚠️ Singleton의 단점

  • 멀티스레드 환경에서 동기화가 필요하다.
  • 단위 테스트가 어려워질 수 있다.
  • 의존성 관리가 복잡해질 수 있다.

🛠️ Singleton 구현 예시 (Java - Double Checked Locking)

public class DoubleCheckedLockingSingleton {
    private static volatile DoubleCheckedLockingSingleton instance;

    private DoubleCheckedLockingSingleton() {
        // 인스턴스 생성을 막기 위한 private 생성자
    }

    public static DoubleCheckedLockingSingleton getInstance() {
        if (instance ** null) {
            synchronized (DoubleCheckedLockingSingleton.class) {
                if (instance ** null) {
                    instance = new DoubleCheckedLockingSingleton();
                }
            }
        }
        return instance;
    }
}

tip

volatilesynchronized를 함께 사용하면 동시성 문제를 줄이면서 lazy initialization을 구현할 수 있다.

🧩 Singleton 사용 사례

  • 설정 정보 관리 객체
  • 로그 관리 객체(Logger)
  • DB 연결 풀 관리 객체
  • 공통 계산 유틸리티 클래스

🧪 다른 구현 방식

1. 정적 초기화 방식

public class StaticSingleton {
    private static final StaticSingleton instance = new StaticSingleton();

    private StaticSingleton() {}

    public static StaticSingleton getInstance() {
        return instance;
    }
}
  • 초기화가 빠르고 단순하다.
  • lazy loading은 불가능하다.

2. Enum 방식

public enum EnumSingleton {
    INSTANCE;
}
  • 직렬화 문제에 안전하다.
  • Java에서 가장 간단하고 안전한 Singleton 구현 방식 중 하나다.

연결문서

댓글남기기