싱글톤 패턴
정의
- 어떤 클래스에서 만들수있는 인스턴수 수를 하나로 제한하는 디자인 패턴
- 다음 조건을 충족하는 개체에 적합
- 프로그램 실행중 최대 하나만 있어야함
- 이 개체에 전역적으로 접근 가능
- 프로그램 설정, 파일 시스템과 같은 하나만 있어야하는 것들
클래스 다이어그램
- private 생성자
- static 메서드를 통해서만 객체를 얻어올수있다.
코드
public class Singleton {
private static Singleton instance;
private Singleton(){
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- 멤버 변수로 instance 있다.
- static이고 singleton의 객체이다.
- 생성자가 private 이므로 외부에서 new 키워드로 생성할 수 없다.
- 즉 이 클래스로 객체를 하나만 만들 수 있다.
- getInstance()로 객체를 반환 받을 수 있다. 항상 같은 인스턴스를 반환한다.
Static 과 비교
static과 유사해보이지만 다른점이 있다.
static으로 못하는일
- 다형성 사용 못한다.
- 객체의 생성 시점을 제어할수없다.
싱글턴 초기화 순서 보장
- static과 달리 싱글턴은 초기화의 순서를 보장할수있다.
- A B C 가 있을경우 만약 B C A 순으로 초기화가 되어야하는 api 조건이 있을경우 순서대로 호출하면 된다.
B.getInstance();
C.getInstance();
A.getInstance();