1. 싱글톤 패턴(Singleton Pattern)
- 어떤 클래스의 객체는 오직 하나임을 보장 → 전역의 개념으로 객체 사용
- 객체의 생성을 제한하기 위해 사용
public class Singleton {
// 싱글턴 패턴 - 객체를 1개만 만들어 유지하기 위한 디자인 패턴
// 1. 외부에서 생성자를 사용할 수 없도록 생성자에 private을 붙임
private Singleton() {}
// 2. 자신의 클래스 내부에서 스스로의 객체 1개 생성
// 이때 멤버변수는 힙에 할당된 객체 없이 쓸 수 있도록 static
private static Singleton instance;
static {
instance = new Singleton();
}
// 3. 외부에서 이 클래스의 객체를 필요로 하는 경우
// 2번에서 static으로 생성된 객체의 주소를 return
public static Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
private 접근 제한자는 외부에서 접근할 수 없어 원래는 new 키워드를 이용한 객체 생성이 불가능하다.
이 때 위와 같이 static 키워드를 이용하여 singleton 타입의 객체를 생성할 수 있다.
public class MainClass {
public static void main(String[] args) {
// Singleton 객체는 생성자가 private이므로 인스턴스 생성 불가
// new 키워드로 객체 생성 및 조회가 불가능
// Singleton s1 = new Singleton();
Singleton s1 = Singleton.getInstance();
System.out.println("s1의 레퍼런스 : " + s1);
Singleton s2 = Singleton.getInstance();
System.out.println("s2의 레퍼런스 : " + s2);
}
}
위와 같이 Singleton 타입을 이용하여 객체를 생성할 수 있고, s1과 s2 모두 같은 주소를 참조하고 있는 것을 확인할 수 있다.
위와 같이 단 하나의 객체만을 생성해야 할 필요가 있을 때 Singleton 패턴을 이용한다.