객제의 인스턴스가 오직 하나만 생성되는 패턴으로 아래와 같이 구현할 수 있음
=================================================================================================================
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
// 생성자는 외부에서 호출못하게 private 으로 지정해야 한다.
}
public static Singleton getInstance() {
return instance;
}
public void say() {
System.out.println("hi, there");
}
}
=================================================================================================================
Singleton.getInstance() 를 호출할때 객체가 생성되고 더이상은 해당 객체를 생성하지 않고
기존의객체만을 가져다 사용함
아래의 방식으로 직접 생성한 객체에 접근할수도 있음
다만 AccessibleObject.setAccessible 를 사용해서 private 생성자를 호출할 수 잇으므로, 예외처리를 만들어 줘야함
=================================================================================================================
public class Singleton{
public static Singleton instance = new Singleton();
private Singleton(){
// 생성자는 외부에서 호출못하게 private 으로 지정해야 한다.
}
public void say() {
System.out.println("hi, there");
}
}
=================================================================================================================
public 방식과 비슷하지만, 더 간결하고 추가적인 노력없이 직렬화 할수 있음
조금 부자연스러워보여도 원소가 하나뿐인 열거 타입이 싱글턴을 만드는 가장 좋은 방법임
=================================================================================================================
public enum Singleton{
INSTANCE;
public void say() {
System.out.println("hi, there");
}
}
//호출은 아래와 같이 사용
##################################################################################################################
public class EnumMain {
public static void main(String[]args){
Singleton singleton = Singleton.INSTANCE;
singleton.say();
}
}
=================================================================================================================