Singleton 패턴


<aside> 1️⃣ Singleton 패턴의 개념

</aside>

<aside> 2️⃣ Singleton 패턴은 주로 다음과 같은 상황에 활용된다.

</aside>

  1. 전역적인 리소스에 접근해야 하는 경우
  2. 설정 정보, 로그 기록 등의 중요한 데이터를 관리해야 하는 경우
  3. 비용이 큰 작업을 수행하는 경우

<aside> 2️⃣ Singleton 패턴의 구현 방법

</aside>

  1. 프라이빗 생성자(private constructor): Singleton 클래스는 외부에서 직접 인스턴스를 생성하지 못하도록 생성자를 private으로 선언한다. 이로써 외부에서 new 키워드를 사용하여 인스턴스를 생성하는 것을 방지한다.
  2. 정적 메서드(static method)로 유일한 인스턴스 반환: Singleton 클래스 내부에 자신의 유일한 인스턴스를 담을 정적 필드(static field)를 선언하고, 이를 반환하는 정적 메서드(static method)를 제공한다. 이를 통해 Singleton 클래스의 인스턴스에 접근할 수 있다.
  3. 지연 초기화(Lazy Initialization): 인스턴스가 필요한 시점에서 인스턴스를 생성한다. 처음으로 인스턴스가 요청되기 전까지는 인스턴스가 생성되지 않는다. 이를 통해 자원의 낭비를 방지할 수 있다.
  4. 스레드 안전성(Thread Safety): Singleton 패턴은 다중 스레드 환경에서 안전하게 동작해야 한다. 동시에 여러 스레드가 getInstance() 메서드에 접근할 때 문제가 발생하지 않도록 스레드 안전성을 보장해야 한다.

<aside> 3️⃣ 자바의 Singleton 패턴 예시코드

</aside>

public class Singleton {
    private static Singleton instance;

    private Singleton() {
        // private 생성자
    }

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}