디자인 패턴

1. Singleton - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 2. 6. 09:52

1. Singleton패턴이란?

  • 인스턴스가 하나만 존재하는 것을 보증하는 패턴
    • Singleton은 클래스변수로 정의된다.
    • Singleton 클래스의 인스턴스에서 초기화한다.
      • Singleton 클래스를 로드할 때 단 한 번만 초기화
    • Singleton 클래스의 생성자는 private이다.
      • Singleton 클래스 외부에서 생성자 호출을 금지하기 위함
    • Singleton 클래스의 인스턴스를 얻는 메소드로 getInstance(변경가능)를 정의
public class Singleton {
    // 1. Singleton은 클래스변수로 정의된다.
    private static Singleton singleton = new Singleton();
    
    // 2. Singleton의 생성자는 private이다.
    private Singleton() {
        System.out.println("인스턴스를 생성했습니다.");
    }
    
    // 3. Singleton 클래스의 인스턴스를 얻는 메서드를 정의 해준다.
    public static Singleton getInstance() {
        return singleton;
    }
}

 

2. enum을 이용한 Singleton

  • enum의 요소는 상수로서 인스턴스의 유일성을 보증받는다.
enum Singleton {
    INSTANCE;
    public void hello() {
        System.out.println("hello is called.");
    }
}
  • 멀티스레드 환경에서 안전함: enum 타입은 자바가 내부적으로 이미 스레드 안전(thread-safe)을 보장하는 방식으로 처리하므로 멀티스레드 환경에서도 안전하게 동작합니다.
  • 직렬화 문제 해결: enum은 기본적으로 직렬화가 제대로 처리됩니다. enum 인스턴스는 JVM에 의해 자동으로 생성되고 관리되므로, 직렬화된 객체로 변환해도 동일한 인스턴스가 반환됩니다.
  • 간단한 구현: enum을 사용하면 코드가 매우 간단하고, enum을 이용한 싱글톤은 추가적인 코드나 복잡한 초기화 과정을 필요로 하지 않습니다.