데이터 영역
-전역변수와 static변수가 할당되는 영역.
-프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야만 메모리에서 소멸.
스택 영역
-함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역.
-함수 호출이 완료되면 소멸.
-늦게 할당된 변수의 메모리가 먼저 해제.
힙 영역
-프로그래머가 관리하는 메모리 영역.
-동적 할당으로 생성되는 메모리 영역.
static 변수는 객체를 선언만 해도 메모리가 할당되며 해당 객체를 계속 반복적으로 생성해도 그 메모리는 유지가 됨.
일반적인 변수들이 객체가 새로 생성될 때 메모리가 초기화 되는 것과는 다른 점.
프로그램 로딩시 단 한 번 클래스 내에 생성되고 동일 메모리를 계속 사용.
public class MyClass
{
private static int staticNum=0;
private int num=0;
public StaticTest()
{
staticNum++;
num++;
}
public void ShowMe()
{
Console.WriteLine("staticNum : {0}, num : {1}", staticNum, num);
}
}
public static void Main()
{
for(int i=0; i<5; i++)
{
StaticTest st = new StaticTest();
st.ShowMe();
}
}
실행결과
staticNum : 1, num : 1
staticNum : 2, num : 1
staticNum : 3, num : 1
staticNum : 4, num : 1
staticNum : 5, num : 1
static 메소드는 객체가 메모리를 할당 받기 전에 호출이 되기 때문에 객체 생성 후 메모리 할당을 받는 일반 변수에는 접근이 불가능.
인스턴스 메소드와는 달리 클래스로부터 객체를 생성하지 않고 클래스명.메소드명 형식으로 호출하는 메소드이다.
메소드 내부에서 클래스 인스턴스 객체멤버를 참조해서는 안된다.
인스턴스 객체로부터 호출될 수 없으며, 반드시 클래스명과 함께 사용된다.
public class MyClass
{
public int InstMethod()
{
return 1;
}
public static int StaticMethod()
{
return 1;
}
}
public class MySecondClass
{
public void StaticTest()
{
MyClass mc=new MyClass();
int a = mc.InstMethod();
int b = MyClass.StaticMethod();
}
}
static 클래스는 모든 클래스 멤버가 static 멤버로 되어 있으며, public생성자를 가질 수 없지만(객체를 생성할 수 없으므로), static 생성자를 가질 수 있다.
이 static생성자는 주로 static 필드들을 초기화 할 때 사용한다.
Fin.
잘 못 된 정보가 있으면 말씀해주세요~
1초도 걸리지 않는 공감버튼 클릭은 작성자에게 큰 힘이 됩니다.
'C#' 카테고리의 다른 글
[C#] 람다식 Lambda Expressions (0) | 2015.06.12 |
---|---|
[C#] Hashtable foreach (0) | 2015.06.11 |
[C#] Textbox 마지막 추가 텍스트에 자동 포커스 (1) | 2015.06.11 |
[C#] 자동구현 프로퍼티 (0) | 2015.06.10 |
[C#] DWORD 를 C#에서 쓰기 (0) | 2015.03.18 |