생성(Creational) 패턴 - Singleton

2007/05/19 12:52
Singleton 패턴은 Creational 패턴들과 같은 그룹에 속하지만, "non-creational" 패턴의 확장적인 면이 있음. 프로그래밍에서 클래스의 인스턴스를 하나만을 갖게 해야 할 경우에 사용.

1. 의도
클래스에서 만들 수 잇는 인스턴스가 오직 하나여야 하고, 이 오브젝트에 대한 접근은 어디에서든지 항상 동일한 방법으로 접근 할 수 잇도록 제공.

2. 고려해야 할 사항
  • 어떤 클래스는 단 하나의 인스턴만 생성되어야 함.
  • 단 하나의 인스턴스는 언제든지 사용할 수 있어야 함.
  • 클래스를 이용해 생성된 하나의 인스턴스는 모든 클라이언트가 쉽게 억세스 할 수 있어야함.
3. 구조
사용자 삽입 이미지

ThreadPool.java (Language : java)
  1. public class ThreadPool {
  2.    private ThreadPool singleInstance;
  3.  
  4.    private ThreadPool() {}
  5.  
  6.    public static TreadPool getInstance() {
  7.       if (singleInstance == null) {
  8.          singleInstance = new ThreadPool();
  9.       }
  10.       return singleInstance;
  11.    }
  12.  
  13.    public Thread getThread() {
  14.       // ...
  15.       return thread;
  16.    }
  17. }

Client.java (Language : java)
  1. public class Client {
  2.    public static void main(String[] args) {
  3.       ThreadPool threadPool = ThreadPool.getInstance();
  4.       Thread t = threadPool.getThread();
  5.    }
  6. }

4. 자바 프로그래밍 언어에서의 사용 예
  • Java API중 java.lang.Runtime 클래스가 Sigleton 클래스를 사용
5. 결론
  • 장점
    클라이언트는 쉽게 싱글 오브젝트 레퍼런스를 얻을 수 있음.
    Singleton은 클래스 로딩 타임 또는 클라이언트가 객체 생성을 요청했을 때 인스턴스를 생성할 수 있음.
    Singleton 클래스의 인스턴스가 하나 이상 존재해야 하는 경우 이 변경작업이 쉬움. 즉, Singleton 클래스의 인스턴스에 접근할 수 있는 허용 범위를 결정하는 오퍼레이션만 변경하면 됨. 왜냐하면 기존에는 하나의 인스턴스로만 접근을 허용했다면, 이제는 여러 개의 인스턴스를 생성해서 그 각각의 인스턴스로 접근 할 수 잇도록 오퍼레이션의 구현을 바꾸면 됨.
  • 단점
    Singleton은 전역변수의 용도록 사용될 수 잇음. 그러나 이 방법은 종종 잘못 적용되는 경우가 많음.
    Singleton은 여러 클라이언트가 동시에 인스턴스를 생성해달라고 요청할 때에도 단 하나의 인스턴스만 생성되도록 제어해야 함.

이올린에 북마크하기

happyness Programming/J2EE Patterns , ,

2007/05/19 12:52 2007/05/19 12:52
Trackback Address:http://blog.htdocs.kr/trackback/14
  1. 싱글톤을 적용하여 웹 프로젝트에서 어떤 작업에 적용 할 수 있는지 궁금한데요
    lsv400@naver.com 부탁 드립니다.

[로그인][오픈아이디란?]