static 한정자
- 특정 개체가 아니라 형식 자체에 속하는 정적 멤버를 선언할 수 있음
- 클래스, 필드, 메서드, 프로퍼티, 연산자, 이벤트, 생성자와 같이 사용 가능
- 인덱서, 소멸자에 사용 불가
=> 모든 정보가 인스턴스가 아니고 클래스에 담긴다고 생각하면 됨
static method
- Non Static Method 보다 속도가 빠름
- 인스턴스의 객체 멤버 참조 불가능
- 클래스 명을 통해서 사용
NonStaticClass.StaticMethod();
- 파라미터 전달 가능
class NonStaticClass
{
public int nonStaticField;
public static int staticField;
public static void StaticMethod(int inputValue)
{
staticField = inputValue;
}
}
public static void Main()
{
NonStaticClass.StaticMethod(7);
}
static field
- 인스턴스가 아닌 클래스에 속하므로 실행될 때 한번 초기화되고 계속 동일한 메모리를 사용
- Non Static Field는 인스턴스 생성할 때 마다 인스턴스에 할당되어 생기는 반면 static Field는 한 개만 존재
static class
- 프로그램이 로드될 때 정적 생성자가 한번 호출되면서 메모리에 로드됨
- 생명주기는 프로그램이 살아있는 동안이므로 프로그램이 종료되거나 crash 발생하는 경우에 해제됨
- 클래스를 인스턴스화 할 수 없음 (new 사용 불가)
- 정적 멤버만 포함(생성자도 마찬가지)
- static 생성자는 프로그램이 로드되고 난 직후 실행됨, 보통 static field를 초기화하는 경우에 사용
static class StaticClass
{
public static int staticField;
static StaticClass()
{
System.Console.WriteLine(staticField);
staticField = 5;
}
}
public static void Main()
{
// 0이 먼저 출력되고
System.Console.WriteLine(StaticClass.staticField); //여기서 5가 출력됨
}
cf) static클래스는 static 멤버와 private 생성자만 포함된 클래스와 동일한 역할