복습

싱글톤 컨테이너 - 싱글톤 패턴 본문

Spring뿌시기/3주차 - 스프링 핵심 원리 기본편 2

싱글톤 컨테이너 - 싱글톤 패턴

ykm1256 2022. 10. 24. 20:42

웹 애플리케이션과 싱글톤

  • 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생
  • 대부분의 스프링 애플리케이션은 웹 애플리케이션(다른 애플리케이션도 개발 가능)

  • 위 그림처럼 웹 애플리케이션은 특성상 여러 고객이 동시에 요청을 한다.
  • 그런데 우리가 앞서 구현한 AppConfig는 요청을 할 때 마다 객체를 계속해서 새로 생성
  • 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성되고 소멸된다. -> 메모리 낭비가 심하다.
  • 이를 해결하기 위해서는 객체를 1개만 생성하여, 공유하도록 설계하면 된다. -> 싱글톤 패턴

 

싱글톤 패턴

  • 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴
  • 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야한다.
  • -> private 생성자를 사용하여 외부에서 임의로 객체를 생성하지 못하도록 막아야 함

 

싱글톤 패턴 구현

// 객체를 딱 1개만 생성하여 사용
private static final SingletonService instance = new SingletonService();

// 인스턴스 반환 메서드
public static SingletonService getInstance() {
	return instance;
}

// 생성자를 private로 지정
private SingletonService() {
}
  • 위처럼 static 영역에 객체를 미리 생성해둔다.
  • 이 객체 인스턴스를 외부에서 사용하기 위해 getInstance() 메서드를 만들어 조회하도록 한다.
  • 이때, 이 메서드는 미리 생성해둔 인스턴스를 반환 하므로, 항상 같은 인스턴스를 반환
  • 외부에서 다른 객체를 생성하지 못하게 해야하므로, 생성자를 private으로 지정
싱글톤 패턴을 구현하는 방법에는 여러 가지가 있지만, 여기서는 객체를 미리 생성해두는 가장 단순하고 안전한 방법을 사용했다.

 

싱글톤 패턴 문제점

  • 싱글톤 패턴을 사용하면 하나의 객체를 공유하기 때문에 효율적이지만 여러 문제점이있다.
  • 싱글톤 패턴을 구현하기 위한 코드 자체가 많이 필요
  • 의존관계상 클라이언트가 구체 클래스에 의존한다.(DIP 위반)
  • 클라리언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다.
  • 테스트가 어렵다.
  • 내부 속성을 변경하거나 초기화 하기 어렵다.
  • private 생성자로 자식 클래스를 만들기 어렵다.
  • 유연성이 떨어진다.
  • 안티패턴으로 불리기도 한다.

 

 

 

 


출처

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com