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

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...