[섹션 5. 싱글톤 컨테이너] @Configuration과 싱글톤 / 인프런 김영한 스프링 핵심 원리 기본편
이번 시간에는 @Configuration의 비밀에 대해서 파헤쳐보는 시간을 가졌다.
@Configuration은 사실 싱글톤을 위해서 존재한다.
먼저 AppConfig 코드를 살펴보자.
memberService 빈을 만드는 코드를 보면 memberRepository() 를 호출한다.
이 메소드를 호출하면 new MemoryMemberRepository() 를 호출한다.
orderService 빈을 만드는 코드도 동일하게 memberRepository() 를 호출한다.
이 메소드를 호출하면 new MemoryMemberRepository() 를 호출한다.
결과적으로 각각 다른 2개의 MemoryMemberRepository 가 생성되면서 싱글톤이 깨지는 것처럼 보인다.
스프링 컨테이너는 이 문제를 어떻게 해결할까?
테스트 해보기 위해서, MemberServiceImpl 클래스에서 memberRepository를 꺼내는 코드를 22번째줄에 작성한다.
마찬가지로 OrderServiceImpl 클래스에도 27번째 줄에 memberRepository를 꺼내는 코드를 작성한다.
@Configuration 에 대해서 테스트를 하기 위한 테스트 클래스를 생성한다.
테스트를 해보면 모두 같은 객체가 조회되고 있는것을 확인할 수 있다.
memberRepository 인스턴스는 모두 같은 인스턴스가 공유되고 있다는 것이다.
하지만 AppConfig의 코드를 보면 new MemorymemberRepository 호출해서 다른 인스턴스가 생성되어야 한다고 생각할 수 있다.
하지만 스프링 컨테이너 내부에서 객체는 한번만 호출하도록 해주는데, 자세한 내용은 다음 강의에 이어서!