싱글턴패턴(Singleton Pattern)

Soozoo·2024년 8월 12일

Spring

목록 보기
4/12

스프링 프레임워크는 기본적으로 모든 빈(Bean)을 싱글턴(Singleton)으로 관리합니다. 이는 스프링 컨테이너에서 관리되는 각각의 빈에 대해 하나의 인스턴스만 생성되고, 애플리케이션 내에서 그 인스턴스가 공유된다는 의미입니다.

스프링에서의 싱글턴 패턴

  1. 기본 설정: 스프링에서 빈을 정의할 때 특별한 설정을 하지 않으면, 기본적으로 싱글턴 스코프를 가집니다.

    <!-- 기본적으로 싱글턴 스코프를 가짐 -->
    <bean id="myBean" class="com.example.MyClass" />
    

    혹은 자바 설정 파일에서:

    @Configuration
    public class AppConfig {
    
        @Bean
        public MyClass myBean() {
            return new MyClass();
        }
    }
    
  2. 싱글턴 스코프: scope 속성을 사용하여 명시적으로 싱글턴 스코프를 지정할 수도 있습니다.

    <bean id="myBean" class="com.example.MyClass" scope="singleton" />
    
  3. 싱글턴의 의미: 스프링의 싱글턴은 애플리케이션 컨텍스트(Application Context) 내에서 하나의 인스턴스만 생성됨을 의미합니다. 따라서 동일한 빈을 요청할 때마다 동일한 인스턴스가 반환됩니다.

  4. 싱글턴 빈 사용 예제:

    @Component
    public class MyService {
        public void performTask() {
            System.out.println("Task performed.");
        }
    }
    
    @Configuration
    @ComponentScan(basePackages = "com.example")
    public class AppConfig {}
    
    public class MainApplication {
        public static void main(String[] args) {
            ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
            MyService service1 = context.getBean(MyService.class);
            MyService service2 = context.getBean(MyService.class);
    
            System.out.println(service1 == service2);  // true, 동일한 인스턴스
            service1.performTask();
        }
    }
    

    위 코드에서 MyService 빈은 스프링 컨테이너에 의해 관리되며, 애플리케이션 내에서 여러 번 요청하더라도 동일한 인스턴스가 반환됩니다.

스프링과 싱글턴 패턴의 차이

  • 자바에서의 싱글턴 패턴은 클래스 수준에서 직접 인스턴스를 하나만 생성하고, 이를 반환하는 방식으로 구현됩니다. 반면, 스프링의 싱글턴 스코프는 컨테이너에서 관리하는 여러 빈들 중 하나의 인스턴스를 제공하는 방식입니다.
  • 스프링에서 관리되는 싱글턴 빈은 스프링 컨테이너가 시작될 때 인스턴스가 생성되며, 컨테이너가 종료될 때까지 유지됩니다.
profile
넙-죽

0개의 댓글