간단하게 말해서 메모리를 한번 할당해서 객체를 만들고
추가적인 메모리 할당으로 인한 객체 생성 없이 그 최초에 한번 만들어진 객체를
계속 재사용하는것을 말한다.
외부에서 생성자에 접근 금지해야한다.
즉 생성자의 접근 제한자를 private으로 설정해야한다.
클래스 내부에서는 private에 접근이 가능하므로 직접 객체를 생성해야한다.
그리고 멤버 변수이므로 private 설정해야 한다.
외부에서 private memeber에 접근이 가능하도록 getter를 생성해준다.
당연히 외부에서 객체를 생성할수 없으니 setter는 불필요하다.
객체 없이 외부에서 접근가능해야하므로 getter와 변수에 static을 추가한다.
따라서 1~4를 하면 외부에서 new를 통한 객체 생성이 불가능하고 getter를 통해서 참조하게 되므로 결과적으로 하나의 객체를 재사용 할 수 있게 된다.
package test; public class Singleton { // 2. private static Singleton single = new Singleton(); // 1. private Singleton() { } // 3, 4 public static Singleton getinstance() { return single; } void play() { System.out.println("싱글톤 패턴입니다."); } }
package test; public class Singletontest { public static void main(String[] args) { Singleton test1 = Singleton.getinstance(); Singleton test2 = Singleton.getinstance(); test1.play(); test2.play(); System.out.println(test1 == test2); } }
싱글톤 패턴입니다.
싱글톤 패턴입니다.
true
Singleton 클래스를 위 방식 대신 이런 방식으로도 사용할 수 있다. 개념은 똑같다.
package test; public class Singleton { private static Singleton single; private Singleton() { } public static Singleton getinstance() { if(single == null) { single = new Singleton(); } return single; } void play() { System.out.println("싱글톤 패턴입니다."); } }