우리는 보통 new 명령어를 통해 인스턴스를 생성해서 사용합니다. new 를통해 IDCard 클래스를 10번 호출하면 10개의 IDCard 인스턴스가 생기는 것이죠.
그런데 클래스의 인스턴스가 단 하나만 필요한 경우가 있습니다. 시스템안에서 하나의 인스턴스만 생성되서 사용되야하는 클래스들인데
예를 들면 회사내의 공공재로 사용하는 프린터나 컴퓨터등이 그렇습니다. 우리가 원한다고 마음대로 new를 통해 생성할수도 없습니다.
물론, 조심해서 new를 한 번만 사용해서 1개의 인스턴스만 사용하겠다고 할 수도 있지만, 이것은 결코 지정한 클래스가 '절대로' 1개 밖에 존재하지 않는 것을 '보증' 할 수 없습니다. 이처럼 인스턴스가 한 개밖에 존재하지 않는 것을 보증하는 패턴을 Singletone pattern 이라 합니다.
왜 제한할 필요가 있는가?
⇒ 제한을 한다는 것은 전제가 되는 조건을 늘린다는 의미입니다. 복수의 인스턴스가 존재하면 서로가 영향을 미치고, 사이드 이펙트가 발생할 가능성이 있습니다. 하지만, 인스턴스가 1개밖에 없다라는 보증이 있으면 그 전제조건 아래에서 프로그래밍 할 수 있습니다.
언제 생성되는가?
⇒ 실행결과를 보면 created Singleton 이라는 메세지가 start 이후 출력되었습니다. 이를 통해 프로그램 실행 후 최초로 getInstance 메소드가 호출될 때 Singleton 클래스가 초기화 되고 static 필드의 초기화도 이뤄지면서 유일한 인스턴스가 만들어진다는 것을 확인할 수 있습니다.