Spring
[Spring] 싱글톤 패턴
배씌
2024. 5. 27. 00:04
싱글톤 패턴이란?
- 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴
- 객체 인스턴스가 2개 이상 생성되는 것을 막아야함. (어떻게? -> private 생성자 이용)
싱글톤 패턴 예시)
public class SingletonService {
private static final SingletonService instance = new SingletonService();
public static SingletonService getInstance(){
return instance;
}
// private 생성자 이용해서 다른 곳에서 객체 생성되는 것 방지
private SingletonService(){
}
public void logic(){
System.out.println("싱글톤 객체 로직 호출");
}
}
1. static 영역에 객체 instance 를 미리 하나 생성해서 올려둠
2. 이 객체 인스턴스가 필요하면 오직 'getInstance()' 메소드를 통해서만 조회 가능.
3. 딱 1개만 존재해야 하므로 생성자를 private으로 막아둠.
싱글톤 패턴을 사용하면 고객의 요청이 올 때마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 사용할 수 있다. 그러나 싱글톤 패턴은 많은 문제점도 있다.
※ 문제점
1. 싱글톤 패턴을 구현하는 코드 자체가 많이 들어감
2. 의존 관계상 클라이언트가 구체 클래스에 의존함. -> DIP 위반
3. 클라이언트가 구체 클래스에 의존해서 OCP원칙을 위반할 가능성이 높다.
4. 테스트하기 어렵다.
5. 내부 속성을 변경하거나 초기화하기 어렵다.
6. private 생성자로 자식 클래스를 만들기 어렵다.
7. 유연성이 떨어진다.