Singleton Pattern


Singleton Pattern


JAVA언어를 배우면서 가장 많이, 흔하게 접하는 패턴이다. 인스턴스가 하나만 생성되길 원하는 Class에 적용하여 불필요하게 많은 인스턴스가 생가니는 것을 방지하는 방법이다. 최근에는 각종 FWK에서 Singleton으로 객체 라이프 사이클을 관리해주어 일반 업무개발자가 직접 구현하는 경우는 드물지만 java 기본 패키지에 있는 다양한 util클래스 역시 singleton pattern으로 구현되었을 만큼 가장 많이 사용되고 쓰이는 패턴이기 때문에 반드시 공부해야 두어야 하는 패턴이다.


용도

  • Instance가 한 개만 생성되도록 강제할 때


사용방법

  • Class 정의시 static 변수로 자기 자신을 갖는다.
  • static 초기화 구문이나 static 변수 선언 시 인스턴스를 생성한다.
  • private로 생성자를 지정하여 외부에서 new 키워드로 Instance생성을 막는다.
  • 외부에서 접근 할 수 있도록 public getInstance() 메소드로 instance를 리턴해준다.

static 키워드가 붙은 맴버변수는 특정 인스턴스가 생성되면서 함께 생성되는게 아니라, 여러 인스턴스가 공유하는 단 하나의 변수가 된다. 즉, 인스턴스를 아무리 많이 만들어도 static 변수는 Class마다 한 개 만 생성된다. Singletone Pattern구현 시 Class 자기 자신을 static으로 지정 함으로 Instance가 하나만 생기도록 한다.






Example

[SingletonClass.java]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.design.singleton;
 
public class SingletonClass {
    
    // static으로 지정된 변수는  Class가 로딩되는 시점에 메모리를 할당 받는다.
    private static SingletonClass instance = new SingletonClass();
    
    // 생성자를 priavte 로 지정하여 외부에서 new 키워드로 생성되는 것을 방지
    private SingletonClass(){
        System.out.println("singleton 생성");
    }
    
    public static SingletonClass getInstance() {
        return instance;
    }
    
}
cs



[MainApplication.java]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.design;
 
import com.design.singleton.SingletonClass;
 
public class MainApplication {
 
    public static void main(String[] args) {
 
        SingletonClass single1 = SingletonClass.getInstance();
        SingletonClass single2 = SingletonClass.getInstance();
        System.out.println(single1 == single2);
        
    }
}
cs

 


수행결과

true



다운로드


SingletonExample.zip


'프로그래밍 > Design Pattern' 카테고리의 다른 글

Factory Pattern  (0) 2015.12.29

이 글을 공유하기

댓글

Email by JB FACTORY