[스프링 핵심 원리 - 기본편] 싱글톤 컨테이너

dh·2023년 3월 20일
0
post-thumbnail

이전에 만들었던 순수한 자바 AppConfig는 요청할 때 마다 객체를 새로 생성한다.
고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다 -> 메모리 낭비가 심하다
이 문제를 싱글톤 패턴을 사용하면 해결할 수 있다.

싱글톤 패턴

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

public class SingletonService {

    // 1. static 영역에 객체를 딱 1개만 생성
    private static final SingletonService instance = new SingletonService();

    //2. public으로 열어서 객체 인스턴스가 필요하면 이 static 메서드를 통해서만 조회하도록 허용
    public static SingletonService getInstance(){
        return instance;
    }

    //3. 생성자를 private로 선언해서 외부에서 new 키워드를 사용한 객체 생성을 막는다.
    private SingletonService(){
    }
    
    public void logic(){
        System.out.println("싱글톤 객체 로직 호출");
    }
 
}

싱글톤 컨테이너

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

AppConfig

@Configuration
public class AppConfig {

    //MemberService 역할
    @Bean
    public MemberService memberService(){
        return new MemberServiceImpl(memberRepository());
    }
    //MemberRepository 역할
    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
    //OrderService 역할
    @Bean
    public OrderService orderService(){
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }
    // DiscountPolicy 역할
    @Bean
    public DiscountPolicy discountPolicy(){
        // AppConfig에서 RateDiscountPolicy로만 교체하면 됨
        return new RateDiscountPolicy();
    }
}

AppConfig@Configuration어노테이션이 스프링 빈의 싱글톤을 보장해준다.

출처 김영한 스프링 핵심 원리 - 기본편

0개의 댓글