GOF 싱글 톤 패턴에 대한 실행 가능한 대안이 있습니까?


91

현실을 직시하자. 싱글 톤 패턴은 매우 논쟁 에 무리 프로그래머와 주제 모두 울타리의 측면. Singleton이 더 이상 영광스러운 전역 변수라고 느끼는 사람들과 패턴으로 맹세하고 그것을 끊임없이 사용하는 사람들이 있습니다. 그러나 나는 싱글 톤 논쟁 이 내 질문의 핵심에 놓여있는 것을 원하지 않습니다 . 누구나 줄다리기를하여 전투를 벌일 수 있으며 내가 관심을 갖는 모든 것을 누가이기는지 볼 수 있습니다. 제가 말하려는 것은 정답이 하나 있다고 믿지 않으며 의도적으로 당파 적 논쟁을 불러 일으키는 것도 아닙니다. 나는 질문을 할 때 단순히 단일 대안에 관심이 있습니다 .

GOF 싱글 톤 패턴에 대한 특정 대안이 있습니까?

예를 들어, 과거에 싱글 톤 패턴을 여러 번 사용했을 때 저는 단순히 하나 또는 여러 변수의 상태 / 값을 보존하는 데 관심이 있습니다. 그러나 변수의 상태 / 값은 단일 패턴을 사용하는 대신 정적 변수 를 사용하여 클래스의 각 인스턴스화 사이에 보존 될 수 있습니다 .

다른 아이디어가 있습니까?

편집 : "싱글 톤을 올바르게 사용하는 방법"에 대한 또 다른 게시물이되기를 원하지 않습니다. 다시 말하지만 나는 그것을 피할 방법을 찾고 있습니다. 재미로 알았지? 나는 당신의 최고의 영화 예고편 목소리로 순수하게 학문적 인 질문을하고있는 것 같습니다. "싱글 톤이없는 평행 우주에서 우리는 무엇을 할 수 있습니까?"


뭐? 좋지도 나쁘지도 않지만 어떻게 교체 할 수 있습니까? 좋다고 말하는 모든 사람들에게 참여하지 마십시오. 그것이 나쁘다고 말하는 모든 사람들은 그것없이 어떻게 살 수 있는지 보여줌으로써 그것을 증명하십시오. 나에게 논쟁적인 것 같다.
S.Lott

@CodingWithoutComents : 전체 게시물을 읽었습니다. 그것이 내가 "싱글 톤이 괜찮다면 답장하지 마라"는 느낌을받은 방법입니다.
S.Lott

2
글쎄, 그렇게된다면 사과드립니다. 양극화를 피하기 위해 중요한 조치를 취했다고 생각했습니다. 저는 Singletons를 좋아하는 사람과 싫어하는 사람 모두가 프로그래머로서 우리 모두가 선택할 수있는 선택권을 가질 수있는 방식으로 질문을 던졌다 고 생각했습니다.
CodingWithoutComments

Singletons를 사용하면 문제 해결 방법에 대한 기여가 없습니다. 나에게 양극화되는 소리.
S.Lott

9
나는 매일 Singletons를 사용하지만 더 나은 방법이있을 수 있다고 생각하지 않습니까? 디자인 패턴은 14 년 동안 만 사용되었습니다. 나는 그것들을 성경적 진리로 받아들입니까? 틀 밖에서 생각하는 것을 그만두나요? CS의 학문을 발전 시키려고하지 않습니까?
CodingWithoutComments

답변:


76

" Patterns I Hate "의 Alex Miller 는 다음을 인용합니다.

"싱글 톤이 답처럼 보일 때 다음과 같은 것이 더 현명한 경우가 많습니다.

  1. 인터페이스 및 싱글 톤의 기본 구현 생성
  2. 시스템의 "상단"에 기본 구현의 단일 인스턴스를 생성합니다. 이것은 Spring 구성 또는 코드에 있거나 시스템에 따라 다양한 방식으로 정의 될 수 있습니다.
  3. 필요한 각 구성 요소에 단일 인스턴스 전달 (종속성 주입)

2
이게 거의 ​​5 년이 됐다는 건 알지만 좀 더 자세히 설명해 주 시겠어요? 싱글 톤을 만드는 올바른 방법은 인터페이스를 사용하는 것이라고 배웠다고 생각합니다. 내가하는 일이 'OK'이고 내가들은 것만 큼 끔찍하지 않다면 관심이있을 것이다.
Pureferret 2013

