싱글턴 패턴은 실제 값을 가지는 인스턴스가 딱 하나만 만들어지는 패턴이다. 다시 말하자면, 클래스의 인스턴스가 딱 하나만 생성되는 것을 보장한다.
private
접근제어자를 지정한다.단일 객체는 여러 곳에서 공유된다. 따라서 객체가 속성을 가지고 있다면, 이 속성값을 예측하기 어렵다.
SingletonService.getInstance();
클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다.
테스트하기 어렵다.
내부 속성을 변경하거나 초기화 하기 어렵다.
private 생성자로 자식 클래스를 만들기 어렵다.
결론적으로 유연성이 떨어진다.
안티패턴으로 불리기도 한다.
package OOP06.singletonPattern;
public class Dictionary {
private static Dictionary dictionary;
private String contents = "ㄱㄴㄷ~~~~~~~~~";
private Dictionary(){};
public static Dictionary offerDictionary (){
if (dictionary == null){
dictionary = new Dictionary();
}
return dictionary;
}
public String getContents() {
return contents;
}
}
package OOP06.singletonPattern;
public class Driver {
public static void main(String[] args) {
Dictionary dictionary = Dictionary.offerDictionary();
System.out.println(dictionary.getContents()); //ㄱㄴㄷ~~~~
}
}
스프링 컨테이너는 싱글턴 패턴을 자동으로 적용해준다.
스프링 컨테이너 🟰 싱글톤 컨테이너
👉 컨테이너는 객체를 하나만 생성해서 관리한다.
싱글톤 레지스트리 : 싱글톤 객체를 생성하고 관리하는 기능
✔️ 스프링 컨테이너의 이런 기능 덕분에 싱글턴 패턴의 모든 단점을 해결하면서 객체를 싱글톤으로 유지할 수 있다.
👉 싱글톤 패턴을 위한 지저분한 코드가 들어가지 않아도 된다.
👉 DIP, OCP, 테스트, private 생성자로 부터 자유롭게 싱글톤을 사용할 수 있다.