Singleton pattern을 정보처리기사 시험을 준비하며 디자인 패턴의 생성패턴 중 하나로 알고 있었는데 이것은 객체 인스턴스가 오직 1개만 생성되야하는 경우에 사용하는 패턴이다.
예를 들어, 설정 파일같은 경우에는 객체가 여러 개 생성되면 설정 값이 변경될 위험이 생기므로 싱글톤을 사용해야한다. 싱글톤을 이용하게 되면 하나의 인스턴스를 메모리에 등록해서 여러 스레드가 동시에 해당 인스턴스를 공유하여 사용하게끔 할 수 있으므로, 요청이 많은 곳에서 사용하면 효율성이 높아지는 장점이 있다. (하지만 동시성 문제 고려해야함)
웹 애플리케이션과 싱글톤
- 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 하게 된다.
- 요청이 들어오면 AppConfig는 직접 객체를 만들어 반환시켜준다.
- 클라이언트 B(다른고객)가 똑같은 요청을 해도 새로 객체를 만들어 반환해준다
- 즉, 고객에 10번 요청하면 객체가 10개가 생성되는 구조이다.
진짜 매번 새로 생성되는지 테스트해보자!
객체의 참조값을 확인해보면 서로 다른 객체임을 알 수 있다. ==> 요청이 올때마다 새로 객체 생성
JVM메모리에 요청이 들어올 때 마다 객체가 생성되어 올라감 ==> 굉장한 메모리 낭비
요청의 수(고객의 수)가 많아질 수록 메모리의 낭비가 기하급수적으로 심해짐
해당 객체가 오직 1개만 생성되어, 이를 공유하도록 설계하면 해결할 수 있다. ==> Singleton Pattern
반응형
'Spring > Spring Core' 카테고리의 다른 글
Singleton 방식의 주의점 (0) | 2021.03.12 |
---|---|
Singleton Pattern & Singleton Container (0) | 2021.03.11 |
스프링 빈 설정 메타 정보 - BeanDefinition (0) | 2021.03.10 |
다양한 설정 형식 지원 (0) | 2021.03.10 |
BeanFactory와 ApplicationContext (0) | 2021.03.09 |