싱글턴 패턴이란
- 클래스 인스턴스를 하나만 만들고 다른 인스턴스를 만들지 못하게 관리
- 어디서든 접근할 수 있도록 전역으로 설정
언제 유용할까?
자원을 많이 잡아먹는 인스턴스가 있다면 유용
고전적인 구현법
public class Singleton {
private static Singleton unique;
private Singleton() {
}
public static Singleton getInstance() {
if (unique == null) {
unique = new Singleton();
}
return unique;
}
}
- private 접근제어자로 인스턴스 생성을 Singleton 클래에서만 가능하게 한다
- getInstance() 로 전역변수에 접근을 할 수 있다
- 위 코드는 멀티 스레드에서 문제가 발생할 확률이 있다
싱글턴 패턴의 장점
- 하나의 인스턴스만 고정하고 사용하기에 메모리 낭비 방지
- 이미 생성된 인스턴스를 활용하기에 이점 ( 필요한 클래스 로딩 시 생성할 수도 있다)
- 여러 클래스에서 쉽게 공유하며 사용할 수 있다
싱글턴 패턴의 문제점
- 테스트가 힘들다
- 멀티 스레드에서 인스턴스가 1개임을 보장하지 못함
자바 싱글턴 vs 스프링 싱글턴?
- 자바 싱글턴은 클래스 로더에 의해 구현되고, 스프링 싱글턴은 스프링 컨테이너에 의해서 구현
- 자바 싱글턴의 scope는 코드 전체이고, 스프링 싱글턴의 scope는 해당 컨테이너 내부
- 스프링에 의해 구현된 싱글턴 패턴은 thread-safe를 자동으로 보장
- 자바싱글턴의 경우 구현하는 개발자의 로직에 따라 다름
'dev > 🧩 디자인패턴' 카테고리의 다른 글
팩토리 패턴이란? (Factory Pattern) (0) | 2022.11.08 |
---|---|
싱글턴 패턴 - 동시성 문제 해결 (0) | 2022.10.25 |
전략 패턴이란? (Strategy Pattern) (2) | 2022.10.07 |
MVC1 과 MVC2 차이 그리고 Spring MVC 란? (0) | 2022.05.27 |
MVC 패턴이란? (Model-View-Controller) (0) | 2022.05.27 |