정적필드: 인스터스멤버는 new로 객체를 생성할떄 객체마다 고유의 메모리에 할당됨
즉 각각의 메모리에 할당이됨 하지만 정적필드를 사용하면 같은 메모리에 할당이됨
static 예약어를 사용하면 정적필드로 사용가능
[클래스].[정적필드]를 쓰면 전역적으로 호출가능
아래는 클래스의 객체가 생성될 떄마다 횟수를 증가시키는 즉 전역적으로 값이 유지되게 출력하는 코드이다
class Person
{
static public int CountOfInstance; // 정적 필드
public string _name; //인스턴스 필드
public Person(string name)//생성자
{
CountOfInstance++;
_name = name;
}
}
class Program
{
static void Main(string[] atgs)
{
Console.WriteLine(Person.CountOfInstance);//정적 필드 호출 0이 호출
Person person1 = new Person("홍길동");
//인스턴스 생성 CountOfInstance++;가 실행되어 값은 1됨(위에서 한번 실행되서)
Person person2 = new Person("홍길순");
//또 한번 인스턴스가 생성되고 CountOfInstance++;가 실행되어 값은 2됨
Console.WriteLine(Person.CountOfInstance);//정적 필드 호출 2가 출력됨
}
}
인스턴스 필드로 했을경우 new로 항당받은 객체마다
각각의 메모리를 확보하기 떄문에 0 0이 출력됬을 것이다
하지만 정적필드로 사용 할 경우 하나에 메모리를 사용해 전역적으로 값이 유지가 되어
위에 코드처럼 값이 유지가 되어 유지된 값이 출력됨