본문 바로가기

Java, Spring/스프링 핵심 원리 기본

5-1. 웹 애플리케이션과 싱글톤 ~

싱글톤 : 객체가 나의 JVM안에 딱 하나만 있어야함.

 

우리가 만든 AppConfig는 항상 new해서 줌.

 

두 번 가져오면 각각 new해서 가져오기 때문에 다른 객체다. = JVM메모리에 계속 객체가 올라간다.

( 웹 애플리케이션의 특징 : 고객 요청이 많기 떄문에 항상 객체생성을 할 수가 없다. )

 

트래픽이 100이면 100개만 생성될까? -> 연계되는 객체 예를들어 Repository도 new된다.

 

=> 객체를 공유하도록 설계하면 됨. ( 딱 하나만 생성해놓고 생성된 객체인스턴스를 공유하여 쓴다. )

=> 객체를 공유하도록 설계하면 됨. ( 딱 하나만 생성해놓고 생성된 객체인스턴스를 공유하여 쓴다. )

=> 객체를 공유하도록 설계하면 됨. ( 딱 하나만 생성해놓고 생성된 객체인스턴스를 공유하여 쓴다. )

=> 객체를 공유하도록 설계하면 됨. ( 딱 하나만 생성해놓고 생성된 객체인스턴스를 공유하여 쓴다. )

=> 객체를 공유하도록 설계하면 됨. ( 딱 하나만 생성해놓고 생성된 객체인스턴스를 공유하여 쓴다. )

 

 

 

 

 

------------------------------------------------------------ 5.2 싱글톤 패턴

 

 

클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴

 

 

 

 

자바가 뜰 때 SingletonService 클래스에 static에 오른쪽에 new라고 되어있으면 static영역에 new한 객체의 참조를 instance라는 변수에 넣어둠.

 

 

 

생성자가 private이라 못 만듦.

프라이빗 생성자를 만들어두면 외부에서 객체를 더이상 못 만듦.

 

확실한 싱글톤 완성체!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

자바가 뜨면서 static영역의 SingletonService객체의 참조값으로 instance변수를 초기화 한다.(static이므로 자바뜨면서 동시에 생성 - 기본적인 자바 개념)

이 떄 이 instance변수의 참조값을 꺼낼 수 있는 방법은 getInstance() 메서드 밖에 없다.

이제 SingletonService 객체를 생성할 수 있는 방법은 아무것도 없다.

getInstance() 메서드를 호출하면 항상 같은 객체를 반환한다.

 

제일 좋은 오류는 컴파일오류

 

 

 

 

 

드디어 같은 객체인스턴스가 반환되었다.!!!!!!!!!!!!!! 자바가 뜰 때 생성된 것을 그냥 가져다씀

 

생성하는데 드는 비용이 1000이라면 참조로 가져오는 비용은 1 ㅋㅋ.

 

있는 객체 재사용 = 성능이 좋아짐.

 

 

2. .getInstance로 꺼내야되므로

4. 유연한 테스트 어려움.

 

 

 

===>>>>>> 스프링은 싱글톤패턴의 문제점을 전부다 해결하면서 객체를 싱글톤으로 만들어줌.

===>>>>>> 스프링은 싱글톤패턴의 문제점을 전부다 해결하면서 객체를 싱글톤으로 만들어줌.

===>>>>>> 스프링은 싱글톤패턴의 문제점을 전부다 해결하면서 객체를 싱글톤으로 만들어줌.

===>>>>>> 스프링은 싱글톤패턴의 문제점을 전부다 해결하면서 객체를 싱글톤으로 만들어줌.

 

 

 

---------------------------------------------------------- 5-3. 싱글톤 컨테이너

 

 

우리가 지금까지 bean으로 등록한 것들이 싱글톤으로 관리되는 빈들이다.

 

 

과거자료

@Bean 해두면 다 호출해서 등록해준다. ( 객체인스턴스를 미리 생성해두고 관리 -> 조회 하면 관리되는 빈 객체를 반환 )

 

 

 

 

 

 

아까 순수 컨테이너 테스트이다. ( 스프링안씀.)

 

이때는 스프링컨테이너안쓰고 순수 DI컨테이너

 

이제 스프링컨테이너 사용시

 

ApplicationContext(스프링 컨테이너)를 AppConfig 파일을 바탕으로 만들고 getBean 하므로 1,2는 같은 객체일 수 밖에없다.

조회 할 때마다 37c7595가 나옴.

 

사기
prototype 아닌가? - 99.9%는 싱글톤

ex) http 요청 lifecycle과 맞출 떄, 고객이 들어올때 만들어서 고객이 나갈때 죽이기, http 세션이랑 같은 lifecycle맞추기 등등. ( 잘 안씀 )

 

 

Recent Posts
Popular Posts
Recent Comments