728x90
반응형
Singleton Pattern : 해당 클래스의 객체가 하나만 만들어지고 어디서든지 그 객체에 접근할수 있도록 한다.
(출처 : http://www.phpbuilder.com/columns/Singleton-PHP5/Octavia_Anghel112310.php3)
구현 방법은 간단하다.
- public class Singleton {
- private static Singleton singleton;
- private Singleton(){};
- public static Singleton getInstance(){
- if (singleton == null){
- singleton = new Singleton();
- }
- return singleton;
- }
- }
그런데 위와 같은 방법은 문제가 있다.
멀티 쓰레드 상에서 if문을 여러 client가 통과할 가능성이 있다는것이다. 그렇게 되면 유일한 객체가 아닌 singleton객체가 여러개 생성이 될수 도 있다.
그래서 찾은 방법이 synchronized를 사용하는것.
그런데 또 문제 발생... synchronized를 사용할 경우 멀티 쓰레드 상에서 성능 문제를 발생 시킬수 있다. singleton객체를 별로 안쓴다면 크게 문제가 없겠지만.
그래서 또 나온 방법이 DCL. Double-Checked Locking
- public class Singleton {
- private volatile static Singleton singleton;
- private Singleton(){};
- public static Singleton getInstance(){
- if (singleton == null){
- synchronized (Singleton.class) {
- if (singleton == null){
- singleton = new Singleton();
- }
- }
- }
- return singleton;
- }
- }
위에 코드처럼 singleton이 null 인 경우에만 synchronized를 적용한다면 속도에는 크게 지장이 없을것이다.
그리고 java1.4 이후에서 나온 volatile을 선언해 두면 해당 변수가 사용될때 한번 확인해서 동기화 시켜준다.
728x90
반응형
'Development > Java' 카테고리의 다른 글
Integer.paserInt 를 사용한 진법 변환 (0) | 2013.11.12 |
---|---|
Null Object 사용 (0) | 2013.07.05 |
List 를 Array로 바꾸는 함수. (0) | 2013.07.02 |
Annotation : Retention (0) | 2013.07.01 |
Meta Annotaion (0) | 2013.07.01 |