생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.
-위키피디아-
객체를 하나만 생성하고, 생성된 객체를 어디서든 참조가능하게 하여 프로그램 전반에서 하나의 인스턴스만 사용하게 하는 패턴이다.
private
사용 : 생성자를 private
으로 선언하여 외부에서의 호출과 상속이 불가능하게 지정private static Printer printer = new Printer();
와 같이 static 변수에 바로 인스턴트를 만들어서 초기화시킨다.
-> static 변수란? 객체가 생성되기 전 클래스가 메모리에 로딩될 때 만들어져 초기화가 한 번만 실행된다.
프로그램 시작~종료까지 없어지지 않고 메모리에 계속 상주하며 클래스에서 생성된 모든 객체에서 참조할 수 있다.
인스턴스를 만드는 메소드에 synchronized
를 지정하여 해당 메소드를 임계구역으로 지정한다.
-> 다중 스레드 환경에서 여러 스레드가 동시에 접근하는 것을 방지한다.
https://ko.wikipedia.org/wiki/%EC%8B%B1%EA%B8%80%ED%84%B4_%ED%8C%A8%ED%84%B4
https://gmlwjd9405.github.io/2018/07/06/singleton-pattern.html
https://velog.io/@kyle/%EC%9E%90%EB%B0%94-%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4-Singleton-Pattern