Upgrade.배우고익히기
싱글턴Singleton & LazyHolder
Sogno소뇨
2020. 3. 8. 01:22
1. 싱글턴Singleton
: 전역변수를 사용X / 객체를 단 하나만 생성하도록 함 / 단, 이 객체를(재사용) 어디서든 참조할 수 있도록 함
: 하나의 인스턴스만을 생성 -> getInstance() 메서드로 모든 클라이언트에게 이 인스턴스를 반환
2. 싱글턴 예시
3. 싱글턴의 문제점
: Single Thread에서 사용되는 경우에는 문제가 되지 않지만 Multi Thread환경에서는 인스턴스가 1개 이상 생성되는 경우가 발생할 수 있다(고 한다)
--> 해결방법 중 하나 : LazyHolder
4. LazyHolder
* 원리 : 객체가 필요할 때로 초기화를 미룸(Lazy Initialization)
* 설명 : Singleton 클래스에서 LazyHolder 클래스의 변수가 아직 없으므로 Singleton클래스 로딩으로 LazyHolder 클래스를 초기화 하지 않는다. 이후 Singleton 클래스의 getInstance() 메서드에서 LazyHolder.INSTANCE를 참조하면 class가 로딩되며 초기화가 진행된다.
(참고: https://javaplant.tistory.com/21 / https://link.medium.com/0tjzA2ShF4)