back-end/spring boot

싱글톤

study-minjeong 2024. 7. 18. 14:32

싱글톤 패턴

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

객체 인스턴스를 2개 이상 생성하지 못하도록 해야 한다. -> private 생성자를 사용해 외부에서 new 키워드를 사용하지 못하도록 해야 함

 

public class SingletonService {

    private static final SingletonService instance = new SingletonService();

    public static SingletonService getInstance() {
        return instance;
    }

    private SingletonService() {
    }

    public void test() {
        // 필요한 함수 구현
    }
}

1) static 영역에 객체 인스턴스를 미리 하나 생성한다.

2) getInstance()를 사용해서 인스턴스를 반환한다.

3) private으로 막아서 new 키워드로 인스턴스를 생성하는 것을 막는다.

 

 

싱글톤 컨테이너

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

스프링 컨테이너 덕분에 이미 만들어진 객체를 공유해서 효율적으로 재사용할 수 있다.

 

* 스프링의 기본 빈 등록 방식은 싱글톤이지만 싱글톤만 지원하는 것은 아님

* 여러 클라이언트가 같은 객체 인스턴스를 공유하기 때문에 무상태(stateless)로 설계해야 함

 

 

어노테이션 @Bean, @Configuration, @Component

@Bean, @Configuration

수동으로 스프링 컨테이너에 빈을 등록하는 방법

@Bean만 사용해도 스프링 빈으로 등록되지만 싱글톤을 보장하지는 않음 (@Configuration를 같이 쓰자)

스프링 설정에는 @Configuration 사용하면 됨

 

@Component

자동으로 스프링 컨테이너에 빈을 등록하는 방법

스프링의 컴포넌트 스캔기능이 @Component가 있는 클래스를 자동으로 찾아서 빈으로 등록

대부분 @Component를 사용하는 것이 좋음

하위 어노테이션으로 @Configuration, @Controller, @Service, @Repository가 있음