목차
- 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