싱글턴은 같은 종류의 객체가 하나만 존재하도록 하고 다른 코드의 해당 객체에 대한 단일 접근 지점을 제공하는 생성 디자인 패턴입니다.
싱글턴은 전역 변수들과 거의 같은 장단점을 가지고 있습니다: 매우 편리하나 코드의 모듈성을 깨뜨립니다.
싱글턴에 의존하는 클래스를 다른 콘텍스트에서 사용하려면 싱글턴도 다른 콘텍스트로 전달해야 합니다. 대부분의 경우 이 제한 사항은 유닛 테스트를 생성하는 동안 발생합니다.
기본 싱글턴
조잡한 싱글턴을 구현하는 것은 매우 쉽습니다. 생성자를 숨기고 정적 생성 메서드를 구현하기만 하면 됩니다.
같은 클래스는 다중 스레드 환경에서 잘못 작동합니다. 여러 스레드가 생성 메서드를 동시에 호출할 수 있으며 싱글턴 클래스의 여러 인스턴스를 가져올 수 있기 때문입니다.
Program.cs: 개념적인 예시
Output.txt: 실행 결과
스레드로부터 안전한 싱글턴
이 문제를 해결하려면 싱글턴 객체를 처음 생성하는 동안 스레드들을 동기화해야 합니다.
Program.cs: 개념적인 예시
Output.txt: 실행 결과