욱'S 노트

Singleton - 유일한 인스턴스 만들기 본문

Methdology/Design Pattern

Singleton - 유일한 인스턴스 만들기

devsun 2012. 4. 4. 18:24
When Using It

인스턴스를 하나만 만들고 싶을때 사용하는 패턴이다.  
일반적인 Stateless한 클래스의 경우 혹은 Stateful 하지만 변경을 할 수 있는 메소드가 노출되어 있지 않을때 사용한다.

Class Diagram


Sample Code

public class Singleton {

private static Singleton instance = new Singleton();

private Singleton() {}


public static Singleton getInstance() {

return instance;

}

}


 
Caution

객체가 하나만 생성되기 때문에 Stateful 한 객체의 인스턴스를 생성할 경우 멀티스레드 환경에서 주의를 해야 한다. 여러 스레드가 동시에 사용할 경우 원하지 않는 상태 변경이 일어날 수 있다.


Advance Topic 

정적 메소드와 변수를 쓰는 방법과 싱글턴의 차이점은 ? (출처 - Head First Design Pattern)
1. static 메소드와 변수를 사용할 경우 초기화 순서와 관련된 아주 복잡한 버그가 생길 수 있다.
2. 전통적인 싱글턴 패턴에서 활용할 수 있는 lazy-init을 사용하기 힘들다.
3. 전역변수를 사용하다보면 간단한 객체에 대한 전역 레퍼런스를 자꾸 만들게 되어 네임스페이스를 지저분하게 만든다.
 
Comments