카테고리 없음

[디자인패턴] 싱글톤 패턴

포포015 2022. 11. 9. 16:46

목차

  • 1. 싱글톤 패턴의 기본 개념
  • 2. 단순한 싱글톤 패턴 구현
  • 3. 단순히 구현한 싱글톤 패턴의 문제 및 개선 방안
  • 4. 현재 Java 진영에서 사용되고 있는 Best 방안

1. 싱글톤 패턴의 기본 개념

- 싱글톤 패턴이 필요한경우는, 프로그램 내에서 어떤 객체가 단 1개만 존재해야하고

 프로그램 내부의 여러부분에서 단 1개의 객체를 공유하며 사용할때 필요하다.

- 현실 세계로 예를 든다면, 프린터 라는 자원은 1개이고 여러사람은 이 1개의 프린터를 공유해 사용할때와 같은경우 적용할수있다.

 

2. 단순한 싱글톤 패턴 구현

- private 생성자로 외부에서 객체의 생성을 막으며, getInstance() 메소드로 하나의 동일한 instance만을 제공한다.

 

3. 단순히 구현한 싱글톤 패턴의 문제 및 개선 방안 

- 위의 코드의 경우 Thread-Safe 하지않다. 두개의 Thread가 동시에 getInstance() 메소드를 호출한경우, 

instacne가 null가 동시에 true가 나올경우 두개의 인스턴스를 생성하게 문제가 발생한다.

 

- 스레드 세이프함을 방지하기 위한 방안으로썬 아래의 세가지 방법이 있다.

  • Synchronized : 동시성 문제를 해결해주지만, Synchronzied 를 사용하면 속도저하가 있다는 단점이 있음.

  • Double Check : 동일하게 Synchronzied 를 사용하지만 위와 다르게, null여부를 먼저 확인하고, Lazy하게 null체크를 하기에
                               어느정도 속도저하를 개선할수 있다.

  • LazyHolder : Synchronzied를 사용하지않고 Thread-Safe함을 보장한다.
                            JVM의 클래스 초기화 과정에서 원자성을 보장하는 원리의 방식
                            JVM 자체 특성을 최대한 이끌어내어 성능저하도 방지하는 방식.                          

 

 

 

참조 : https://injae-kim.github.io/dev/2020/08/06/singleton-pattern-usage.html