핵심 인사이트 (3줄 요약)
- 유일성 보장: 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하고, 어디서든 접근 가능한 전역적 접근점을 제공한다.
- 자원 최적화: DB 커넥션 풀, 로그 기록기, 설정 정보 관리와 같이 여러 번 생성할 필요가 없거나 자원 낭비가 심한 객체에 주로 사용된다.
- 안티 패턴 주의: 전역 상태 공유로 인한 결합도 증가, 단위 테스트의 어려움 등 단점이 존재하므로 의존성 주입(DI)과 병행 고려가 필요하다.
Ⅰ. 개요 (Context & Background)
- 정의: 애플리케이션 시작부터 종료까지 해당 클래스의 인스턴스가 딱 하나만 존재하도록 강제하는 디자인 패턴이다.
- 필요성: 시스템 내에서 동일한 역할을 수행하는 객체가 여러 개 생성되면 데이터의 불일치가 발생하거나 메모리 자원을 낭비할 수 있는 경우에 적용한다.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
+---------------------------------------+
| Singleton |
+---------------------------------------+
| - instance : Singleton (private static)|
+---------------------------------------+
| - Singleton() (private constructor) |
| + getInstance() : Singleton (static) | <--- Global Access Point
+---------------------------------------+
|
| Returns unique instance
v
+---------------------------------------+
| Unique Instance (Heap) |
+---------------------------------------+
- 핵심 구현 기법:
- Private Constructor: 외부에서
new 키워드로 인스턴스를 생성하지 못하게 막음.
- Static Instance: 클래스 내부에서 유일한 인스턴스를 보관.
- Static Method (getInstance): 외부에 인스턴스를 반환하는 유일한 통로 제공.
Ⅲ. 융합 비교 및 다각도 분석 (Comparison & Synergy)
| 구현 기법 | 지연 초기화 (Lazy Init) | Enum 방식 (Recommended) | Spring Singleton |
| 특징 | 필요한 시점에 인스턴스 생성 | 자바 언어 차원의 보장 | IoC 컨테이너가 생명주기 관리 |
| 동시성 | 동기화 처리 필요 (DCL) | 스레드 세이프 자동 보장 | 컨테이너가 보장 |
| 직렬화 | 직접 구현 필요 | 자동 지원 | 관리 필요 없음 |
Ⅳ. 실무 적용 및 기술사적 판단 (Strategy & Decision)
- 감리 주안점: 멀티스레드 환경에서 인스턴스가 두 개 생성되는 '경합 조건(Race Condition)' 발생 여부를 정밀하게 검토해야 한다.
- 기술사적 판단: 싱글톤은 전역 상태를 유발하여 객체 간 '강결합(Tight Coupling)'을 초래한다. 현대적 아키텍처에서는 클래스 자체를 싱글톤으로 만들기보다, Spring과 같은 DI 프레임워크를 활용해 객체의 '생명주기'만 싱글톤으로 관리하는 방식을 권장한다.
Ⅴ. 기대효과 및 결론 (Future & Standard)
- 기대효과: 메모리 낭비 방지, 데이터 공유의 일관성 확보, 전역 접근을 통한 코드 간소화.
- 결론: 가장 널리 쓰이는 패턴 중 하나이나 단점이 뚜렷하다. TDD(테스트 주도 개발) 시 목(Mock) 객체 주입이 어렵다는 점을 인지하고, 유연한 설계를 위해 인터페이스 추상화를 병행해야 한다.
📌 관련 개념 맵 (Knowledge Graph)
- 상위 개념: 생성 패턴(Creational Patterns)
- 하위 개념: Double Checked Locking (DCL), Enum Singleton
- 연관 개념: 의존성 주입(DI), 정적 팩토리 메서드, 안티 패턴(Anti-Pattern)
👶 어린이를 위한 3줄 비유 설명
- 학교 전체에 딱 하나뿐인 '교내 방송 마이크'와 같아요.
- 누구나 방송을 하고 싶을 때는 그 마이크를 빌려서 써야 하고, 마이크가 여러 개 있으면 소리가 섞여서 시끄러워질 거예요.
- 마이크가 하나뿐이라 소중하게 나눠 쓰는 약속이 바로 싱글톤 패턴이랍니다.