답변 2
5
싱글톤 패턴(Singleton pattern) 이란 생성자가 여러 차례 호출되더라도 실제로 객체를 단 하나만 생성하는 방법입니다. 즉, 처음 객체를 생성한 이후에 호출될 경우 이미 생성한 객체를 반환하여 하나의 인스턴스만을 사용하게 만드는 것을 말합니다.
@Test
void pureContatiner() {
AppConfig appConfig = new AppConfig();
//1. 호출할 때마다 다른 객체를 생성
MemberService memberService1 = appConfig.memberService();
//2. 호출할 때마다 다른 객체를 생성
MemberService memberService2 = appConfig.memberService();
Assertions.assertThat(memberService1).isNotSameAs(memberService2);
}
기본적으로 'Member member = new Member()'처럼 new 연산자를 이용해 객체를 생성하면 계속해서 객체를 만들어냅니다. 만약 많은 객체를 생성해야 하는 서비스(ex. 배민)를 만들 경우, 이방법을 사용한다면 메모리 낭비가 심해지게 됩니다.
스프링 컨테이너를 예로 들면
@Test
void springContainer() {
AnnotationConfigApplicationContext appConfig = new AnnotationConfigApplicationContext (AppConfig.class);
MemberService memberService1 = appConfig.getBean(MemberService .class);
MemberService memberService2 = appConfig.getBean(MemberService .class);
System.out.println("memberService1 = " + memberService1);
System.out.println("memberService2 = " + memberService2);
Assertions.assertThat(memberService1).isSameAs(memberService2);
}
스프링 컨테이너로 Bean 객체를 호출할 경우 동일한 객체를 불러오는 것을 알 수 있습니다. (참조값 동일)
0
참고: https://velog.io/@jaeeunxo1/spring-singleton