(JAVA) 싱글톤 패턴

Java 싱글톤 패턴이란 무엇입니까?

Java 싱글톤 패턴은 객체를 한 번만 생성하고 어디에서나 참조할 수 있도록 하는 디자인 패턴입니다. 이렇게 하면 메모리 낭비를 줄이고 객체 일관성을 유지할 수 있습니다.

Java의 싱글톤 패턴은 다음과 같이 구현됩니다.

  1. 디자이너 private외부에서 직접적인 개체 생성을 방지합니다.
  2. 클래스 내에서 자신의 인스턴스를 만듭니다.
  3. getInstance() 메서드에 의해 생성된 인스턴스를 반환합니다.
public class Singleton {

    // 내부에서 자체적으로 인스턴스 생성
    private static final Singleton instance = new Singleton();

    // 외부에서 인스턴스 생성 불가
    private Singleton(){ } 

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

위의 구현 Singleton 클래스의 인스턴스는 클래스가 선언된 첫 번째 실행문에서 한 번만 생성됩니다. Heap 범위 내에서 생성 후 생성됩니다. getInstance() 메서드를 통해 어디에서나 참조할 수 있습니다.

이제 외부 클래스의 싱글톤 인스턴스가 개체 일관성을 유지하는지 확인하겠습니다.

Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
// Object singleton2 = Singleton.getInstance(); // 같은 결과

System.out.println( (singleton1 == singleton2) );
true

결과적으로 singleton1 수업 singleton2 모두 힙 영역에 로드됩니다. Singleton 인스턴스를 가리키고 개체 일관성을 유지합니다.

일반적인 싱글톤 패턴은 Java입니다. Runtime 클래스와 스프링 프레임워크 ApplicationContext있다

Runtime 클래스는 JVM(Java Virtual Machine)의 인스턴스를 나타내며 ApplicationContext는 Spring Framework의 빈 컨테이너 역할을 합니다.

Runtime 클래스의 인스턴스를 생성하려고 하면 아래와 같이 생성에 실패합니다.

// 'Runtime()' has private access in 'java.lang.Runtime'
Runtime runtime = new Runtime(); 

다음과 같이 인스턴스를 참조할 수 있습니다.

Runtime runtime = Runtime.getRuntime();

또한 많은 라이브러리와 프레임워크는 싱글톤 패턴을 사용하며 직접 구현할 수 있습니다. 그러나 다중 스레드 환경에서는 동시성 및 동기화 문제와 같은 다양한 문제가 발생할 수 있으며 이를 안전하게 구현하기 위해서는 몇 가지 주의 사항이 필요합니다.

이 문제는 나중에 논의하겠습니다.