Problem 제시
프린터 스풀은 시스템에오직 하나만 존재하여야 한다.
프린터 스풀 클래스를 제공하는 프로그래머 A씨는 반드시 하나만 생성하도록 검사하고 있다.
또한 편리한 접근을 위해 전역변수(static)로 인스터스를 접근하도록 하였다.
이 사실을 제대로 전달받지 못한 개발자들이 프린터 스풀 객체를 임의로 생성하려다 에러를 만나곤 해서 원성이 크다.
어떻게 해결할 것인가?
package Singleton;
public class PrintSpool {
public static int numOfinstance = 0;
public static PrintSpool SPOOL;
public PrintSpool(){
numOfinstance++;
if(numOfinstance > 1){
throw new RuntimeException("이 인스턴스는 2개 이상 생성될 수 없습니다.");
}
}
public void print(String string){
System.out.println("출력 : "+ string);
}
}
package Singleton;
public class Client {
public static void main(String[] args) {
print1();
//많은 작업 후 spool 객체를 생성한 것을 잊고..
print2();
}
private static void print1(){
PrintSpool.SPOOL = new PrintSpool();
PrintSpool.SPOOL.print("디자인 패턴");
}
private static void print2(){
PrintSpool.SPOOL = new PrintSpool();
PrintSpool.SPOOL.print("Creational 패턴");
}
}
[Client 클래스 실행 결과]
솔루션 찾기 (문제해결 실습)
-. 객체 생성 제어하기
Spool은 오직 하나만 존재하기에 아무나 생성할 수 있으면 동일한 문제가 발생할 수 있다.
아무나 객체를 생성할 수 없도록 제한하는 방법을 논의하시오.
-. 일관성 있는 객체 접근 방법 제공
시스템에 오직 하나만 존재하는 객체를 안전하고 일관성 있게 접근하는 방법을 논의하시오.
논의한 결과를 다이어그램으로 표현하고 구현하시오.
'Patterns' 카테고리의 다른 글
| Template Method - 하위 클래스에서 구체적으로 처리하기 (0) | 2013.05.06 |
|---|---|
| Abstract Factory - 관련 부품을 조합해서 제품만들기 (0) | 2013.05.06 |
| 02. 객체지향 설계 원칙 (0) | 2013.05.04 |
| 01. 객체-지향(Object-Oriented) 개념 (0) | 2013.05.04 |
| Prototype 패턴 - 복사해서 인스턴스 만들기 (0) | 2013.05.03 |