[디자인 패턴] 싱글톤(Singleton) 패턴

[원본 링크]

싱글톤 패턴은 가장 단순한 디자인패턴중 하나다.

클래스에 객체가 하나만으로 충분할때, 하나만 필요할때 사용한다.

언어마다 다르지만, 자바의 경우엔 아래와 같이 구현할 수 있다.
private를 걸어서 외부에서의 생성을 막아야 하고, static 필드로 단독객체와 획득 메서드를 구현해주면 된다. image

image

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

image 싱글톤의 기본적인 구현법은 대충 이렇다.
하지만 언어나 기타 특징에 따라 추가된 변종이 좀 있다.

홀더에 의한 지연 초기화 싱글톤(Only Java)
싱글톤 클래스 내에 정적클래스 Holder를 두고, 그 안에 정적으로 싱글톤 객체를 두는 것이다.
이러면 JVM의 특성상 클래스가 로딩될때서야 초기화가 되고, 한번의 초기화가 보장된다고 한다.
클래스의 로딩은 원자적으로 수행되기 때문에 멀티스레드 환경에서의 충돌도 예방할 수 있다.. image

image

C++ 등은 싱글톤 구현에 있어서 복잡한 면이 좀 많은 편인데, 이건 나중에 여유 되면 따로 정리해보도록 하겠다.


참조
https://jeong-pro.tistory.com/m/86