개발자 공부 - 인프런 온라인 강의/스프링 핵심 원리 - 기본편

[섹션 5. 싱글톤 컨테이너] @Configuration과 싱글톤 / 인프런 김영한 스프링 핵심 원리 기본편

easpop 2023. 4. 23. 21:07
728x90
반응형

이번 시간에는 @Configuration의 비밀에 대해서 파헤쳐보는 시간을 가졌다.

 

@Configuration은 사실 싱글톤을 위해서 존재한다.

 

먼저 AppConfig 코드를 살펴보자.

memberService 빈을 만드는 코드를 보면 memberRepository() 를 호출한다.

이 메소드를 호출하면 new MemoryMemberRepository() 를 호출한다.

 

orderService 빈을 만드는 코드도 동일하게  memberRepository() 를 호출한다.

이 메소드를 호출하면 new MemoryMemberRepository() 를 호출한다.

 

결과적으로 각각 다른 2개의 MemoryMemberRepository 가 생성되면서 싱글톤이 깨지는 것처럼 보인다.

스프링 컨테이너는 이 문제를 어떻게 해결할까?

 

테스트 해보기 위해서, MemberServiceImpl 클래스에서 memberRepository를 꺼내는 코드를 22번째줄에 작성한다.

반응형

마찬가지로 OrderServiceImpl 클래스에도 27번째 줄에 memberRepository를 꺼내는 코드를 작성한다.

 

@Configuration 에 대해서 테스트를 하기 위한 테스트 클래스를 생성한다.

 

테스트를 해보면 모두 같은 객체가 조회되고 있는것을 확인할 수 있다.

memberRepository 인스턴스는 모두 같은 인스턴스가 공유되고 있다는 것이다.

하지만 AppConfig의 코드를 보면 new MemorymemberRepository 호출해서 다른 인스턴스가 생성되어야 한다고 생각할 수 있다.

하지만 스프링 컨테이너 내부에서 객체는 한번만 호출하도록 해주는데, 자세한 내용은 다음 강의에 이어서!

728x90
반응형