What?
한개의 인스턴스만 생성되는 것이 좋을때 사용한다.
-ex) 커넥션풀
ex) 요청이 하나 들어올때 하나의 객체가 생성되서 그 요청을 처리한다? => 100번이면 100개 생김
==> 따라서
===>요청한개할때 기존에 있던것 불러오는 방식을 만듬
================================================================
=================================================================
How?
- 생성자를 private으로 놓고,
- 그객체의 인스턴스를 반환해주는 public getInstance 함수를 만든다.
public class PrinterSingletone {
private static PrinterSingletone p = null;
private PrinterSingletone(){ //생성자는 private
System.out.println("## 프린터 생성 ##");
}
public static syncronized PrinterSingletone getInstance(){
if(p == null){ //인스턴스없으면 생성자사용해서 인스턴스만들기
p = new PrinterSingletone();
}
return p; //있으면 그 인스턴스 호출 (즉, 새로운 인스턴스는 만들지 않고 기존것 사용
}
}
=================================================================
=================================================================
BUT!
멀티쓰레드 환경에서는 getinstance 가 중복으로 실행되어
인스턴스가 생성중에
다른 getInstance에서는 인스턴스가 없다고판단하여 새로운 인스턴스를 생성하는
상황이 생길수 있다.
그럴땐 동기화를 이용하여 getInstance()를 작성해주면 된다.
=================================================================
=================================================================
WHEN?
스프링에서는 모든 bean 을 싱글톤으로 만들어 준다.
왜냐하면, 대부분 스프링은 서버환경에서 작동 되기 때문 > 즉, 많은 사람들이 동시에 이용하기 떄문이다.
'Spring' 카테고리의 다른 글
No converter for [class com.example.Model.ResponseNaverMovie] with preset Content-Type 'application/json;charset=UTF-8' 에러 (0) | 2020.01.14 |
---|---|
Spring Lazy Initialization (0) | 2020.01.14 |
jsp_ajax_json_practice (1) (0) | 2020.01.14 |
Spring + Mybatis + MariaDB 연동하기 (0) | 2020.01.14 |
Web.xml / root-context.xml / servlet-context.xml 차이점 (0) | 2020.01.12 |