c# 싱글톤 패턴 예제

Singleton 패턴의 위의 C# 구현은 게으른 초기화도 제공합니다. 따라서 인스턴스 속성에 대한 첫 번째 호출이 이루어질 때마다 실제 Singleton 인스턴스가 초기화됩니다. 필요한 경우가 아니면 Singleton은 메모리에 인스턴스가 없습니다. 우리의 기본 수준 구현은 SingleInstance 속성이 호출될 때만 인스턴스를 만드는 것을 의미하는 인스턴스 생성이 지연되어 초기화되므로 단일 스레드 시스템에서만 작동합니다. 두 스레드가 동시에 속성에 액세스하려고 시도하는 상황이 있다고 가정하면 두 스레드가 동시에 null 검사를 누르고 인스턴스 변수가 여전히 null임을 발견하기 때문에 새 인스턴스 만들기에 액세스하는 상황이 있을 수 있습니다. . 현재 Singleton 구현에서 이 시나리오를 테스트해 보겠습니다. 위의 코드를 살펴보면 singleInstance라는 백업 필드와 SingleInstance라는 공용 정적 속성을 만들었습니다. 이 속성에 액세스할 때마다 백업 필드를 새 Singleton 인스턴스로 인스턴스화하고 클라이언트에 반환하지만 매번 반환하지는 않으며 singleInstance가 null인 경우 새 인스턴스만 반환하고 모든 t t가 아닌지 확인합니다. ime 속성에 액세스할 수 있습니다.

다른 모든 경우 처음 만들어진 인스턴스와 동일한 인스턴스를 반환해야 합니다. 이 클래스의 생성자는 이제 비공개이므로 클래스 외부가 아닌 클래스 멤버 내에서만 액세스할 수 있습니다. 이제 program.cs 클래스로 이동하여 개인 생성자로 인해 Singleton 인스턴스를 직접 만들 수 없으므로 인스턴스를 얻기 위해이 속성에 액세스합니다. 지연 형식을 사용 하 여 스레드 안전 Singleton을 구현 하기 위해 클래스를 수정 하자: 그래서, 의심의 여지가 우리가 단일 디자인 패턴을 구현 하 고이 Singleton 클래스의 개체 생성 전략을 변경, 하지만 이것은 Singleton의 매우 기본적인 구현 패턴이 디자인되며 다중 스레드 환경에서 교착 상태 및 클래스 액세스에 대한 작업을 처리하지 않습니다. 이 클래스 스레드를 안전하게 만드는 방법도 살펴보겠습니다. 진행하기 전에 싱글톤 반을 봉인하십시오. 나중에 수업을 봉인한 이유에 대해 살펴보겠습니다. 싱글톤 패턴은 소프트웨어 엔지니어링에서 가장 잘 알려진 패턴 중 하나입니다. 기본적으로 싱글톤은 자체의 단일 인스턴스만 만들 수 있는 클래스이며 일반적으로 해당 인스턴스에 대한 간단한 액세스 권한을 부여합니다.

일반적으로 singletons는 인스턴스를 만들 때 매개 변수를 지정할 수 없습니다. 동일한 매개 변수를 가진 모든 요청에 대해 동일한 인스턴스에 액세스해야 하는 경우 팩터리 패턴이 더 적합합니다. 이 문서에서는 매개 변수가 필요하지 않은 상황만 다룹니다. 일반적으로 싱글톤의 요구 사항은 인스턴스가 처음 필요할 때까지 인스턴스가 만들어지지 않는다는 것입니다. 이 실제 코드는 싱글톤 패턴을 로드밸런싱 개체로 보여 줍니다. 서버가 온-오프라인으로 동적으로 올 수 있고 모든 요청이 (웹) 팜의 상태에 대한 지식이 있는 하나의 개체를 통과해야 하기 때문에 클래스의 단일 인스턴스(singleton)만 만들 수 있습니다. 예를 들어 일부 구성 요소는 프로젝트에서 두 번 이상 인스턴스화할 이유가 없습니다. 로거를 예로 들어 보겠습니다. 로거 클래스를 단일 구성 요소로 등록하는 것은 매우 일반적입니다. 그런 다음 여러 클래스가 서로 다른 스레드에서 동시에 동일한 파일에 작성해야 할 수 있으므로 해당 목적을 위해 하나의 중앙 집중식 위치를 갖는 것이 항상 좋은 솔루션입니다. 싱글 톤 디자인 패턴은 GoF (갱 오브 포) 디자인 패턴 중 하나이며, 창조 패턴에 해당합니다. 지정된 시점에서 개체의 인스턴스가 하나만 살아 있는지 확인하고 지연 초기화를 지원합니다.

Comments are closed.