본문 바로가기
개발자 전향 프로젝트

싱글톤이 무엇인가요?

by 샘오리 2022. 10. 20.
객체를 하나만 생성하고 공유하는 효율적인 방법

싱글톤을 사용하는 이유가 무엇인가요?

대규모 트래픽이 발생하는 웹사이트에서는 굉장히 많은 수의 클라이언트 요청(request)이 발생하게 되고

그 요청이 발생할 때 마다 Class 이름 참조변수 = new Class 이름(); 으로 인스턴스화 한 객체가 생성됩니다.

 

즉, 500명이 하나의 요청만 한다 해도 500개의 동일 객체가 생성되었다가

나중에 GC(Garbage Collector)를 통해 지워지는거죠.

 

불필요하고 비효율적입니다.

 

그래서 생각해낸 것이 싱글톤입니다.

 

객체를 하나만 생성하고 그것을 공유함으로써 메모리 부담을 줄이는 방법인데 이게 초반에 설정하기가 좀

많이 번거롭습니다. 하지만 스프링 컨테이너를 이용하면 자동으로 가능합니다.

 

스프링 컨테이너를 이용하는 방법은 다음과 같습니다. 

 

@Configuration
public class AppConfig {

    @Bean
    public 인터페이스 이름 참조변수() {
        return new 구현체(클래스)();
    }
}
//실행 메서드에서 Appconfig 파일을 불러와서 사용하고 싶을 시
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

스프링 컨테이너가 어떻게 싱글톤을 보장하는지는 알 필요도 알 수도 없습니다.

다만 스프링 컨테이너가 있기 전에는 싱글톤을 구현하는게 다소 번거로웠고

DIP를 위반 (구현체에 의존하는 것) 했었는데 스프링 컨테이너의 내부 로직으로 인해 자동으로 해결됐습니다.

 

싱글톤은 싱글