싱글톤 패턴
보통의 클래스 생성자의 경우
생성자가 public 이며,
객체를 할당할때 new 로 인스턴스를 생성한다.
하지만 싱글톤의 경우 클래스 내부에
private SingletonClass() {
// 생성자
}
와 같은 형식으로 private 생성자를 만든다. 때문에 new 로 객체를 생성할수가 없음..
싱글톤은 클래스가 로딩될때 최초 1회 할당된 객체를 계속해서 재사용하는 목적으로 사용.
(인스턴스를 사용할때 생성하는게 아님, 1회 할당하고 계속 재사용)
같은 객체를 여러번 사용하는것이 아닌, 1번 생성해서 계속 사용하기 때문에 메모리 절감 효과가 있다.
전역적인 데이터 공유가 가능해진다.
단점으로는 멀티 쓰레드 환경에서 동시 접근에 대한 문제가 생길수있어서, 이에대한 조치가 필요하다.
자바에서는 synchronized 키워드로 쓰레드세이프하게 코딩할 수 있지만, 성능적인 문제가 발생함..
자바에서의 간단한 구현 코드-->
public class SingletonClass {
private static SingletonClass Instance = new SingletonClass();
private SingletonClass() {}
public static Singleton getInstance() {
if(Instance==null) {
instance = new SingletonClass();
}
return Instance;
}
}
ex) 자바에서 메인클래스에서 위 객체를 생성하려면
public static void main(String[] args) {
// SingletonClass single = new SingletonClass();
// -> 생성자가 private 이기 때문에 생성안됨
SingletonClass single = SingletonClass.getInstance();
// 이런식으로 getInstance() 를 호출하여 객체를 생성해야하고 생성하면 단 1개만 생성함..
}
SingletonClass single1 = SingletonClass.getInstance();
SingletonClass single2 = SingletonClass.getInstance();
SingletonClass single3 = SingletonClass.getInstance();
여러번 만들어도 동일한 인스턴스다.