싱글턴 패턴이란

  • 클래스 인스턴스를 하나만 만들고 다른 인스턴스를 만들지 못하게 관리
  • 어디서든 접근할 수 있도록 전역으로 설정

 

언제 유용할까?

자원을 많이 잡아먹는 인스턴스가 있다면 유용

 

고전적인 구현법

public class Singleton {
	private static Singleton unique;

	private Singleton() {
	}

	public static Singleton getInstance() {
		if (unique == null) {
			unique = new Singleton();
		}
		return unique;
	}
}
  • private 접근제어자로 인스턴스 생성을 Singleton 클래에서만 가능하게 한다
  • getInstance() 로 전역변수에 접근을 할 수 있다
  • 위 코드는 멀티 스레드에서 문제가 발생할 확률이 있다

 

싱글턴 패턴의 장점

  • 하나의 인스턴스만 고정하고 사용하기에 메모리 낭비 방지
  • 이미 생성된 인스턴스를 활용하기에 이점 ( 필요한 클래스 로딩 시 생성할 수도 있다)
  • 여러 클래스에서 쉽게 공유하며 사용할 수 있다

 

싱글턴 패턴의 문제점

  • 테스트가 힘들다
  • 멀티 스레드에서 인스턴스가 1개임을 보장하지 못함

 

자바 싱글턴 vs 스프링 싱글턴?

  • 자바 싱글턴은 클래스 로더에 의해 구현되고, 스프링 싱글턴은 스프링 컨테이너에 의해서 구현
  • 자바 싱글턴의 scope는 코드 전체이고, 스프링 싱글턴의 scope는 해당 컨테이너 내부
  • 스프링에 의해 구현된 싱글턴 패턴은 thread-safe를 자동으로 보장
  • 자바싱글턴의 경우 구현하는 개발자의 로직에 따라 다름
복사했습니다!