프로그래밍/디자인패턴

01. Singleton 패턴

panpro 2017. 2. 7. 23:21



우선 이 강의는 초보자를 위한 디자인패턴 강의입니다. 

그래서 각 패턴을 이해하는 것에 우선순위를 두겠습니다. 



정의


Singleton 패턴은,

프로그램에서 하나의 클래스를 위한 인스턴스를 딱 하나만 생성해서 사용하기 위한 패턴입니다. 




클래스다이어그램


설명


예를 들어, 

화면에 어떤 학생에 대한 정보가 나타나 있다면, 

그 학생의 학번과 이름, 학과 등은 여기저기에서 많이 쓰이고 있을 겁니다. 


이런 정보를 하나의 클래스에 담아 사용하는 경우 흔하죠.

public Class Student
{
    public String strHakBun; // 학번
    public String strName;  // 이름
    public String strMajority;// 학과
}

이제 이 클래스의 인스턴스를 만들어 여기저기서 사용할 겁니다. 

그런데 만약 이 클래스의 인스턴스를 하나 더 만든다면? 


    Student p1 = new Student();    
    p1.strHakBun = "201705141";

    ......


    Student p2 = new Student();    
    System.out.println(p2.strHakBun);


이런 상황이라면 p2.strHakBun에서는 아무런 값도 찍히지 않을 겁니다. 


p1과 p2는 완전히 다른 인스턴스이니까요. 



클래스라고도 했다가 인스턴스라고도 했다가 헷갈리는데, 



클래스는 그냥 그 객체가 해야할 일을 정의해 놓은 것이고, 

그 클래스가 실제로 new 연산자를 통해 메모리에 올라와 일을 할 상태가 된 것을 인스턴스라고 합니다. 



p1과 p2는 완전히 다른 인스턴스이기 때문에 strHakBun, 학번의 값이 완전히 다릅니다. 

p1 인스턴스에다가 실컷 값쓰고 읽고 하다가, 

새로운 인스턴스 p2를 생성해 놓고서 여기서 p1의 값이 나오기를 기대하는 거죠.


(이거 초보때 정말 많이 하는 실수입니다.)



이런 상황을 방지하기 위해 Singleton 패턴을 사용합니다. 

public class Singleton 
{	
	private static final Singleton gInstance = new Singleton();	

        public String strHakBun = "201705141";

	public static Singleton getInstance()
	{
		return gInstance;
	}
	
	
	
	public static void main(String[] args)
	{
		System.out.println(Singleton.getInstance().strHakBun );
	}
}


이렇게 만듭니다. 


3번쨰 줄에 static 이란 말이 나오는데, 

이 클래스가 프로그램에 로드되자마자 바로 변수 혹은 함수를 만들어라.. 라는 뜻입니다. 


그러니까 Singleton 클래스가 로드되자마자 바로 이 gInstance 변수가 만들어지는 것이고, 

결국 프로그램이 시작하면서 바로 gInstance 변수가 만들어집니다. 


이후 더 자세한 설명은 아래 동영상으로 하겠습니다. 



'프로그래밍 > 디자인패턴' 카테고리의 다른 글

02. Prototype 패턴  (1) 2017.03.21
00. 디자인패턴 강의를 시작하며  (2) 2017.02.07