본문 바로가기

Patterns

Singleton - 인스턴스를 한 개만 만들기

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은 오직 하나만 존재하기에 아무나 생성할 수 있으면 동일한 문제가 발생할 수 있다.

아무나 객체를 생성할 수 없도록 제한하는 방법을 논의하시오.

 

-. 일관성 있는 객체 접근 방법 제공

시스템에 오직 하나만 존재하는 객체를 안전하고 일관성 있게 접근하는 방법을 논의하시오.

논의한 결과를 다이어그램으로 표현하고 구현하시오.