All Day Tired

싱글톤, 싱글톤 컨테이너 본문

Back/Spring

싱글톤, 싱글톤 컨테이너

yu.dev 2024. 12. 31. 16:19
싱글톤 등장한 이유
  • 애플리케이션은 여러 사용자의 요청이 동시에 들어옴
  • 여러 사용자가 요청을 할 때마다 객체를 새로 생성한다면 낭비가 심함
  • 그래서 등장한 것이 싱글톤 패턴

 

싱글톤 패턴
  • 클래스의 인스턴스(쉽게 생각하자면 new를 한 것)가 딱 1개만 생성
  • 위 처럼 여러 사용자가 요청을 동시에 할 때 인스턴스를 하나만 생성하고 이걸 공유

 

싱글톤 구현 예제
public class Singleton {
    private static Singleton singletonObject;

    private Singleton() {//private생성자로 new를 못하게 막음
    }
    
    public static Singleton getInstance() {//getInstance()를 통해서만 인스턴스를 가져올 수 있음
        if (singletonObject == null) {
            singletonObject = new Singleton();
        }
        
        return singletonObject;
    }
}

 

그래서 이 싱글톤이 스프링과 어떤 연관이 있나?

싱글톤 컨테이너
  • 스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도 알아서 객체 인스턴스를 싱글톤으로 관리
  • 스프링 컨테이너는 객체를 하나만 생성해서 관리(빈으로 등록한 것들이 하나씩만 있음)
  • 따라서 스프링 컨테이너는 싱글톤 컨테이너 역할을 함

 

싱글톤 주의점
  • 싱글톤 객체는 무상태(sateless)로 설계해야 함
  • ex) 싱글톤 객체를 무상태로 설계하지 않았을 때 발생하는 예시로는 은행 어플에 들어갔는데 내 계좌 잔액이 아닌 다른 사람의 잔액이 보이는 경우 등
  • 인스턴스의 필드가 공유되면 이러한 문제가 발생

 

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

@Configuration(feat.싱글톤)  (0) 2025.01.02
스프링컨테이너, 스프링빈 등록/주입  (0) 2024.12.30
@Scheduler, cron표현식 사용  (0) 2024.10.27
스프링 빈 등록  (0) 2024.09.23
스프링에서 RestTemplate 예제  (0) 2024.08.20
Comments