singleton 패턴
어떤 클래스의 인스턴스가 반드시 1개만 존재하도록 하고싶을때
인스턴스가 1개밖에 존재하지 않을 것을 프로그램 상에서 표현하고 싶을 때
이 패턴을 씁니다.
코드를 보면서 분석해봅시다.
public class Singleton {
//클래스변수를 만들어서 딱 하나만 만들게 됩니다.
private static Singleton singleton = new Singleton();
//아래와같이 생성자가 private로 두어서 메인에서 생성할 수 없게 합니다.
private Singleton(){
System.out.println("인스턴스를 생성했습니다.");
}
//클래스 메소드로 딱 하나 만든 클래스변수를 반환하게 합니다.
public static Singleton getInstance(){
return singleton;
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Start.");
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if(obj1 == obj2){
System.out.println("obj1과 obj2는 같은 인스턴스 입니다");
}
else{
System.out.println("obj1과 obj2는 다른 인스턴스입니다.");
}
System.out.println("End");
}
}
결국 인스턴스는 하나만 만들어졌음을 알 수 있습니다.
public class Singleton{
private static Singleton singleton = null;
private static Singleton(){
System.out.println("인스턴스를 생성했습니다.");
}
//아래서 synchronized를 붙이는 이유는 한 쓰레드에 종속시키기 위해서이다.
//만약에 여러 쓰레드가 거의 동시에 Singleton 인스턴스를 만들경우 첫 if문에서 여러개가 null일 수도 있다.
//그러면 여러개의 인스턴스가 만들어지고 우리가 원하는 하나의 인스턴스를 생성하지 못한다
//그래서 synchronized를 붙여서 한 쓰레드가 실행하면 다른쓰레드가 접근을 못하게 해서 한 인스턴스가 만들어 지게 해야한다.
public static synchronized Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
'프로그래밍 > 자바 디자인패턴' 카테고리의 다른 글
디자인패턴 Observer 패턴 (0) | 2012.08.10 |
---|---|
디자인패턴 Mediator 패턴 (0) | 2012.08.09 |
디자인패턴 Facade 패턴 (0) | 2012.08.06 |
디자인 패턴 ProtoType패턴 (0) | 2012.08.03 |
디자인 패턴 Factory Method 패턴 (0) | 2012.08.03 |
디자인 패턴 Template Method 패턴 (0) | 2012.08.03 |
디자인 패턴 위임에 의한 Adapter 패턴(인스턴스를 이용한) (0) | 2012.08.03 |
디자인 패턴 Adapter패턴 상속을 사용한 Adapter패턴 (0) | 2012.08.03 |