97

Singleton을 해결하는 적절한 방법을 이해하려면 Singleton (및 일반적으로 전역 상태)의 문제점을 이해해야합니다.

싱글 톤은 종속성을 숨 깁니다.

그게 왜 중요할까요?

종속성을 숨기면 커플 링 양을 추적하지 못하는 경향이 있기 때문입니다.

당신은

void purchaseLaptop(String creditCardNumber, int price){
  CreditCardProcessor.getInstance().debit(creditCardNumber, amount);
  Cart.getInstance().addLaptop();
}

보다 간단합니다

void purchaseLaptop(CreditCardProcessor creditCardProcessor, Cart cart, 
                    String creditCardNumber, int price){
  creditCardProcessor.debit(creditCardNumber, amount);
  cart.addLaptop();
}

하지만 적어도 두 번째 API는 메소드의 공동 작업자가 무엇인지 정확히 알려줍니다.

따라서 Singleton을 해결하는 방법은 정적 변수 또는 서비스 로케이터를 사용하는 것이 아니라 Singleton 클래스를 인스턴스로 변경하는 것입니다. IoC 프레임 워크를 사용하여이를 처리하거나 수동으로 수행 할 수 있지만 중요한 것은 전역 상태를 제거하고 종속성 및 공동 작업을 명시 적으로 만드는 것입니다.


+1 문제 해결 방법뿐만 아니라 문제의 원인을 논의합니다.
Phil

9
본격적인 다 계층 애플리케이션에서 두 번째 방법은 종종 불필요한 코드를 대량으로 생성합니다. 중간 계층의 코드를 더 낮은 계층으로 전달하는 논리로 오염시킴으로써 해당 수준에서 불필요한 객체는 필요하지 않은 종속성을 생성하지 않습니까? 탐색 스택의 계층 4가 파일 업로드와 같은 백그라운드 작업을 시작한다고 가정 해 보겠습니다. 이제 완료 될 때 사용자에게 알리고 싶지만 그때까지는 사용자가 시작 뷰와 공통적으로 계층 1 만 공유하는 애플리케이션의 완전히 다른 부분에있을 수 있습니다. 불필요한 코드의 톤 ...
하리 카람 싱

1
@RasmusFaber Singleton 패턴은 종속성을 숨기지 않습니다. 종속성 숨기기에 대한 불만은 패턴과는 별개의 문제입니다. 패턴이 실수하기 쉽게 만드는 것은 사실이지만 IoC와 Singleton 패턴을 조화롭게 함께 실행하는 것은 매우 가능합니다. 예를 들어, 인스턴스의 특별한 수명주기 관리가 필요한 타사 라이브러리를 만들 수 있으며, 내 lib를 사용하는 사람은 내 싱글 톤을 "스카이 후크"가 아닌 클래식 종속성 주입을 사용하여 클래스에 여전히 "전달"해야합니다. 모든 포인트 컷에서.
Martin Bliss 2013

@HariKaramSingh 구독 / 게시 패턴 또는 시스템 전체 이벤트 버스 (싱글 톤이 아닌 모든 관련 당사자간에 공유되어야 함)를 사용하여이 문제를 해결할 수 있습니다.
Victor Sorokin 2013 년

4
또한 pub / sub 또는 옵저버 패턴은 그들에 크게 의존하는 프레임 워크를 통해 디버그를해야하는 사람이 증명하는 것처럼 나쁜 wrt "커플 링의 손실 추적"일 수 있습니다. 적어도 싱글 톤의 경우 호출되는 메서드 이름은 호출 코드와 같은 위치에 있습니다. :) 개인적으로 이러한 모든 전략이 제자리를 차지하고 맹목적으로 구현할 수 없다고 생각합니다. 엉성한 코더는 어떤 패턴으로도 스파게티를 만들 수 있으며 책임감있는 코더는 우아한 코드를 만들기 위해 이데올로기 적 한계에 지나치게 부담을 줄 필요가 없습니다.
Hari Karam Singh

14

내가 찾은 최고의 솔루션은 팩토리 패턴을 사용하여 클래스의 인스턴스를 구성하는 것입니다. 패턴을 사용하여 다음을 수행 할 수 있습니다 확신 을 사용하는 객체간에 공유되는 클래스의 하나의 인스턴스 만이 있음.

