Program Languege/디자인패턴

Singleton Pattern 싱글톤 패턴

Frozen0113 2014. 3. 28. 09:38

Singleton Pattern 싱글톤 패턴

 

 특정 클래스에 대해 객체 인스턴스를 n개 만들어내도록 생성에 대해 제한하는 패턴이다.

 

 이름이 singleton이라 한개만 생성한다고 생각을 하는 사람이 많은 것 같은데 이 패턴은 지정한 n개 만큼 객체를 생성할 수 있도록 제한하는 패턴이다.  (1개만 생성하도록 제한하는데 많이 쓰이긴 한다.)

 

생각해보면 생성하는 방법을 한가지로 제한하기때문에 싱글톤이라는 이름이 붙은 것이 아닐까라고 생각한다.

 

예제는 다음과 같다.

 

 

 위에서 보면 가장 중요한 부분이 생성자와 소멸자를 private로 접근제한자를 지정하여 외부에서 접근할 수 없도록 지정하여 생성 자체를 막는 부분이다. 이렇게 생성을 막아서 생성과 관련된 부분을 하나(포인터나, 레퍼런스 중 선택하여 정의해야함) 의 static 함수로 제공한다.(함수도 static으로 하지 않으면 객체 생성이 불가능하기때문에 멤버함수도 호출 할 수 없다.)

 

 

위 방법 이외에도 클래스 멤버 변수로 static 객체를 만들어서 반환해주는 함수를 생성해도 된다.

(참고로 레퍼런스로 반환해서 사용할 것인지 포인터로 할 것인지 정해서 둘 중 하나의 함수만 정의해서 사용하거나  둘의 함수 이름을 다르게 해주어야한다.)

 

 

 

싱글톤 패턴의 장점

 

- 곳곳에서 무분별한 객체 생성을 막을 수 있다.

 

싱글톤 패턴의 단점

 

- 전역 변수와 다를 것이 없다.(어디서든 호출하여 가져다 쓸 수 있기때문)

- 다른 방법으로도 가능하다.

- 구조가 변경되는 경우 변경되는 부분이 많아질 수 있다.