전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우가 있습니다.
단 하나만 생성된다고 해서 이 객체를 싱글톤(Singleton)이라 합니다. 싱글톤을 만들려면 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 합니다. (생성자를 호출한 만큼 객체가 생성되므로)
생성자를 외부에서 호출할 수 없도록 하려면 생성자 앞에 private 접근 제한자를 붙여주면 됩니다.
예시)
[싱글톤을 만드는 코드]
public class 클래스 {
//정적 필드
private static 클래스 singleton = new 클래스();
//생성자
private 클래스() {}
//정적 메소드
static 클래스 getInstance() {
return singleton;
}
}
(싱글톤 객체는 힙(heap)영역에 들어있습니다.)
==> 외부에서 객체를 얻는 유일한 방법은 getInstance() 메소드를 호출하는 방법입니다
getInstance() 메소드는 단 하나의 객체만 리턴하기 때문에 아래 코드에서 변수1과 변수2는 동일한 객체를 참조합니다.
ex)
클래스 변수1 = 클래스.getInstance();
클래스 변수2 = 클래스.getInstance();
ex) [Singleton.java]
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() { }
static Singleton getInstance() {
return singleton;
}
}
[SingletonExample.java]
public class SingletonExample {
public static void main(String[] args) {
/*
Singleton obj1 = new Singleton(); //컴파일 에러
*/
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if(obj1 == obj2) {
System.out.println("같은 Singleton객체입니다.");
} else {
System.out.println("다른 Singleton객체입니다.");
}
}
}
[결과]
==> 같은 Singleton객체입니다.
'Programming > JAVA' 카테고리의 다른 글
Java - (12) 접근 제한자 (public, protected, default, private) (0) | 2016.05.15 |
---|---|
Java - (11) final 필드와 상수 (0) | 2016.05.15 |
Java - (9) 정적 멤버와 static (0) | 2016.05.15 |
Java - (8) 메소드 (Method) (0) | 2016.05.15 |
Java - (7) 생성자 오버로딩(Overloading) (0) | 2016.05.04 |
WRITTEN BY