-
Java - 싱글턴(Singleton) 패턴Java 2022. 5. 30. 20:26반응형
싱글턴 패턴이란?
- 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴
- 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 반환
- 다른 클래스 인스턴스들과 데이터 공유가 쉬움
- Database Connection Pool처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용(쓰레드풀, 캐시, 로그 기록 객체등)
- anti-pattern이므로 가급적 사용하지 않는 것이 좋음
싱글턴 패턴의 문제점
- 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스 인스턴스들 간의 결합도가 높아져 "개방-폐쇄 원칙"을 위배하게 된다.
-
수정, 테스트가 어려움
싱글턴(Singleton) 생성 예제
1. Double Checked Locking
public class Singleton { private volatile static Singleton instance; private Singeton() {} public static Singleton getInstance() { if (instance == null) { synchronized(Singleton.class) { if (instance == null) { instance == new Singleton(); } } } return instance; } }
2. Lazy Holder
public class Singleton { private Singleton() {} public static Singleton getInstance() { return LazyHolder.INSTANCE; } private static class LazyHolder { private static final Singleton INSTANCE = new Singleton(); } }
반응형'Java' 카테고리의 다른 글
Java - Collections.singletonList emptyList (0) 2022.06.08 Java - Calendar 클래스로 날짜, 시간, 요일 구하기 (0) 2022.06.08 Java - method rule (0) 2022.05.31 Java - 자바 절대값, 랜덤 함수 (0) 2022.05.30 Java - com.sun.tools.javac.util 패키지 호환성 문제 (0) 2022.05.30