원본 - java 로 배우는 디자인 패턴 입문
Singleton 패턴
# 하나의 인스턴스만 생성되어야 하는 클래스 구현 패턴
# 사용 목적
프로그램 실행 시 하나의 클래스에 대한 인스턴스가 보통 여러 개 생성 및 사용 된다.하지만 반드시 하나의 인스턴스만 생성되어야 하는 클래스도 있다.
(예: 컴퓨터 자체를 표현한 클래스, 윈도 시스템을 표현한 클래스 등)
일반적으로 인스턴스 생성시 new MyClass( )를 한번만 실행하면 된다.
그러나, 1개의 인스턴스만 생성되도록 프로그램에 표현하고 싶을 때 Singleton 패턴을 사용한다.
# 규칙
private 맴버 변수
private 생성자
public 호출자
# 간단한 예제
## Main.calss
## Singleton Class 의 인스턴스를 호출하여 동일한 객체인지 유무 확인
package singleton;
public class Main {
/**
* main method
* @param args
*/
public static void main(String[] args) {
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if(obj1 == obj2) {
System.out.println("같은 객체");
} else {
System.out.println("다른 객체");
}
}
}
## Singleton.class
## 1. private 맴버변수 선언
## 2. private 생성자 선언
## 3. public get 호출자 선언
## static 으로 선언하여 VM에서 전역 변수로 사용
## private 변수와 생성자를 사용하여 외부에서 변경 못하도록 지정.
package singleton;
public class Singleton {
private static Singleton instance;
/*
* 정적 필드 - 최초 로드 시 한번만 초기화를 한다.
*/
static {
instance = new Singleton();
}
/**
* 생성자
*/
private Singleton() {
}
/**
* get property
*/
public static Singleton getInstance() {
return instance;
}
}
## 실행 결과 : 같은 객체
# 한정자가 필요한 이유
인스턴스가 하나만 존재한다는 것이 보증되면, 인스턴스 상호 간에 영향을 주어 생각지 못한 버그가 발생할 가능성이 없어진다.
# 유일한 하나의 인스턴스는 언제 생성되는가
프로그램 실행 후, 처음으로 Singleton.getInstance( ) 메소드가 호출되면, Singleton 클래스가 초기화되고, 이 때 static 필드인 singleton 필드가 초기화된다.
* synchronized
'JAVA' 카테고리의 다른 글
문자열 중 숫자 또는 특정 패턴의 문자열 찾기 (0) | 2011.05.13 |
---|---|
Static Initialization in Java(tm) (0) | 2010.05.20 |
java.io.File을 이용한 디렉토리와 파일 검색(call back) (0) | 2010.05.07 |
Annotations - 어노테이션 (1) | 2010.02.03 |
추상클래스(Abstract Class)와 인터페이스(Interface) (0) | 2010.01.29 |