Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
study:java:design_pattern:singleton [2008/08/15 00:33] – banana | study:java:design_pattern:singleton [2014/01/09 00:12] (現在) – banana | ||
---|---|---|---|
行 17: | 行 17: | ||
기법이 꽤 유용하죠. | 기법이 꽤 유용하죠. | ||
- | ===== implementation | + | {{keywords> |
+ | |||
+ | ===== Implementation | ||
고전적인 싱글턴 구현법을 소개합니다. | 고전적인 싱글턴 구현법을 소개합니다. | ||
<code java> | <code java> | ||
- | public class Singleton{ | + | public class Singleton { |
| | ||
- | | + | |
- | | + | |
- | | + | if (uniqueInstance == null) { |
uniqueInstance = new Singleton(); | uniqueInstance = new Singleton(); | ||
} | } | ||
行 47: | 行 49: | ||
다음의 코드를 살펴보세요. | 다음의 코드를 살펴보세요. | ||
<code java> | <code java> | ||
- | public class Singleton{ | + | public class Singleton { |
| | ||
- | | + | |
- | | + | |
- | | + | if (uniqueInstance == null) { |
| | ||
} | } | ||
行 87: | 行 89: | ||
<code java> | <code java> | ||
- | public class Singleton{ | + | public class Singleton { |
| | ||
- | | + | |
- | | + | |
| | ||
} | } | ||
行 108: | 行 110: | ||
<code java> | <code java> | ||
- | public class Singleton{ | + | public class Singleton { |
private volatile static Singleton uniqueInstance; | private volatile static Singleton uniqueInstance; | ||
- | private Singleton(){} | + | private Singleton() {} |
- | public static Singleton getInstance(){ | + | public static Singleton getInstance() { |
- | if(uniqueInstance==null){ | + | if (uniqueInstance == null) { |
- | synchronized(Singleton.class){ | + | synchronized(Singleton.class) { |
- | if(uniqueInstance==null){ | + | if (uniqueInstance == null) { |
| | ||
} | } | ||
行 134: | 行 136: | ||
- DCL을 사용하는 방법은 자바2 버전 5(자바 1.5)보다 전에 나온 버전에서는 쓸 수 없습니다.(volatile) | - DCL을 사용하는 방법은 자바2 버전 5(자바 1.5)보다 전에 나온 버전에서는 쓸 수 없습니다.(volatile) | ||
- 클래스 로더가 여러개 있으면 싱글턴이 제대로 작동하지 않고, 여러개의 인스턴스가 생길 수 있습니다. | - 클래스 로더가 여러개 있으면 싱글턴이 제대로 작동하지 않고, 여러개의 인스턴스가 생길 수 있습니다. | ||
- | - 1.2버전보다 전에 나온 JVM을 사용하는 경우에는 가비지 컬렉터 관련 버그((자바 1.2가 나오기 전까지는 가비지 컬렉터의 버그 때문에 싱글턴에 대한 전역 레퍼런스가 없는 경우에 아직 다 쓰지도 않는 싱글터이 가비지 컬렉터에 의해 제거되는 일이 있었습니다. 즉, 싱글턴을 만들 수는 있지만 그 싱글턴에 대한 유일한 레퍼런스가 싱글턴 자체에만 있는 경우에는 가비지 컬렉터에 의해 그 인스턴스가 제거될 수도 있었죠. 싱글턴이 제거되고 나면 getInstance()를 호출했을 때 갓 만들어진 새 싱글턴이 리턴되기 때문에 아주 골치아픈 버그가 생길 수 있었습니다. 조금 전까지 잘 쓰고 있었는데, | + | - 1.2버전보다 전에 나온 JVM을 사용하는 경우에는 가비지 컬렉터 관련 버그((자바 1.2가 나오기 전까지는 가비지 컬렉터의 버그 때문에 싱글턴에 대한 전역 레퍼런스가 없는 경우에 아직 다 쓰지도 않는 싱글턴이 가비지 컬렉터에 의해 제거되는 일이 있었습니다. 즉, 싱글턴을 만들 수는 있지만 그 싱글턴에 대한 유일한 레퍼런스가 싱글턴 자체에만 있는 경우에는 가비지 컬렉터에 의해 그 인스턴스가 제거될 수도 있었죠. 싱글턴이 제거되고 나면 getInstance()를 호출했을 때 갓 만들어진 새 싱글턴이 리턴되기 때문에 아주 골치아픈 버그가 생길 수 있었습니다. 조금 전까지 잘 쓰고 있었는데, |