public class Singleton
{
public static Singleton Instance { get; } = new();
private Singleton()
{
Console.WriteLine("생성자 호출");
}
static Singleton()
{
Console.WriteLine("정적 생성자 호출");
}
}
class Program
{
static void Main(string[] args)
{
Singleton instance1 = Singleton.Instance;
Singleton instance2 = Singleton.Instance;
if (instance1 == instance2)
{
Console.WriteLine($"{nameof(instance1)}과 {nameof(instance2)}는 같은 인스턴스입니다.");
}
}
}
간단하게 만든 싱글톤 코드입니다.
일반 생성자와 정적 생성자를 정의했고, 프로퍼티로 읽기 접근만 가능하게 했습니다.
여기서 정적 생성자, 일반 생성자 순으로 호출하고 있습니다.
단지 정적 생성자에서 먼저 new로 생성을 한 후 문자열을 출력하기 때문에 일반 생성자 문자열이 먼저 출력되고, 정적 생성자 문자열이 출력됩니다.
여기서 질문
1. 처음으로 프로퍼티에 접근해서 정적 생성자가 호출될 때, new로 인스턴스를 생성하고 반환하는 과정이 Thread-Safe하기 때문에 위 코드가 Thread-Safe한건가요?
2. 처음으로 프로퍼티에 접근할 때 인스턴스를 생성한다면 Lazy Initialization을 구현한 것 아닌가요? Lazy<T>로 구현한 싱글턴과 어떤 차이가 있나요?
[최초 등록일: ]
[최종 수정일: 10/18/2022]