본문 바로가기

Upgrade.배우고익히기

싱글턴Singleton & LazyHolder

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)