관리하기가 복잡 하겠지만이 블로그 게시물 "모든 싱글 톤이 사라진 곳은 어디입니까?" , 너무 자연스러워 보입니다. 그 외에도 단위 테스트를 분리하는 데 많은 도움이됩니다.

요약하면 무엇을해야합니까? 객체가 다른 객체에 종속 될 때마다 생성자를 통해서만 인스턴스를받습니다 (클래스에 새 키워드 없음).

class NeedyClass {

    private ExSingletonClass exSingleton;

    public NeedyClass(ExSingletonClass exSingleton){
        this.exSingleton = exSingleton;
    }

    // Here goes some code that uses the exSingleton object
}

그리고 공장.

class FactoryOfNeedy {

    private ExSingletonClass exSingleton;

    public FactoryOfNeedy() {
        this.exSingleton = new ExSingletonClass();
    }

    public NeedyClass buildNeedy() {
        return new NeedyClass(this.exSingleton);
    }
}

팩토리를 한 번만 인스턴스화하므로 exSingleton의 단일 인스턴스화가 있습니다. buildNeedy를 호출 할 때마다 NeedyClass의 새 인스턴스가 exSingleton과 함께 번들로 제공됩니다.

이게 도움이 되길 바란다. 실수가 있으면 지적 해주세요.


5
비공개 생성자가 필요한 경우에만 Factory가 인스턴스화되도록하고 buildNeedy 메서드를 정적 메서드로 정의합니다.
Julien Grenier

16
Julien이 맞습니다.이 수정에는 근본적인 결함이 있습니다. 즉, 하나의 팩토리 만 인스턴스화 할 수 있다고 암시 적으로 말하는 것입니다. 하나의 팩토리 만 인스턴스화되도록 필요한 예방 조치를 취하면 (Julien이 말한대로) 결국 싱글 톤이됩니다! 실제로이 접근법은 싱글 톤 위에 불필요한 추상화 레이어를 추가 할뿐입니다.
Bob Somers

하나의 인스턴스 만 갖는 또 다른 방법이 있습니다. 팩토리를 한 번만 인스턴스화 할 수 있습니다. 컴파일러가 이것을 강제 할 필요가 없습니다. 이는 다른 인스턴스 를 원하는 단위 테스트에도 도움이됩니다 .
frast

이것은 모든 메서드 호출을 복잡하게하지 않고 종속성을 추가하는 (따라서 인터페이스를 재 설계하고 종속성을 리팩토링하는) 싱글 톤으로 잘못 해결 된 문제에 대해 제가 본 최고의 솔루션입니다. 약간의 수정은 "싱글 톤"의 인스턴스가 하나만있는 것이 중요하지 않은 내 상황에 완벽하지만, 기본적으로 모든 사람이 동일한 인스턴스를 공유하는 것이 중요합니다 (수정 : 공장을 사용하는 대신 정적 사용 공용 인스턴스를 외부에서 설정하고 생성 중에 해당 인스턴스를 사용하는 메서드).
meustrus

따라서 기본적으로이 접근 방식의 장점은 잠재적으로 전체 개체 무리 (Singletons를 사용하지 않기로 선택한 경우)가 아닌 하나의 개체 인스턴스 (팩토리)를 중심으로 셔플해야 한다는 것입니다.
Hari Karam Singh

9

Spring이나 다른 IoC-Container는 그 점에서 상당히 좋은 일을합니다. 클래스는 앱 자체 외부에서 생성 및 관리되기 때문에 컨테이너는 간단한 클래스 싱글 톤을 만들고 필요한 곳에 삽입 할 수 있습니다.


앞서 언급 한 주제에 대한 링크가 있습니까?
CodingWithoutComments

이러한 프레임 워크는 자바에만 해당되는 것 같습니다. 다른 언어 별 옵션이 있습니까? 아니면 언어에 구애받지 않습니까?
CodingWithoutComments

.NET의 경우 : Castle Windsor castleproject.org/container/index.html Microsoft Unity msdn.microsoft.com/en-us/library/cc468366.aspx Unity는 실제로 종속성 주입 프레임 워크이지만이 주제에서는 작동 할 것입니다.
Erik van Brakel

1
이것에 대한 표가 너무 많지 않은 이유는 무엇입니까? IOC는 Singleton을 피하는 완벽한 솔루션입니다.
Sandeep Jindal

