- 하나의 객체만 생성해서 사용하고 싶다면 싱글톤 패턴 적용!
- 싱글톤 핵심: 생성자를 private접근 제한해서 외부에서 new 연산자로 생성자를 호출할 수 없도록 막는 것이다.
private 클래스() {}
- 생성자를 호출할 수 없으니 외부에서 마음대로 객체를 생성하는 것이 불가능해지고, 싱글톤 패턴이 제공하는 static 메소드를 통해 간접적으로 객체를 얻을 수 있다. ( static은 인스턴스가 없어도 되니까..!)
public class 클래스{
// private 접근 권한을 갖는 정적 필드 선언, 초기화
// 자신의 타입으로 정적 필드를 선언하고, 미리 객체를 생성해서 초기화시킨다.
// 그리고 private접근 제한자를 붙여 외부에서 정적 필드값을 변경하지 못하도록 막는다.
private static 클래스 Singleton = new 클래스();
// private 접근 권한을 갖는 생성자 선언
private 클래스(){
}
// public 접근 권한을 갖는 static 메서드 선언
// 정적 필드값을 리턴하는 getinstance 정적 메소드를 public으로 선언
public static 클래스 getInstance(){
return singleton;
}
}
외부에서 객체를 얻는 유일한 방법은 getInstacne를 호출하는 것이다. 이 메소드가 리턴하는 객체는 정적 필드가 참조하는 싱글톤 객체이다.
클래스 변수1 = 클래스.getInstacne();
클래스 변수2 = 클래스.getInstacne();
변수1과 변수2가 참조하는 객체는 동일한 객체가 된다.
싱글톤 실행 클래스
public class SingletonExample{
public static void main(String[] args){
// Singleton1 obj1 = new Singleton(); 객체 생성 불가 컴파일 에러
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if(obj1 == obj2){
System.out.println("같은 싱글톤 객체입니다.");
} else {
System.out.println("다른 싱글톤 객체입니다.");
}
}
}
> 같은 싱글톤 객체입니다.