Static

메소드나 필드가 클래스의 인스턴스가 아닌 클래스 자체에 소속되도록 지정하는 한정자
  • static 으로 한정하지 않은 필드는 자동으로 인스턴스에 소속
  • static으로 한정한 필드는 클래스에 소속

인스턴스에 소속된 필드의 경우

class MyClass
{
	public int a;
	public int b;

	public static void Main()
	{
		MyClass obj1 = new MyClass();
		obj1.a = 1;
		obj1.b = 2;
		
		MyClass obj2 = new Myclass();
		obj2.a = 3;
		obj2.b = 4;
	}
}
클래스에 소속된 필드의 경우 (static)

class MyClass
{
	public static int a;
	public static int b;

	public static void Main()
	{
		MyClass.a = 1;
		Myclass.b = 2;
	}
}

📍 static으로 수식한 필드는 프로그램 전체에 걸쳐 하나만 존재, 프로그램 전체에 걸쳐 공유해야하는 변수가 있다면 정적 필드를 사용

using static Console;  
  
internal static class Global  
{  
	public static int Count = 0;  
}  
  
internal class ClassA  
{  
	public ClassA()  
	{  
		Global.Count++;  
	}  
}  
  
internal class ClassB  
{  
	public ClassB()  
	{  
		Global.Count++;  
	}  
}  
public static class StaticField  
{  
	public static void App()  
	{  
		WriteLine($"Before Global Count : {Global.Count}");  
		new ClassA();  
		new ClassA();  
		new ClassB();  
		new ClassB();  
		WriteLine($"After Global Count : {Global.Count}");  
	}  
}