다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.
정적 변수(static)을 포함한다면 인스턴스를 생성하기 전에 반드시 정적 멤버 변수를 초기화해야 한다.
정적 변수 초기화에는 정적 멤버 초기화, 정적 생성자 두 가지 선택지가 존재한다.
정적 필드를 초기화하는 게 큰 작업이라면 Lazy<T>를 사용하여 초기화 작업을 미룰 수 있다.
정적 멤버 초기화
- 일반 필드의 멤버 초기화와 같이 간단하게 초기화할 때 사용할 수 있다.
- 정적 생성자가 호출되기 이전에 실행되며, 베이스 클래스의 정적 생성자보다도 먼저 호출된다.
- 예외를 처리하지 못하기 때문에 예외 발생 가능성이 있다면 정적 생성자를 사용하자.
public class MySingleton
{
private static readonly MySingleton instance = new MySIngleton();
private MySingleton()
{
}
}
정적 생성자
- 첫 번째 인스턴스가 만들어지거나 정적 멤버가 참조되기 전에 자동으로 호출된다.
- 정적 생성자는 한정자를 사용하거나 매개변수를 갖지 않는다.
- 정적 생성자는 한 개만 존재하며, 상속하거나 오버로드할 수 없다.
- 예외가 발생한다면 TypeInitilizationException과 함께 에러가 발생한다.
public class MySingleton
{
private static readonly MySingleton instance;
static MySingleton() // 정적 생성자
{
instance = new MySingleton();
}
private MySingleton() // 일반 생성자
{
}
}
결론
- 일반 멤버와 동일하게 멤버 초기화 구문을 사용하지만, 예외 발생 가능성이 있다면 정적 생성자를 사용하자.
'🌍 C# Study > 이펙티브 C#' 카테고리의 다른 글
[15] 불필요한 객체를 만들지 말라 (0) | 2021.04.25 |
---|---|
[14] 초기화 코드가 중복되는 것을 최소화하라 (0) | 2021.04.25 |
[12] 할당 구문보다 멤버 초기화 구문이 좋다 (0) | 2021.04.25 |
[11] .NET 리소스 관리에 대한 이해 (0) | 2021.04.25 |
[10] 베이스 클래스가 업그레이드된 경우에만 new 한정자를 사용하라 (0) | 2021.04.23 |