- Singleton Pattern(싱글톤 패턴)이란 객체를 단 한번만 생성을 하여 재사용 할 수 있도록 하는 디자인 패턴.
객체 생성
public class Object {
public Object() {
}
}
실행
public static void main(String[] args) {
Object object = new Object();
Object object1 = new Object();
System.out.println(object == object1);
}
결과
false
싱글톤객체
생성public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
실행
public static void main(String[] args) {
Singleton object = getObject();
Singleton object1 = getObject();
System.out.println(object == object1);
}
public static Singleton getObject() {
return Singleton.getInstance();
}
결과
true
- Spring에서는 Web Application으로 서버를 구성한 경우가 많다.
- 일반적인 상황에서 다량의 Request가 들어오면 매번 여러 객체들을 생성하고 소멸시키게 된다.
- 매번 요청이 들어올 때 마다 이러는 것은 비효율적.
Singleton Pattern
을 이용하여 하나의 객체에서 여러 요청을 처리하도록Spring Container
라는 개념을 지원.
@Bean
@Component
등과 같은 Annotation으로 간단하게 해당 객체를 Singleton 객체로 만들어 Spring Container에 등록할 수 있다.DI
와 같은 기술을 통해 주입받아서 사용할 수 있다.@Autowired
나 생성자
등을 통하여 만들어진 Singleton 객체를 사용할 수 있다.@Bean
: Singleton 객체를 Spring Container에 등록 (등록한 하나의 인스턴스를 사용)@Configuration
public class AppConfig {
@Bean
public Singleton singleton() {
return new Singleton();
}
}
@Component
: SingletonService 객체를 Spring Container에 등록.생성자주입
: Spring Container에 등록된 Singleton 인스턴스를 @RequiredArgsConstructor
를 통해 생성자 주입.@Component
@RequiredArgsConstructor
public class SingletonService {
private final Singleton singleton; // Spring Container에 등록된 Singleton Bean을 주입받는다.
}
이상