[디자인 패턴] 요구에 의한 초기화 홀더 패턴
Initialization on demand holder
이건 좀 자바(JVM)에 의존적인 구현 패턴 중 하나다.
다른 언어들에선 작동하지 않을 수 있다.
싱글톤 패턴을 변형한 패턴으로,
싱글톤이 필요하긴 한데, 생성을 좀 뒤로 미뤄두고 싶을 때 사용한다.
기본적으로 싱글톤의 구현은 그냥 내부적으로 static 객체를 하나 두는 식으로 이루어진다.
static 필드는 당연히 프로그램의 시작과 동시에 할당과 초기화가 수행된돠. 만약 타입의 생성이 좀 무겁다면 프로그램 로딩 시에 성능적 부담을 줄 수 있다.
이 패턴은 이럴 때 사용하는 것으로, 싱글톤 타입 내에 static 클래스를 하나 두고, 그 안의 static 필드에 싱글톤 객체를 숨겨두는 식으로 구현한다.
이렇게 해두면

자바 가상머신은 getObject 메소드로 인해 LazyHolder가 참조될때서야, 내부 정적 필드의 초기화를 수행한다.
참조
https://en.m.wikipedia.org/wiki/Initialization-on-demand_holder_idiom