ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @Configuration과 싱글톤 패턴
    스프링/스프링 기본이론 2023. 1. 30. 18:52
    @Configuration // Configuration이라고 선언
    public class AppConfig {
    
        @Bean // 스프링 컨테이너에 등록
        public MemberService memberService() {
            return new MemberServiceImpl(memberRepository());
        }
    
        @Bean
        public MemoryMemberRepository memberRepository() {
            return new MemoryMemberRepository();
        }
    
        @Bean
        public OrderService orderService() {
            return new OrderServiceImpl(memberRepository(), discountPolicy());
        }
    
        @Bean
        public DiscountPolicy discountPolicy() {
            return new RateDiscountPolicy();
        }
    }

    AppConfig 클래스에서 관리하는 스프링 컨테이너를 보면 OrderService와 memberService도 new memberRepository를 만들어서 싱글톤 패턴이 깨진다고 생각을 할 수 있다.

     

    각각 다른 2개의 MemoryMemberRepository가 생성되어 싱글톤이 깨지는 것처럼 보일 수 있다는 것이다.

     

     

     

    하지만 @Configuration 어노테이션을 사용하면 계속 새로운 객체를 생성하지 않고, 싱글톤 패턴을 유지할 수 있다.

    public MemberRepository getMemberRepository() {
        return memberRepository;
    }

    MemberSerivce의 구현체와 OrderService의 구현체에 위와 같이 memberRepository를 return 해주는 get 메서드를 생성하고 테스트 코드에 어떠한 객체가 나오는지 실험 해 볼 것이다.

    테스트코드에서 테스트를 실행시킨 결과 memberRepository, memberService, OrderService에서 만든 객체가 모두 같은 주소를 가리키는 것을 확인 할 수 있었다.

    스프링은 @Configuration이라는 애노테이션을 이용해서 싱글톤패턴을 지향한다는 것을 확인할 수 있었다.

     

     

     

     

    스프링 컨테이너가 @Bean이 붙은 메서드마다

    1. memoryMemberRepository가 스프링 컨테이너에 등록되어 있으면

    - 스프링 컨테이너에서 찾아서 반환

     

    2. 스프링 컨테이너에 없으면

    - 기존 로직을 호출해서 MemoryMemberRepository를 생성하고 스프링 컨테이너에 등록

     

    이러한 규칙 덕분에 싱글톤 패턴이 보장되는 것이다.

    '스프링 > 스프링 기본이론' 카테고리의 다른 글

    의존관계 자동 주입  (0) 2023.01.31
    컴포넌트 스캔  (0) 2023.01.30
    스프링을 이용한 싱글톤 패턴  (0) 2023.01.30
    싱글톤 패턴의 개념  (0) 2023.01.28
    의존관계 주입과 스프링 컨테이너  (0) 2023.01.24
Designed by Tistory.