@CodingWithoutComments PHP에 Symfony 서비스 컨테이너가 있다는 것을 알고 있습니다. 루비 친구들은 의존성을 주입하는 다른 방법이 있습니다. 관심있는 특정 언어가 있습니까?
Bevelopper

9

패턴을 피하기 위해 길을 잃지 않아도됩니다. 패턴의 사용은 디자인 결정이거나 자연스러운 적합성입니다 (단지 제자리에 있음). 시스템을 설계 할 때 패턴을 사용하거나 사용하지 않도록 선택할 수 있습니다. 그러나 궁극적으로 디자인 선택이되는 것을 피하려고해서는 안됩니다.

저는 싱글 톤 패턴을 피하지 않습니다. 적절하고 내가 사용하거나 적절하지 않고 사용하지 않습니다. 그렇게 간단하다고 생각합니다.

Singleton의 적절성 (또는 부족)은 상황에 따라 다릅니다. 설계 결정을 내려야하며 그 결정의 결과를 이해하고 문서화해야합니다.


나는 똑같은 말을하려고했지만 그의 질문에 답이별로 없다. :)
Swati

2
적절하거나 적절하지 않은 경우 귀하의 답변에 대해 이야기하십시오. 예쁜 제발.
CodingWithoutComments

그것은 질문에 대답합니다. 저는 Singleton Pattern의 사용을 피할 수있는 기술을 가지고 있지 않습니다. 왜냐하면 저는 그것을 피하기 위해 내 방식을 벗어나지 않았기 때문에 어떤 개발자도 그렇게해야한다고 생각하지 않기 때문입니다.
Thomas Owens

적절하거나 적절하지 않은 경우 일반화 할 수 없다고 생각합니다. 모든 프로젝트에 따라 다르며 해당 시스템의 설계에 따라 크게 달라집니다. 나는 이와 같은 결정에 "엄지 손가락의 법칙"을 사용하지 않습니다.
Thomas Owens

흠. 나는 이것이 왜 투표를 받고 있는지 이해하지 못한다. 나는 질문에 답했다-싱글 톤 패턴의 사용을 피하는 당신의 기술은 무엇입니까? -나는 패턴을 피하기 위해 내 길을 벗어나지 않기 때문에 기술이 없다고 말함으로써. 반대자들은 그들의 추론에 대해 자세히 설명 할 수 있습니까?
Thomas Owens

5

Monostate (Robert C. Martin의 Agile Software Development에 설명 됨)는 singleton의 대안입니다. 이 패턴에서 클래스의 데이터는 모두 정적이지만 getter / setter는 정적이 아닙니다.

예를 들면 :

public class MonoStateExample
{
    private static int x;

    public int getX()
    {
        return x;
    }

    public void setX(int xVal)
    {
        x = xVal;
    }
}

public class MonoDriver
{
    public static void main(String args[])
    {
        MonoStateExample m1 = new MonoStateExample();
        m1.setX(10);

        MonoStateExample m2 = new MonoStateExample();
        if(m1.getX() == m2.getX())
        {
            //singleton behavior
        }
    }
}

Monostate는 singleton과 비슷한 동작을하지만 프로그래머가 singleton이 사용되고 있다는 사실을 반드시 인식하지 못하는 방식으로 작동합니다.


이것은 더 많은 표를받을 가치가 있습니다. 저는 MonoState 리프레셔를 찾고 Google에서 왔습니다!
mahemoff

@Mark이 디자인은 스레드 안전성 측면에서 잠그기가 매우 어려운 것 같습니다. MonoStateExample에서 각 정적 변수에 대한 인스턴스 잠금을 생성합니까, 아니면 모든 속성이 활용하는 하나의 잠금을 생성합니까? 둘 다 Singleton 패턴으로 쉽게 해결할 수있는 심각한 파급 효과가 있습니다.
Martin Bliss

이 예제는 Singleton 패턴의 대안이지만 Singleton 패턴의 문제를 해결하지는 않습니다.
Sandeep Jindal

4

싱글 때 상황이 있기 때문에 패턴이 존재 하나의 객체가 일련의 서비스를 제공하기 위해 필요하다 .

이 경우에도 인스턴스를 나타내는 전역 정적 필드 / 속성 을 사용하여 싱글 톤을 만드는 접근 방식을 여전히 고려하고 있습니다. 정적 필드와 개체가 제공하는 서비스가 아닌 개체 간의 코드에 종속성을 생성하기 때문에 부적절합니다.

