싱글톤 패턴.





많이들 들어봤을 초반에 배우는 디자인 패턴중 하나다.

내가 다녔던 굽,비에서도


===


public class ExampleSingleton {


    private static ExampleSingleton instance;


    private ExampleSingleton() {}


    public static ExampleSingleton getInstance() {

        if (instance == null) {

            instance = new ExampleSingleton();

        }

        return instance;

    }

}


===


이런식으로 배웠었다.

스태틱 변수로 인스턴스를 만들고 생성자를 폐쇄해서 인스턴스에 다른 곳에서 직접 접근 불가능하게 만들어라.

진입점은 단일 진입점인 퍼블릭 스태틱 메서드를 통해 접근하여 인스턴스가 없으면 반환 시키게끔 한다.


하지만 이런 생각의 전환도 가능하다.

싱글톤은 Caller가 달라도 언제나 동등한 객체를 반환하면 되지 않을까?


위 기본적인 코드가 지니는 문제점은 무수히 많다.

한 번 생각 해보자.


1. 멀티스레딩 환경에서 프로세스의 힙을 공유하는 T1, T2...Tn이 동시에 접근하여 해당 인스턴스 접근시 경쟁한다면 반환받은 객체의 동등성을 보장할수 있는가?

2. 싱글턴 인스턴스에 상태를 두면 어떤 상황이 발생하는가? 

3. 스프링 프레임워크에서 빈은 싱글톤으로 반환된다고 하는데 상단 코드와 비슷한 방식으로 반환하는가?

4. 그렇지 않다면 어떠한 방법으로 스프링 프레임워크는 싱글톤 패턴을 사용하여 스프링 빈 객체를 반환하는가.


위 4가지의 고민을 통해서 생각의 지평을 넓혀보자.


기본적인 부분도 은근히 생각할 지점이 많아진다.

화이팅이다 모두.