[디자인 패턴] 싱글톤(Singleton) 패턴
싱글톤 패턴은 가장 단순한 디자인패턴중 하나다.
클래스에 객체가 하나만으로 충분할때, 하나만 필요할때 사용한다.
언어마다 다르지만, 자바의 경우엔 아래와 같이 구현할 수 있다.
private를 걸어서 외부에서의 생성을 막아야 하고, static 필드로 단독객체와 획득 메서드를 구현해주면 된다.


지연 초기화
근데 저건 객체를 사용하지 않을 경우 괜한 메모리 낭비가 될 수도 있다. 그럴때는 게으른(lazy) 초기화를 사용하면 된다.
일단 싱글톤 객체를 비워두고 사용시에 할당하게 하는 것이다.

싱글톤의 기본적인 구현법은 대충 이렇다.
하지만 언어나 기타 특징에 따라 추가된 변종이 좀 있다.
홀더에 의한 지연 초기화 싱글톤(Only Java)
싱글톤 클래스 내에 정적클래스 Holder를 두고, 그 안에 정적으로 싱글톤 객체를 두는 것이다.
이러면 JVM의 특성상 클래스가 로딩될때서야 초기화가 되고, 한번의 초기화가 보장된다고 한다.
클래스의 로딩은 원자적으로 수행되기 때문에 멀티스레드 환경에서의 충돌도 예방할 수 있다..


C++ 등은 싱글톤 구현에 있어서 복잡한 면이 좀 많은 편인데, 이건 나중에 여유 되면 따로 정리해보도록 하겠다.
참조
https://jeong-pro.tistory.com/m/86