You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
싱글톤 컨테이너
웹 애플리케이션과 싱글톤
스프링 없는 순수한 DI 컨테이너 테스트
싱글톤 패턴
Code
getInstance()메서드를 통해서만 조회할 수 있다. 이 메서드를 호출하면 항상 같은 인스턴스를 반환한다.같은 객체인것을 확인 할수 있다.
private으로 new 키워드를 막아두었다.
호출할 때 마다 같은 객체 인스턴스를 반환하는 것을 확인할 수 있다.
여기서는 객체를 미리 생성해두는 가장 단순하고 안전한 방법을 선택했다.
싱글톤 패턴을 적용하면 고객의 요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율 적으로 사용할 수 있다
싱글톤 패턴 문제점
싱글톤 컨테이너
싱글톤 컨테이너
스프링 컨테이너를 사용하는 테스트 코드
싱글톤 컨테이너 적용 후
싱글톤 방식의 주의점
상테를 유지할 경우 발생하는 문제점 예시
StatefulService의price필드는 공유되는 필드인데, 특정 클라이언트가 값을 변경한다.@configuration과 싱글톤
memberService에서memberRepository()호출한다. →return new MemoryMemberRepository();호출한다.orderService에서memberRepository()호출한다. →return new MemoryMemberRepository();호출한다.MemoryMemberRepository()두 번 호출 하면서 각각 다른 인스턴스가 생성되며 싱글톤이 깨는 것 처럼 보인다.검증 코드 추가
테스트 코드 추가
@configuration과 바이트코드 조작의 마법
@Configuration을 적용한AppConfig에 있다.AppConfig@CGLIB 예상 코드
@Configuration을 적용하지 않고,@Bean만 적용하면 어떻게 될까?memberRepository()를 호출하면서 발생한 코드이다.인스터스가 같은지 테스트 결과
정리
@Bean만 사용해도 스프링 빈으로 등록되지만, 싱글톤을 보장하지 않는다.memberRepository()처럼 의존관계 주입이 필요해서 메서드를 직접 호출할 때 싱글톤을 보장하지 않는다.@Configuration을 사용하자.All reactions