image.png

여러 클라이언트들이 서비스를 요청할 때 DI 컨테이너에서는 클라이언트 마다 객체를 따로 생성하기 때문에 메모리 관리 부분에서 효율이 떨어진다.

예를 들어 클라이언트가 100명이 서비스를 요청하면 DI컨테이너에서는 100개의 memberService 객체를 생성한다.

image.png

SingletonService 클래스를 통해 Static 영역에 객체를 하나를 만들어 객체 인스턴스가 필요하면 이 메서드를 통해서만 조회하도록 한다.

** prevate SingletonService(){} → 생성자 SingletonService 를 private으로 접근제어를 하여 외부에서 new키워드를 사용한 다른 객체 생성을 못하게 막는 것이 싱글톤 핵심이다.

그렇기 때문에 외부에서 new 키워드를 이용한 SingletonService 객체를 생성하려고 하면 오류가 뜬다.


싱글톤 패턴의 단점이 여러가지 있다. 하지만 스프링에서는 다르다!


스프링에서의 “싱글톤 컨테이너

→ 스프링에서는 싱글톤 패턴을 적용하지 않아도 컨테이너 내에서 싱글톤 패턴으로 객체 인스턴스를 관리한다.

즉, 싱글톤 패턴을 위한 복잡하거나 지저분한 코드를 추가로 작성하지 않아도 된다.

image.png

***** 싱글톤 방식의 주의점 *****

싱글톤 객체를 무상태(stateless)로 설계를 해야한다..!

→ 무상태(stateless)가 무엇인가