/*정적 클래스 및 정적 클래스 멤버
정적 클래스 및 정적 클래스 멤버(C# 프로그래밍 가이드)*/

정적 클래스는 기본적으로 비정적 클래스와 동일하지만, 
정적 클래스는 인스턴스화할 수 없다는 한 가지 차이점이 있습니다. 
즉, new 연산자를 사용하여 클래스 형식의 변수를 만들 수 없습니다. 
인스턴스 변수가 없기 때문에 클래스 이름 자체를 사용하여 정적 클래스의 멤버에 액세스합니다. 
예를 들어 public static 메서드 MethodA를 포함하는 UtilityClass라는 정적 클래스가 있는 경우 
다음 예제와 같이 메서드를 호출합니다.

UtilityClass.MethodA();  

정적 클래스는 입력 매개 변수에 대해서만 작동하고 
내부 인스턴스 필드를 가져오거나 설정할 필요가 없는 메서드 집합에 대한 편리한 컨테이너로 사용할 수 있습니다. 
예를 들어 .NET 클래스 라이브러리의 정적 System.Math 클래스에는 
Math 클래스의 특정 인스턴스에 고유한 데이터를 저장하거나 검색할 필요 없이 수학 연산을 수행하는 메서드가 포함되어 있습니다. 
즉, 다음 예제와 같이 클래스 이름과 메서드 이름을 지정하여 클래스의 멤버를 적용합니다.

double dub = -3.14;  
Console.WriteLine(Math.Abs(dub));  
Console.WriteLine(Math.Floor(dub));  
Console.WriteLine(Math.Round(Math.Abs(dub)));  
  
// Output:  
// 3.14  
// -4  
// 3  

모든 클래스 형식과 마찬가지로, 
정적 클래스에 대한 형식 정보는 클래스를 참조하는 프로그램이 로드될 때 .NET 런타임에 의해 로드됩니다. 
프로그램에서 클래스가 로드되는 시기를 정확하게 지정할 수는 없습니다. 
그러나 클래스가 로드되도록 하고, 
프로그램에서 클래스를 처음으로 참조하기 전에 해당 필드가 초기화되고 정적 생성자가 호출되도록 합니다. 
정적 생성자는 한 번만 호출되며, 
프로그램이 있는 애플리케이션 도메인의 수명 동안 정적 클래스가 메모리에 유지됩니다.

>참고
자체 인스턴스 하나만 생성될 수 있도록 하는 비정적 클래스를 만들려면 C#에서 Singleton 구현을 참조하세요.

다음 목록은 정적 클래스의 주요 기능을 제공합니다.
1. 정적 멤버만 포함합니다.
2. 인스턴스화할 수 없습니다.
3. 봉인되어 있습니다.
4. 인스턴스 생성자를 포함할 수 없습니다.

따라서 정적 클래스를 만드는 것은 기본적으로 정적 멤버와 private 생성자만 포함된 클래스를 만드는 것과 동일합니다. 
private 생성자는 클래스가 인스턴스화되지 않도록 합니다. 
정적 클래스를 사용하면 컴파일러에서 인스턴스 멤버가 실수로 추가되지 않도록 확인할 수 있다는 장점이 있습니다. 
컴파일러는 이 클래스의 인스턴스를 만들 수 없도록 합니다.

정적 클래스는 봉인되므로 상속할 수 없습니다. 
Object를 제외하고 어떤 클래스에서도 상속할 수 없습니다. 
정적 클래스는 인스턴스 생성자를 포함할 수 없습니다. 
그러나 정적 생성자는 포함할 수 있습니다. 
또한 클래스에 특수한 초기화가 필요한 정적 멤버가 포함된 경우 비정적 클래스에서 정적 생성자도 정의해야 합니다. 
자세한 내용은 정적 생성자를 참조하세요.

+ Recent posts