본문 바로가기

Spring/Spring

스프링과 싱글톤(Singleton)

싱글톤?

싱글톤에 대해 이해하기 위해서는 먼저 객체의 동일성과 동등성에 대해 알고 있어야 한다.

▼ 이 글을 참고하면 좋다.
tang-co.tistory.com/160

 

싱글톤이란 클래스의 인스턴스를 딱 한 개만 만드는 거다.
객체가 여러 개 있으면 메모리를 많이 잡아먹으니까. 안에 든 값이 똑같은 건 객체 한 개로 공유한단 뜻이다.

스프링은 모든 빈 들을 싱글톤으로 관리한다.
그 이유는 스프링이 사용되는 곳이 대부분 엔터프라이즈급의 서버 환경이기 때문이다.
이용하는 사람도 많고, 요청 횟수도 엄청 많기 때문이다.
사용자가 10번 요청하면 10개의 객체를, 100번 요청하면 100개의 객체를 만들어줘야 한다.

 

그래서 스프링은 각각의 빈들을 싱글톤으로 관리하고 여러 스레드에서 이를 공유해서 사용할 수 있도록 하고 있다.

 

예를 들어보자.

ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");

MemberDao mDao1 = context.getBean("memberDao",MemberDao.class);
MemberDao mDao2 = context.getBean("memberDao",MemberDao.class);

System.out.println(mDao1);
System.out.println(mDao2);
System.out.println(mDao1==mDao2);

 

출력해보면 mDao1와 mDao2는 같은 주소 값을, == 연산자로 비교는 true값을 출력해준다.
두 객체는 동일하다. 즉 설정 파일에서 빈을 가져올 때 객체를 새로 만들지 않는다는 걸 볼 수 있다.

위에서 언급했던 대로 사용자가 100번 요청한다고 100개의 객체를 만들어주는 게 아니라
어차피 100개는 똑같은 객체니까 1개만 만들어서 100명이 공유하도록 하는 것이다.

반응형

'Spring > Spring' 카테고리의 다른 글

spring-boot View 환경 설정  (0) 2021.04.15
spring-boot 프로젝트 생성  (0) 2021.04.14
Gradle(그레이들) 설치하기  (0) 2021.01.10
메이븐(Maven)과 그레이들(gradle)  (0) 2021.01.08
Spring WebSocekt으로 채팅 기능 구현  (0) 2020.12.23