Singleton


title: 2026-03-22 author: 강병호 (이름) date: 2026-03-22 (날짜) category: TIL/강병호/2026/03 (파일 경로 : TIL/{이름}/{연}/{월}) layout: post (자유) —

1. 싱글턴 패턴

싱글턴 패턴은 생성자를 여러 차례 호출하더라도 실제로 생성되는 객체는 하나임을 보장합니다. 최초 생성 이후에는 기존에 생성된 인스턴스를 반환하여 물리적으로 동일한 객체를 참조하게 합니다.

public class Singleton {
    // 1. 유일한 인스턴스를 저장할 정적 변수
    private static final Singleton INSTANCE = new Singleton();

    // 2. 외부에서 생성자를 호출하지 못하도록 private으로 제한
    private Singleton() { }

    // 3. 인스턴스를 외부에서 참조할 수 있는 정적 메서드
    public static Singleton getInstance() {
        return INSTANCE;
    }
}

2. 장점

  • 메모리 효율성: 고정된 메모리 영역을 사용하며 단 하나의 인스턴스만 생성하므로, 반복적인 객체 생성에 따른 메모리 낭비를 방지할 수 있습니다.

  • 데이터 공유 용이: 전역에서 접근 가능한 인스턴스이므로 다른 클래스의 인스턴스들이 데이터를 공유하고 변경하기에 편리합니다.

3. 단점

싱글턴 패턴은 강력하지만, 오용할 경우 시스템의 복잡도를 높이는 원인이 되기도 합니다.

  • 테스트의 어려움: 싱글턴은 전역 상태를 가지므로 테스트 간의 독립성을 보장하기 어렵습니다. 각 테스트를 수행하기 전에 싱글턴 객체의 상태를 초기화해야 하는 번거로움이 발생합니다.

  • 유연성 부족: 인터페이스가 아닌 구체 클래스에 의존하게 되는 경우가 많아 의존성 주입(DI)이 어렵고, 가짜 객체(Mock)로 대체하기 까다롭습니다.

  • 동시성 문제: 여러 스레드가 동시에 싱글턴 인스턴스에 접근하거나, 지연 초기화(Lazy Initialization) 시점에 동시에 생성 메서드를 호출할 경우 인스턴스가 중복 생성될 위험이 있습니다.

results matching ""

    No results matching ""