Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed

文書の過去の版を表示しています。


Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed

the Definition of Singleton Pattern

싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고,

어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴입니다.

특별히 대단한 내용은 없지만, 하나씩 짚고 넘어가보도록 하겠습니다.

  • 실제로 어떤 식으로 싱글턴 패턴을 적용할까요? 클래스에서 자신의 단 하나뿐인 인스턴스를 관리하도록 만들면 됩니다.

그리고 다른 어떤 클래스에서도 자신의 인스턴스를 추가로 만들지 못하도록 해야 합니다. 인스턴스가 필요하면 반드시 클래스
자신을 거치도록 해야 되겠죠.

  • 그리고 어디서든 그 인스턴스에 접근할 수 있도록 만들어야 합니다. 다른 객체에서 이 인스턴스가 필요하면 언제든지

클래스한테 요청을 할 수 있게 만들고, 요청이 들어오면 그 하나뿐인 인스턴스를 건네주도록 만들어야 하죠. 싱글턴이
'게으르게' 생성되도록 구현할 수도 있습니다. 그 클래스의 객체가 자원을 많이 잡아먹는 경우에는 이런 게으른 생성
기법이 꽤 유용하죠.

implementation 1

고전적인 싱글턴 구현법을 소개합니다.

public class Singleton{
     private static Singleton uniqueInstance;
 
     private Singleton(){}
 
     public static Singleton getInstance(){
         if(uniqueInstance == null){
              uniqueInstance = new Singleton();
         }
         return uniqueInstance;
     }
}

생성자를 private으로 선언함으로써 다른 클래스에서 instance를 함부로 생성하지 못하게 합니다. 언뜻 보기에는 그럴듯 해 보이죠. 하지만 이 구현법에는 몇가지 문제점이 있습니다.
무엇이 문제일까요?

스레드가 하나라면 이 코드는 잘 작동할 것입니다. 스레드가 하나 더 추가되면 어떤 일이 벌어질까요? 운 나쁘게 uniqueInstance가 null임을 확인하고 instance를 생성하려는 사이 다른
스레드에서 instance를 만들어버리게 되는 상황이 발생할 수도 있습니다.


QR Code
QR Code study:java:design_pattern:singleton (generated for current page)