일반적으로 하나의 인스턴스만 존재해야 할 경우 Singleton 패턴을 사용하게 된다. 물론 Single Thread
에서 사용되는 경우에는 문제가 되지 않지만 Multi Thread
환경에서 Singleton 객체에 접근 시 초기화 관련하여 문제가 있다.
보통 Singleton 객체를 얻는 static 메서드는 getInstance()
로 작명하는 게 일반적이다.
그렇다면 어떻게 코드를 작성해야 Singleton 객체를 생성하는 로직을 thread-safe
하게 적용할 수 있을까? 정말 단순하게 별로 신경 쓰고 싶지 않다면 메서드에 synchronized
키워드만 추가해도 무방할 것이다.
그렇지만 좋은 개발자가 되기 위해선 효율적인 코드에 대해서 고민을 해 봐야 한다. 메서드에 Singleton 클래스의 getInstance()
메서드에 synchronized
키워드를 추가하는 건 역할에 비해서 동기화 오버헤드가 심하다고 생각한다.
그래서 개발자들 사이에서 Singleton 초기화 관련하여 많은 이디엄들이 연구되었고 몇몇 이디엄들을 소개하려고 한다.