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 |