2011년 5월 22일 일요일

The Singleton Pattern

3. The Singleton Pattern
Singleton 패턴은 클래스의 생성을 촉진하기 보다 어느 정도까지는 –제한적이라는 성격에도 불구하고- 다른 생성 패턴과 함께 분류된다. 다시 말해서 Singleton패턴은 하나의 클래스에 대하여 단 한 개의 인스턴스만 존재한다는 것을 보증하며, 해당 인스턴스에 대한 전역적인 접근 장소를 제공하여 준다. 개발자가 하나의 클래스에 대하여 단 한 개의 인스턴스만 존재한다는 것을 보장받아야 할 필요가 있는 경우에 사용된다.
구조
*


역할
  • Singleton의 역할

Static 필드로서 instance가 정의 되어있고 이 필드의 타입은 Singleton입니다. 이 클래스의 생성자는 private로되어있다. getInstance() 메서드는 Singleton클래스를 리턴 하며 내부에서는 최초 요청시 오직 한번만 Singleton클래스의 인스턴스를 생성하여 instance필드에 저장합니다.
의도
지정한 클래스의 인스턴스가 반드시 1개만 존재하도록 하고 싶고, 인스턴스가 1개만 존재하는 것을 프로그램 상에서 표현하고 싶은 경우
적용시기
인스턴스가 1개만 존재하는 것을 보증할 때.
효과
일반적으로 Singleton패턴은 프로그램이 Cache기능을 포함하고 있을 경우에 많이 사용됩니다. 또 다른 사용법으로는 인스턴스 재사용이라는 측면에서 자주 사용됩니다. 어떤 클래스가 비즈니스 로직를 실행시 외부에서 주어진 메서드 파라미터에만 종속적이라면 이는 Singleton패턴으로 표현함이 적당합니다. 우리가 일반적으로 가장 Singleton패턴을 볼 수 있는 경우는 각종 Data Base Connection Pooler입니다.
Singleton의 유의점
Singleton클래스의 인스턴스를 반환 받는 메서드(getInstance())는 반드시 synchronized로 선언되어야 합니다. 아주 단시간에 클래스를 동시에 호출했을 때 2개의 인스턴스가 생성될 수 있는 여지가 있기 때문입니다.


예제소스
*


다음은 예제소스이다.
public class PrintSpooler {
private static PrintSpooler spooler;
private PrintSpooler() {
}
public static synchronized PrintSpooler getSpooler() {
if (spooler == null)
spooler = new PrintSpooler();
return spooler;
}
public void print(String s) {
System.out.println(s);
}
}
public class mainClass {
public void exec() {
PrintSpooler spl = PrintSpooler.getSpooler ();
spl.print ("프린트를 기동했습니다.");
}
public static void main(String argv[]) {
mainClass mainclass = new mainClass();
mainclass.exec();
}
}


관련패턴
  • Abstract Factory
  • Builder
  • Façade
  • Prototype

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...