Instance vs Static Field

Static Field (a.k.a. Class Field)
-전역 데이터, 공유 데이터로 클래스 로딩 시 공간을 할당
-한 클래스에 하나만 정적 필드가 할당됨
-클래스명.정적필드명으로 사용
-클래스 객체의 개수를 카운트하거나 유틸리티 값들을 저장하는 경우 사용함

Instance Field
-객체의 현재 상태를 저장할 수 있는 자료
-객체가 생성될 시 메모리 공간을 할당
-객체명.객체필드명으로 사용

class ValueClass
{
     private int value = 0; // 인스턴스 필드
    public static int count = 0; // 정적 필드
     public ValueClass() { count++; }
    public void setValue(int value) { this.value = value; } // 인스턴스 메소드
    public int getValue() { return this.value; } // 인스턴스 메소드
    public void print() { Console.WriteLine(“value={0}”, this.value); } // 인스턴스 메소드
    public static void printString(string str) { Console.WriteLine(str); } // 정적 메소드
    public static int getCount() { return count; } // 정적 메소드
}
class Program
{
static void main(string[] args)
{
ValueClass c1 = new ValueClass();        c1.setValue(10); // 인스턴스 메소드
c1.print(); // 인스턴스 메소드 value=10
        ValueClass.printString(“test”); // 정적 메소드 (클래스명.정적메소드명) test
      ValueClass c2 = new ValueClass();
        c2.setValue(20); // 인스턴스 메소드
c2.print(); // 인스턴스 메소드 value=20
        Console.WriteLine(“number of ValueClass: {0}”, ValueClass.getCount()); // 정적 메소드 (클래스명.정적메소드명) number of ValueClass: 2
Console.WriteLine(“number of ValueClass: {0}”, ++ValueClass.count); // 정적 필드 (클래스명.정적필드명) number of ValueClass: 3
    }
}