따라서 고전적인 싱글 톤 패턴 대신 serviced container 와 함께 서비스 'like'패턴을 사용하는 것이 좋습니다 . 여기서 정적 필드를 통해 싱글 톤을 사용하는 대신 필요한 서비스 유형을 요청하는 메서드를 통해 참조를 얻습니다.

*pseudocode* currentContainer.GetServiceByObjectType(singletonType)
//Under the covers the object might be a singleton, but this is hidden to the consumer.

단일 글로벌 대신

*pseudocode* singletonType.Instance

이런 식으로 객체의 유형을 싱글 톤에서 다른 것으로 변경하고 싶을 때 쉽게 할 수 있습니다. 또한 추가적인 이점으로 모든 메서드에 할당 된 개체 인스턴스를 전달할 필요가 없습니다.

또한 Inversion of Control을 참조하십시오 . 아이디어는 단일 항목을 소비자에게 직접 노출함으로써 개체가 제공하는 개체 서비스가 아닌 소비자와 개체 인스턴스간에 종속성을 생성한다는 것입니다.

제 의견은 싱글 톤 패턴의 사용을 가능한 한 숨기는 것입니다. 왜냐하면 항상 피할 수 없거나 바람직하지는 않기 때문입니다.


나는 서비스 컨테이너에 대한 당신의 예를 따르지 않습니다. 링크 할 수있는 온라인 리소스가 있습니까?
CodingWithoutComments

"Castle Project-Windsor Container" castleproject.org/container/index.html을 살펴보십시오 . 불행히도이 주제에 대한 추상 출판물을 찾는 것은 매우 어렵습니다.
Pop Catalin

2

Singleton을 사용하여 단일 데이터 개체를 나타내는 경우 대신 데이터 개체를 메서드 매개 변수로 전달할 수 있습니다.

(하지만 처음에는 이것이 Singleton을 사용하는 잘못된 방법이라고 주장합니다)


1

문제가 상태를 유지하려는 것이라면 MumbleManager 클래스가 필요합니다. 시스템 작업을 시작하기 전에 클라이언트는 MumbleManager를 생성합니다. 여기서 Mumble은 시스템의 이름입니다. 이를 통해 상태가 유지됩니다. MumbleManager에는 상태를 보관하는 속성 모음이 포함될 가능성이 있습니다.

이러한 유형의 스타일은 매우 C와 비슷하고 객체처럼 느껴지지는 않습니다. 시스템을 정의하는 객체는 모두 동일한 MumbleManager에 대한 참조를 갖게 될 것입니다.


Singleton을 옹호하거나 반대하지 않고이 솔루션은 반 패턴이라고 말해야합니다. MumbleManager는 단일 책임을 위반하는 모든 종류의 이질적인 지식을 포함하는 "신 클래스"가됩니다. 모든 응용 프로그램에 대한 Singleton이 될 수도 있습니다.
Martin Bliss 2013

0

일반 개체와 팩토리 개체를 사용하십시오. 팩토리는 구성 정보 (예 : 포함) 및 동작으로 만 인스턴스 및 일반 개체 세부 정보를 관리합니다.


1
팩토리는 종종 싱글 톤 아닌가요? 이것이 내가 일반적으로 구현 된 Factory 패턴을 보는 방법입니다.
Thomas Owens

0

실제로 Singelton을 피하면서 처음부터 바로 디자인하면 정적 변수를 사용하여 Singleton을 사용하지 않는 문제를 해결할 필요가 없습니다. 정적 변수를 사용할 때 어느 정도 Singleton을 생성하고 있지만 유일한 차이점은 다른 객체 인스턴스를 생성한다는 것입니다. 그러나 내부적으로는 모두 Singleton을 사용하는 것처럼 작동합니다.

Singleton을 사용하는 곳이나 현재 Singleton이 사용되고 있고 사용을 피하려고하는 곳의 자세한 예를 들어 줄 수 있습니까? 이것은 사람들이 싱글 톤없이 상황을 처리 할 수있는 더 멋진 해결책을 찾는 데 도움이 될 수 있습니다.

