싱글턴 패턴은 특정 클래스에 객체 인스턴스가 하나만 만들어지도록 해 주는 패턴
싱글턴 패턴을 사용하면 전역 변수를 사용할 때와 마찬가지로 객체 인스턴스를 어디서든지 액세스 할 수 있게 만들 수 있으며 ,전역 변수를 쓸 때처럼 여러 단점을 감수할 필요도 없음
전역 변수를 쓰면 안되나요? → 전역 변수에 객체를 대입하면 애플리케이션이 시작될 때 객체가 생성됨. 객체가 자원을 많이 차지할 때 객체를 한 번도 쓰지 않는다면 자원만 잡아먹는 쓸데없는 객체가 되고 만다. 그러나 싱글턴 패턴을 사용하면 필요할 때만 객체를 만들 수 있음
정적 클래스 변수와 메소드를 잘 처리할 수 있고 접근 변경자도 잘 다룰 줄 안다면 어렵지 않음!
public class Singleton {
private static Singleton uniqueInstance;
// 기타 인스턴스 변수
private Singleton() {}
public static Singleton getInstance() {
if(uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
// 기타 메소드
}
생성자는 private으로 선언했으므로 singleton에서만 클래스의 인스턴스를 만들 수 있음
getInstance() 메소드는 클래스의 인스턴스를 만들어서 리턴함
Singleton도 보통 클래스이고, 여기에도 다른 인스턴스 변수나 메소드가 있을 수 있음
코드에 몇 가지 문제점이 있을 수 있음
즉 싱글턴 객체가 필요할 때는 인스턴스를 달라고 요청해야함, 클래스는 그런 용도로 쓰이는 getInstance()라는 정적 메소드가 있고, 메소드를 호출하면 나타남