Design Pattern

Singleton Pattern

창욱씨 2020. 4. 27. 22:40
반응형

싱글톤 패턴 (Singleton Pattern)

싱글톤 패턴은 클래스의 인스턴스가 오직 하나만 생성되도록 보장하고, 그 인스턴스에 전역적으로 접근할 수 있게 하는 생성(Creational) 디자인 패턴입니다.


핵심 개념

특징 설명
단일 인스턴스 클래스의 인스턴스가 앱 전체에서 딱 하나만 존재
전역 접근점 어디서든 동일한 인스턴스에 접근 가능
지연 초기화 필요한 시점에 인스턴스를 생성 (Lazy Initialization)

구현 예시

Java

public class Singleton {
    // 클래스 로딩 시 JVM이 딱 한 번만 생성
    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}

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

언제 사용하나요?

  • 설정(Configuration) 관리자 — 앱 전체 설정을 한 곳에서 관리
  • 로그(Logger) — 로그 출력 인스턴스를 하나로 유지
  • DB 커넥션 풀 — 데이터베이스 연결을 하나로 공유
  • 캐시(Cache) 관리 — 전역 캐시 저장소

장점 vs 단점

✅ 장점

  • 인스턴스가 하나뿐이므로 메모리 절약
  • 전역 상태를 일관성 있게 관리
  • 인스턴스 생성 비용이 클 때 성능 이점

❌ 단점

  • 전역 상태로 인해 코드 간 결합도 증가
  • 단위 테스트(Unit Test)가 어려움 — Mock 처리 복잡
  • 멀티스레드 환경에서 동기화 처리 필요
  • SOLID 원칙 위반 가능성 (단일 책임 원칙, 개방-폐쇄 원칙)

멀티스레드 주의사항

멀티스레드 환경에서는 두 스레드가 동시에 instance == null을 체크해 인스턴스가 두 개 생성될 수 있습니다. 이를 방지하는 방법:

  1. Synchronized/Lock 사용
  2. Double-Checked Locking (위 Java 예시)
  3. Eager Initialization — 클래스 로딩 시 미리 생성
  4. Enum 활용 (Java에서 가장 안전한 방법)
반응형

'Design Pattern' 카테고리의 다른 글

Factory Pattern  (0) 2020.05.06
Chain Of Responsibility  (0) 2020.05.02
Observer Pattern  (0) 2020.05.02
Template Method Pattern  (0) 2020.05.01
Facade Pattern  (0) 2020.04.03