싱글턴 패턴

Lee·2023년 4월 16일
0

디자인 패턴

목록 보기
2/7

싱글턴 패턴(Singleton)

  • 생성 패턴
  • 전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하면, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴

구현

Lazy initialiaztion

public class SingleTon {
    private SingleTon() {

    }

    private static SingleTon singleTon;

    public static SingleTon getInstance() {
        if (singleTon == null) {
            singleTon = new SingleTon();
        }
        return singleTon;
    }
}

Thread safe initialization

public class SynchronizedSingleTon {
    private SynchronizedSingleTon(){

    }

    private static SynchronizedSingleTon instance;

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

Double-Checked Locking

public class VolatileSingleTon {
    private static volatile VolatileSingleTon instance;

    private VolatileSingleTon() {

    }

    public static VolatileSingleTon getInstance() {
        if (instance == null) {
            synchronized (VolatileSingleTon.class) {
                if (instance == null) {
                    instance = new VolatileSingleTon();
                }
            }
        }
        return instance;
    }
}

LazyHolder

public class HolderSingleTon {
    private HolderSingleTon() {

    }

    private static class SingleTonInstanceHolder {
        private static final HolderSingleTon INSTANCE = new HolderSingleTon();
    }

    public static HolderSingleTon getInstance() {
        return SingleTonInstanceHolder.INSTANCE;
    }
}

싱글톤 패턴 사용 이유

  1. 메모리
    • 최초 1번의 new 연산자를 통해 고정된 메모리 영역 사용
    • 해당 객체 접근 시 메모리 낭비 방지
  2. 데이터 공유
    • 전역으로 사용되는 인스턴스이므로 다른 클래스의 인스턴스들 접근 가능
  3. 인스턴스가 한 개가 존재하는 것을 보증

싱글톤 패턴 문제점

  1. 테스트 어려움
    • 싱글톤 인스턴스는 자원을 공유
    • 테스트 격리를 위해서 매번 인스턴스 상태 초기화 필요
  2. SOLID 원칙을 위반할 가능성이 높다
    • 인스턴스 자체가 하나만 생성해 여러 책임을 지는 경우가 많다(SRP)
    • 많은 데이터를 공유 시 클래스 간 결합도 증가(OCP)
    • 구체 클래스에 의존(DIP)

참조
싱글톤(Singleton) 패턴이란?
싱글톤(Singleton) 패턴 - 꼼꼼하게 알아보자

profile
발전하고 싶은 백엔드 개발자

0개의 댓글