싱글톤 패턴
- 객체의 인스턴스가 오직 1개만 생성되는 패턴
- 생성자가 여러 차례 호출되더라도 , 실제 인스턴스는 1개이고 , 최초 생성 이후 생성자는 최초의 생성자가 생성한 객체를 리턴 함
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
싱글톤 패턴의 이점
- 메모리 이득
- 최초 한번의 생성자를 통해 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있다
- 또한 이미 생성된 인스턴스를 활용하니 속도 측면에서 이점이 있음
- 데이터 공유가 쉬움
- 싱글톤 인스턴스는 전역으로 사용되는 인스턴스이기 때문에 , 다른 클래스의 인스턴스들이 접근하여 사용할 수 있음
- 물론 여러 클래스 인스턴스가 싱글톤 인스턴스의 데이터에 동시 접근 할 때 동시성 문제가 발생할 수 있으므로 이 점을 유의해서 설계하는 것이 좋음
- 위와 같은 이점 덕분에 데이터베이스 커넥션 풀 , 스레드 풀 , 캐시 , 로그 기록 객체 , 스프링 빈 등에서 사용함
싱글톤 패턴의 문제점
- 테스트하기 어려움
- 싱글톤 인스턴스는 자원을 공유하고 있기 때문에 테스트가 결정적으로 격리된 환경에서 수행 되려면 매번 인스턴스의 상태를 초기화 시켜주어야함 (어플리케이션 전역에서 상태를 공유하기 때문에 테스트가 온전하게 수행되지 못하기 때문)
- OCP , DIP 원칙을 위반할 가능성이 높음
- 클라이언트가 구체 클래스에 의존하고, new 키워드를 직접 사용하여 클래스안에서 객체를 생성하고 있기 때문
- 자식 클래스를 만들 수 없음
- 내부 상태를 변경하기 어려움
참고
싱글톤(Singleton) 패턴이란?
예제
https://github.com/bandalgomsu/Ex