Singleton, Prototype bean scope 확인

tony·2023년 11월 10일

Singleton Bean Scope

이름에서 알 수 있듯이 Spring Application Context 내에서 bean은 하나의 인스턴스만 갖게 된다.

however it is worth noting that the same bean can have multiple instances in the Spring Constants with different Bean names.

하지만 singleton bean scope은 Java class가 JVM 메모리에서 단일 인스턴스만 사용할 수 있다는 싱글톤 디자인 패턴의 개념과 약간 다르다.


아래 "Accoung Service" 스프링 빈은 스프링 컨텍스트 내 같은 서비스지만 다른 이름을 갖고 있다.


java에서 사용하는 싱글턴 패턴에서는 한 클래스에서 한개의 인스턴스만 참조하지만, 스프링의 싱글턴은 컨텍스트 내 타입에 대해 한개의 인스턴스만 갖는게 아니라 타입에 대해 이름이 다른 여러개의 인스턴스를 갖을 수 있다.

ProtoType Bean Scope

ProtoType은 빈을 불러올 때마다 빈 전체의 새 인스턴스를 모두 불러오는 방식이다.

ProtoType을 사용하는 이유는?

싱글턴 빈에 접근하는 두 스레드의 레이스 컨디션이나, 결과를 예측할 수 없는 동시성 환경에서 발생하는 문제를 해결하기 위해 각 스레드에서 자신만의 객체를 할당하는 ProtoType을 사용한다.

다음과 같이 스레드에 Prototype 빈이 각각 생성된다.


💡Singleton 빈이더라도 이름을 다르게 하여 객체를 다르게 생성 가능하다.
💡Prototype 빈은 Singleton 빈 내에서 사용 가능하지만 제대로 동작하지 않을 수 있다. 따라서 ObjectFactory, ObjectProvider를 사용하여 이를 해결 할 수 있다.

profile
백엔드 서버 엔지니어

0개의 댓글