스프링은 기본적으로 빈을 싱글톤 오브젝트로 만든다.
출처 : https://www.javatpoint.com/singleton-design-pattern-in-java
오직 하나의 인스턴스만 갖는 클래스를 정의하고
전역적으로 접근 가능하도록 한다.
다시 말하면 , 싱글톤 클래스는 오직 하나의 인스턴스만 갖는다는 것을 보장해야 하고 다른 클래스에서 이것에 접근할 수 있어야 한다.
싱글톤 패턴에는 두가지 방식이 있다.
매번 인스턴스를 생성하지 않기에 메모리를 절약할 수 있다.
같은 인스턴스가 계속 재사용되는 것이다.
싱글톤 패턴은 멀티쓰레드와 데이터베이스를 이용하는 애플리케이션에서 대부분 사용된다. 로깅 , 캐싱 , 쓰레드 풀, 설정등에 사용된다.
싱글톤 클래스를 만들기 위해 다음의 것들이 필요하다.
스태틱 멤버를 선언함과 동시에 인스턴스를 생성한다.
그래서 클래스가 로딩될때 인스턴스가 생성된다.
class A{
private static A obj=new A();//자기 자신의 인스턴스를 생성한다. 클래스가 로딩될때 생성된다.
//기본생성자를 private 으로 선언함으로써 다른 클래스가 이 클래스의 인스턴스를 생성하지 못하게 한다.
private A(){}
//static 팩토리 메서드를 통해 인스턴스를 반환한다.
public static A getA(){
return obj;
}
public void doSomething(){
//write your code
}
}
인스턴스를 synchronized method 나 synchronized 블럭을 이용해 생성한다. 필요할때 인스턴스가 생성된다.
class A{
private static A obj;
private A(){}
public static A getA(){
if (obj == null){
synchronized(Singleton.class){
if (obj == null){
obj = new Singleton();//필요할때 인스턴스가 생성된다.
}
}
}
return obj;
}
public void doSomething(){
//write your code
}
}