BTW, 저는 개인적으로 Singletons에 문제가 없으며 다른 사람들이 Singleton에 대해 가지고있는 문제를 이해할 수 없습니다. 나는 그들에 대해 나쁜 것이 없습니다. 즉, 학대하지 않는 경우입니다. 모든 유용한 기술은 남용 될 수 있으며 남용 될 경우 부정적인 결과를 초래할 수 있습니다. 일반적으로 잘못 사용되는 또 다른 기술은 상속입니다. 아직도 어떤 사람들이 끔찍하게 남용하기 때문에 상속이 나쁘다고 말하는 사람은 아무도 없습니다.


0

개인적으로 싱글 톤처럼 동작하는 것을 구현하는 훨씬 더 현명한 방법은 완전히 정적 클래스 (정적 멤버, 정적 메서드, 정적 속성)를 사용하는 것입니다. 대부분의 경우 이런 방식으로 구현합니다 (사용자 관점에서 행동 차이는 생각할 수 없습니다)


0

싱글 톤을 감시하는 가장 좋은 장소는 클래스 디자인 수준이라고 생각합니다. 이 단계에서 클래스 간의 상호 작용을 매핑 할 수 있어야하며 응용 프로그램 수명 중 언제든지이 클래스의 인스턴스가 하나만 존재하는 것이 절대적으로 필요한지 확인해야합니다.

그렇다면 싱글 톤이 있습니다. 코딩하는 동안 편의상 싱글 톤을 던지는 경우 실제로 디자인을 다시 방문하고 해당 싱글 톤 코딩을 중지해야합니다. :)

그리고 예, '경찰'은 '피하다'라기보다 여기서 의미하는 단어입니다. 싱글 톤은 피해야 할 것이 아닙니다 (goto 및 전역 변수가 피할 것이 아닌 것과 같은 방식으로). 대신 사용을 모니터링하고 원하는 작업을 효과적으로 수행 할 수있는 최상의 방법인지 확인해야합니다.


1
나는 당신이 workmad를 말하는 것을 완전히 이해합니다. 그리고 나는 완전히 동의합니다. 그러나 귀하의 답변은 여전히 ​​내 질문에 구체적으로 답변하지 않습니다. 나는 이것이 "언제 싱글 톤을 사용하는 것이 적절한가?"라는 또 다른 질문이되기를 원하지 않았습니다. 싱글 톤에 대한 실행 가능한 대안에 관심이있었습니다.
CodingWithoutComments

0

나는 상태가 전혀없는 "메소드 컨테이너"로 주로 싱글 톤을 사용합니다. 이러한 메서드를 많은 클래스와 공유해야하고 인스턴스화 및 초기화의 부담을 피하려면 컨텍스트 / 세션을 만들고 모든 클래스를 초기화합니다. 세션을 참조하는 모든 것은 포함 된 "싱글 톤"에도 액세스 할 수 있습니다.


0

강렬한 객체 지향 환경 (예 : Java)에서 프로그래밍하지 않았기 때문에 논의의 복잡함을 완전히 이해하지 못했습니다. 하지만 저는 PHP 4에서 싱글 톤을 구현했습니다. 자동으로 초기화되고 불완전하고 다소 손상된 프레임 워크에서 함수 호출을 위아래로 전달할 필요가없는 '블랙 박스'데이터베이스 핸들러를 만드는 방법으로 수행했습니다.

싱글 톤 패턴의 일부 링크를 읽었지만 다시 동일한 방식으로 구현할 것인지 완전히 확신 할 수 없습니다. 정말로 필요한 것은 공유 스토리지 (예 : 실제 데이터베이스 핸들)가있는 여러 개체였으며 이것이 제가 호출 한 결과입니다.

대부분의 패턴 및 알고리즘과 마찬가지로 싱글 톤을 사용하는 '그냥 멋지다'는 The Wrong Thing To Do입니다. 싱글 톤처럼 보이는 진정한 '블랙 박스'호출이 필요했습니다. 그리고 IMO는 질문을 해결하는 방법입니다. 패턴을 인식하고 더 넓은 범위와 인스턴스가 고유해야하는 수준을 살펴보십시오.


-1

무슨 말이야, 그걸 피하는 내 기술이 뭐야?

이를 "피하려면"싱글 톤 패턴이 자연스럽게 잘 맞는 상황이 많이 발생하고 있으므로 이러한 상황을 완화하기 위해 몇 가지 조치를 취해야합니다.

그러나 없습니다. 싱글 톤 패턴을 피할 필요가 없습니다. 단순히 발생하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.