이번 시간에는 @Configuration의 비밀에 대해서 파헤쳐보는 시간을 가졌다.
@Configuration은 사실 싱글톤을 위해서 존재한다.
먼저 AppConfig 코드를 살펴보자.
memberService 빈을 만드는 코드를 보면 memberRepository() 를 호출한다.
이 메소드를 호출하면 new MemoryMemberRepository() 를 호출한다.
orderService 빈을 만드는 코드도 동일하게 memberRepository() 를 호출한다.
이 메소드를 호출하면 new MemoryMemberRepository() 를 호출한다.
결과적으로 각각 다른 2개의 MemoryMemberRepository 가 생성되면서 싱글톤이 깨지는 것처럼 보인다.
스프링 컨테이너는 이 문제를 어떻게 해결할까?
테스트 해보기 위해서, MemberServiceImpl 클래스에서 memberRepository를 꺼내는 코드를 22번째줄에 작성한다.
마찬가지로 OrderServiceImpl 클래스에도 27번째 줄에 memberRepository를 꺼내는 코드를 작성한다.
@Configuration 에 대해서 테스트를 하기 위한 테스트 클래스를 생성한다.
테스트를 해보면 모두 같은 객체가 조회되고 있는것을 확인할 수 있다.
memberRepository 인스턴스는 모두 같은 인스턴스가 공유되고 있다는 것이다.
하지만 AppConfig의 코드를 보면 new MemorymemberRepository 호출해서 다른 인스턴스가 생성되어야 한다고 생각할 수 있다.
하지만 스프링 컨테이너 내부에서 객체는 한번만 호출하도록 해주는데, 자세한 내용은 다음 강의에 이어서!
'개발자 공부 - 인프런 온라인 강의 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
[섹션 6. 컴포넌트 스캔] 필터 / 인프런 김영한 스프링 핵심 원리 기본편 (0) | 2023.05.28 |
---|---|
[섹션 6. 컴포넌트 스캔] 탐색 위치와 기본 스캔 대상 (+ Component 역할) / 인프런 김영한 스프링 핵심 원리 기본편 (0) | 2023.05.27 |
[섹션 6. 컴포넌트 스캔] 컴포넌트 스캔과 의존관계 자동 주입 시작하기 / 인프런 김영한 스프링 핵심 원리 기본편 (0) | 2023.05.21 |
[섹션 5. 싱글톤 컨테이너] @Configuration과 바이트코드 조작의 마법 / 인프런 김영한 스프링 핵심 원리 기본편 (0) | 2023.05.01 |
[섹션 5. 싱글톤 컨테이너] 싱글톤 방식의 주의점 / 인프런 김영한 스프링 핵심 원리 기본편 (0) | 2023.04.23 |
[섹션 5. 싱글톤 컨테이너] 싱글톤 컨테이너 / 인프런 김영한 스프링 핵심 원리 기본편 (0) | 2023.04.22 |
[섹션 5. 싱글톤 컨테이너] 싱글톤 패턴 / 인프런 김영한 스프링 핵심 원리 기본편 (0) | 2023.04.16 |
[섹션 5. 싱글톤 컨테이너] 웹 애플리케이션과 싱글톤 / 인프런 김영한 스프링 핵심 원리 기본편 (0) | 2023.04.15 |
댓글