본문 바로가기

SpringFramework Core - I. IoC 컨테이너/5. Bean Scopes

5.1. 싱글턴 Scope

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-singleton

 

 

단 하나의 공유된 싱글턴 bean 인스턴스만이 관리된다. 그리고 ID를 통해 bean을 요청하면, 스프링 컨테이너에 의해 하나의 특정한 bean 인스턴스가 반환된다.

 

다르게 말하면, 싱글턴으로 scope를 잡은 bean을 정의했다면 스프링 IoC 컨테이너는 정확하게 하나의 인스턴스만 만들어낸다. 이 single 인스턴스는 싱글턴 bean들의 캐시에 저장되고, 그 후에 해당 bean에 대한 모든 요청과 참조에 대해서는 캐시된 객체가 반환된다. 다음 그림은 싱글턴 scope가 어떻게 작동하는지 보여준다.

스프링의 싱글턴 bean 개념은 GoF가 정의한 싱글턴 패턴과는 다르다. GoF의 싱글턴에서는, 클래스로더마다 단 하나의 클래스 인스턴스를 만들도록 scope를 강제한다. 스프링 싱글턴에서의 scope는, '컨테이너마다 그리고 bean마다' 단 하나의 클래스 인스턴스를 만든다는 말로써 가장 잘 표현된다. 이 말은, 만약 하나의 스프링 컨테이너에 특정 클래스를 하나의 bean으로 정의했다면 스프링 컨테이너는 그 bean 정의를 통해 단 하나의 인스턴스를 만들어낸다는 뜻이다. 싱글턴 scope는 스프링의 기본 scope이다. XML에서 bean을 싱글턴으로 정의하려면 다음 예시와 같이 bean을 정의하면 된다.

<bean id="accountService" class="com.something.DefaultAccountService" />

<!-- 싱글턴 scope가 기본이기 때문에 불필요한 설정이긴 하지만, 다음과 동일하다 -->
<bean id="accountService" class="com.something.DefaultAccountService" scope="singleton" />